0

我正在使用 pytest bdd 来执行 bdd 场景。例子:

Scenario Outline: entry with special character
Given I am an authenticated user
When I request entry information with <entryName> name
Then I expect a 200 response code
And I check the output list contains valid data
Examples:
  | entryName     |
  | #@            |

在场景中,我创建条目,然后查询并验证响应代码/输出。无论场景是否成功,我都希望能够清理我创建的条目(因此插入另一行“然后我清理我的数据”将无法实现我的目标)。

根据https://pytest-bdd.readthedocs.io/en/latest/ -pytest_bdd_after_scenario(request, feature, scenario)无论场景成功与否,都有一个钩子可以让我执行清理。

  1. 我应该在哪里实施?(我试着把它放在 test_my_scenario.py 但它没有被执行,根据https://github.com/pytest-dev/pytest-bdd/issues/174它看起来应该在 conftest 中?)
  2. 如何将特定于场景的参数传递给钩子?不像pytest_bdd_step_error它在签名中没有 func_args 。那么如何清理我在场景中创建的特定条目呢?
4

1 回答 1

0
  1. 是的,您应该将pytest_bdd_after_scenario(request, feature, scenario)钩子放在 中conftest.py,以便为所有测试用例执行它。

  2. 您可以创建一个 pytest 夹具并将清理所需的所有数据存储在其中,然后pytest_bdd_after_scenario(request, feature, scenario)通过调用检索该夹具request.getfixturevalue(name_of_fixture)

例子:

@pytest.fixture
def context():
    return {'entryName': None}

@when("I request entry information with <entryName> name")
def do_post(context, entryName):
    # Do stuff here ...
    context['entryName'] = entryName

def pytest_bdd_after_scenario(request, feature, scenario):
    context = request.getfixturevalue('context')
    entry_name = context['entryName']
    # Clean up entry ...

于 2021-07-11T10:44:56.177 回答