【问题标题】:Behave: Accessing context.config variables outside of step definitions行为:在步骤定义之外访问 context.config 变量
【发布时间】:2018-11-23 00:31:33
【问题描述】:

我无法找到一种方法如何使用来自行为.ini 的 context.config.userdata['url'] 的值来初始化我的 ApiClient

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

【问题讨论】:

  • 是读取ini文件有问题吗? stackoverflow.com/questions/8884188/… 有帮助吗?
  • 不,我可以在我的步骤定义中读取 ini 文件并从中访问数据。虽然我不知道如何在步骤之外访问它,所以我可以在初始化 ApiClient 时使用它的值。

标签: python python-2.7 python-behave


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    其次,您应该在您的/features/environment.py 中创建它,而不是在您的/features/steps/steps.py 中创建您的ApiClient 对象。这是什么environment.py?如果您不知道,它基本上是一个文件,它定义了测试运行之前/期间/之后应该发生的事情。有关详细信息,请参阅here

    基本上,你会有类似的东西:

    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)
    

    【讨论】:

      猜你喜欢
      • 2019-07-28
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多