pytest pytest_generate_tests
时间: 2024-12-26 13:18:33 浏览: 4
### pytest `pytest_generate_tests` 自定义测试参数化
#### 使用场景
当默认的参数化机制无法满足需求时,可以通过实现 `pytest_generate_tests` 钩子函数来自定义更复杂的参数化逻辑[^1]。
#### 基本原理
该钩子会在测试用例收集阶段被调用,允许基于特定条件动态生成多个测试实例。这使得可以根据外部数据源或其他复杂规则灵活创建测试案例[^5]。
#### 示例代码
下面是一个简单的例子展示如何利用 `pytest_generate_tests` 进行基本的参数化:
```python
import pytest
def test_example(request):
# 获取由 pytest_generate_tests 提供的数据
input_data, expected_output = request.param
assert function_to_test(input_data) == expected_output
def pytest_generate_tests(metafunc):
"""为每个测试提供一组输入和预期输出"""
if "request" in metafunc.fixturenames:
# 定义要传递给测试的不同参数组合
parameters_list = [
("input_1", "expected_result_1"),
("input_2", "expected_result_2")
]
# 将这些参数应用到标记为 'param' 的 fixture 上
metafunc.parametrize("request", parameters_list, indirect=True)
```
在这个例子中,`test_example()` 接收了一个名为 `request` 的fixture 参数,并从中提取实际使用的参数值。而真正的参数化工作是在 `pytest_generate_tests()` 中完成的,这里指定了具体的参数列表并将其绑定到了相应的测试函数上[^4]。
对于更加高级的应用场景,还可以结合其他 PyTest 功能(如fixtures),甚至是从文件读取数据作为参数来源等操作来增强灵活性[^3]。
阅读全文