Поведение: доступ к переменным context.config вне определений шагов - PullRequest
0 голосов
/ 13 июня 2018

Я не могу найти способ, как инициализировать мой ApiClient со значением context.config.userdata['url'] из atture.ini

affve.ini

[behave.userdata]
url=http://some.url

steps.py

from behave import *
from client.api_client import ApiClient

# This is where i want to pass the config.userdata['url'] value
api_calls = ApiClient('???') 


@given('I am logged as "{user}" "{password}"')
def login(context, user, password):
    context.auth_header = api_calls.auth(user, password)

api_client.py

class ApiClient(object):

    def __init__(self, url):
        self.url = url

    def auth(self, email, password):
        auth_payload = {'email': email, 'password': password}
        auth_response = requests.post(self.url + '/api/auth/session', auth_payload)

        return auth_response.text

1 Ответ

0 голосов
/ 13 июня 2018

Перво-наперво, в вашем behave.ini, форматировании имеет значение .То есть запишите пробелы:

[behave.userdata]
url = http://some.url

Во-вторых, вместо создания объекта ApiClient в вашем /features/steps/steps.py, вы должны создать его в вашем /features/environment.py.Что это environment.py?Если вы не знаете, это в основном файл, который определяет, что должно произойти до / во время / после выполнения теста.Смотрите здесь для более подробной информации.

По сути, у вас будет что-то вроде:

environment.py

from client.api_client import ApiClient

""" 
The code within the following block is checked before all/any of test steps are run.
This would be a great place to instantiate any of your class objects and store them as
attributes in behave's context object for later use.
"""
def before_all(context):         
    # The following creates an api_calls attribute for behave's context object
    context.api_calls = ApiClient(context.config.userdata['url'])

Позже, когда вы захотите использовать свой объект ApiClient, выможет сделать это так:

steps.py

from behave import *

@given('I am logged as "{user}" "{password}"')
def login(context, user, password):
    context.api_calls.auth(user, password)
...