定义适用于多个关键字的行为步骤(例如 Given、When 和 Then)

Cyn*_*nic 4 python bdd python-3.x python-behave

有没有办法编写适用于多个关键字的步骤。就像说我的特点是:

Scenario: Something happens after navigating 
  Given I navigate to "/"
    And say some cookie gets set
  When I navigate to "/some-other-page"
  Then something happens because of that cookie
Run Code Online (Sandbox Code Playgroud)

我试图避免同时定义:

    @given('I navigate to "{uri}"')
    def get(context, uri):
        current_url = BASE_URL + uri
        context.driver.get(current_url)

    @when('I navigate to "{uri}"')
    def get(context, uri):
        current_url = BASE_URL + uri
        context.driver.get(current_url)
Run Code Online (Sandbox Code Playgroud)

如果您只定义一个并尝试将其用作两者,则会出现raise NotImplementedError(u'STEP:错误。在上面的例子中,它并没有那么糟糕,因为这一步很简单,但重复代码似乎是一种不好的做法,而且你可能会在更复杂的事情上发生同样的事情,对我来说,如果有像一个@all 或 @any 关键字。

抱歉,如果这已在某处得到解答,但很难搜索,因为很难找到此类问题的独特搜索词

Cyn*_*nic 6

事实证明,这可以使用@step. 例如

from behave import step

@step('I navigate to "{uri}"')
def step_impl(context, uri):
     current_url = BASE_URL + uri
     context.driver.get(current_url)
Run Code Online (Sandbox Code Playgroud)

将适用于:

Scenario: Demo how @step can be used for multiple keywords
    Given I navigate to "/"
    When I navigate to "/"
    Then I navigate to "/"
Run Code Online (Sandbox Code Playgroud)

注意:从导致此文件票证中找出了这一点。