写一段pytest-bdd程序代码,要求在执行第一个scenario之前能够打印出feature的名字,在执行最后一个scenario之后,打印出feature名字
时间: 2024-09-15 12:06:52 浏览: 51
pytest-bdd:py.test运行程序的BDD库
5星 · 资源好评率100%
要实现这个需求,你可以结合pytest-bdd的`@scenario`装饰器以及`test_loader`的事件机制。下面是一个示例代码:
```python
from _pytest.config import Config
from pytest_bdd import scenario, given, then
# 储存当前正在执行的feature name
current_feature = None
def pytest_runtest_setup(item):
global current_feature
if item.get_closest_marker('scenario'):
current_feature = item.getparent().nodeid.split('/')[-1].split('.')[0]
def pytest_runtest_teardown(item):
global current_feature
if current_feature and item.nodeid == f"{current_feature}-0":
print(f"Scenario {current_feature} finished.")
current_feature = None
# 使用scenario装饰器定义BDD场景
@scenario('./features/feature_file.feature', 'Scenario One')
def test_scenario_one():
pass
@given('some precondition')
def step_precondition():
pass
@then('an expected outcome')
def step_outcome():
pass
# 如果你想使用正则表达式匹配多个步骤,只需替换scenario函数即可
# @scenario(r'.*Scenario Two.*', 'Scenario Two')
# def test_scenario_two():
# pass
```
在这个代码中,我们定义了一个全局变量`current_feature`来存储当前执行的feature名字。在`pytest_runtest_setup`函数中,当遇到`@scenario`装饰器时,我们就更新`current_feature`。而在`pytest_runtest_teardown`函数中,如果当前执行的是第一个步骤(通常步骤编号为0),我们就打印出feature已完成。
注意,这里的`./features/feature_file.feature`需要替换为你的实际feature文件路径。如果你想匹配多个scenario,只需要添加更多的`@scenario`定义并调整正则表达式即可。
阅读全文