python pytest-bdd 如何在conftest中获取step_defs里的scenario数量
时间: 2024-09-15 19:07:34 浏览: 44
在`pytest-bdd`中,在`conftest.py`文件中获取`step_defs`目录下的Scenario(场景)数量,你可以通过导入`steps`模块并使用Python的内置`len()`函数来计算。假设`step_defs`目录下都是`Scenario`类的定义,可以这样做:
```python
# 假设我们有一个名为steps的模块,其中包含Scenario类
from . import steps
# 获取Scenario类的数量
num_scenarios = len(steps.__file__.split('.')[:-1]) if '.' in steps.__file__ else len(glob.glob(f'{os.path.dirname(steps.__file__)}/*.py')) - 1
```
这里我们先尝试从`steps`模块的文件路径中提取出Python文件数量,如果`steps`模块直接导入的是一个模块(如`steps.py`),则`__file__`将是模块名称;如果它是包(如`steps`),则我们需要使用`os.path.dirname(steps.__file__)`来获取其父目录并搜索`.py`文件。
注意:这段代码假设`steps`模块是在当前目录的`step_defs`子目录中,如果不是,则需要相应调整路径。另外,`glob.glob()`用于查找目录下的所有Python文件,`-1`是因为`glob.glob()`会返回目录自身(最后一个元素)。
相关问题
Pytest-BDD 中,每一个scenario,记录每一次 scenario动图
在 Pytest-BDD 中,你可以使用 `pytest-html` 插件来生成测试报告,并且该插件支持录制每个 scenario 的动图。下面是一个示例的 `pytest.ini` 文件和使用 `pytest.mark.record_tests` 装饰器来记录动图的示例代码:
首先,在项目根目录下创建一个 `pytest.ini` 文件,并添加以下内容:
```ini
[pytest]
addopts = --html=report.html
```
接下来,在你的测试文件中,你可以使用 `pytest.mark.record_tests` 装饰器来记录每个 scenario 的动图。示例代码如下:
```python
import pytest
from pytest_bdd import scenarios, given, when, then
from selenium import webdriver
# 定义 scenarios
scenarios('path/to/feature_file.feature')
@pytest.fixture(scope='session')
def browser():
# 在整个测试会话期间启动浏览器
driver = webdriver.Chrome()
yield driver
driver.quit()
@given('I am on the home page')
def step_given(browser):
browser.get('https://www.example.com')
@when('I click on the button')
def step_when(browser):
button = browser.find_element_by_id('button-id')
button.click()
@then('I should see the result')
def step_then(browser):
result = browser.find_element_by_id('result-id')
assert result.text == 'Expected Result'
@pytest.mark.record_tests
def test_scenario():
pass
```
在上面的示例代码中,我们使用 `pytest.mark.record_tests` 装饰器来标记测试函数 `test_scenario`。当运行测试时,`pytest-html` 插件会生成一个名为 `report.html` 的测试报告,并且会记录每个被标记的测试函数的动图。
确保你已经安装了 `pytest`、`pytest-bdd` 和 `pytest-html` 这些依赖。然后,在命令行中运行 `pytest` 命令,它将运行你的测试并生成测试报告,其中包含所有标记为 `record_tests` 的 scenario 的动图。
阅读全文