pytest中的参数化
时间: 2024-04-18 11:22:55 浏览: 78
在pytest中,参数化是一种非常有用的功能,它允许我们通过在测试函数上使用装饰器来传递不同的参数组合进行测试。这样可以减少代码的重复编写,提高测试的覆盖率。
pytest中的参数化可以通过`@pytest.mark.parametrize`装饰器来实现。具体步骤如下:
1. 导入pytest模块:`import pytest`
2. 在测试函数上使用`@pytest.mark.parametrize`装饰器,并传入参数名和参数值的列表或元组。
3. 在测试函数中使用传入的参数名作为参数进行测试。
下面是一个示例:
```python
import pytest
# 定义测试函数
def add(a, b):
return a + b
# 使用参数化装饰器
@pytest.mark.parametrize("a, b, expected", [
(1, 2, 3), # 参数组合1
(4, 5, 9), # 参数组合2
(10, -5, 5) # 参数组合3
])
def test_add(a, b, expected):
assert add(a, b) == expected
```
在上面的示例中,我们定义了一个名为`add`的函数,然后使用`@pytest.mark.parametrize`装饰器来传递不同的参数组合进行测试。在`test_add`函数中,我们使用传入的参数进行测试,并使用`assert`语句来断言测试结果是否符合预期。
相关问题
pytest 命令行参数化
pytest支持通过命令行传递参数来进行参数化。首先需要在conftest.py中添加命令行选项,可以使用pytest_addoption函数来实现。在该函数中,可以通过parser.addoption方法添加参数选项,比如"--cmdopt"。然后,可以在用例中使用fixture来调用cmdopt函数,从命令行传入的参数可以通过该函数获取到。例如:@pytest.fixture(scope='class') def cmdopt(request): return request.config.getoption("--cmdopt")。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Pytest 命令行传参代码示例](https://blog.csdn.net/liuchaoqi06/article/details/121142117)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [pytest中命令行传参,以及三种参数化方式](https://blog.csdn.net/weixin_40274647/article/details/120976782)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
pytest 的参数化
pytest 的参数化功能可以让我们轻松地生成多个测试用例,并且只需要在一个测试函数中编写一次测试逻辑,省去了大量的重复代码。下面是一个使用 pytest 参数化的示例:
```
import pytest
@pytest.mark.parametrize("input1, input2, expected_output", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0)
])
def test_addition(input1, input2, expected_output):
assert input1 + input2 == expected_output
```
在上面的代码中,我们使用 `@pytest.mark.parametrize` 装饰器来指定测试函数的参数化列表。每个参数化列表元素是一个包含测试参数和期望输出的元组。在这个例子中,我们为 `input1`、`input2` 和 `expected_output` 参数指定了三个不同的元组。这样,pytest 会自动为每个元组生成一个单独的测试用例,并使用指定的参数运行测试函数。
运行上面的测试函数,pytest 将会使用参数 `(1, 2, 3)` 运行一次 `test_addition` 函数,使用参数 `(0, 0, 0)` 运行一次,使用参数 `(-1, 1, 0)` 运行一次。如果所有测试用例都通过,则 pytest 将会输出测试通过的信息。
阅读全文