行为:在步骤定义之外访问 context.config 变量



我找不到一种方法,如何从行为中context.config.userdata['url']的值来初始化我的ApiClient.ini

乖.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

首先,在你的behave.ini中,格式很重要。也就是说,记下空格:

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

其次,与其在/features/steps/steps.py中创建 ApiClient 对象,不如在/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)

我知道这是一个超级老的问题,但答案不是最新的。当前文档中似乎不需要空格,OP 的问题是标题标签。它必须是[behave]

https://behave.readthedocs.io/en/latest/behave.html

最新更新