pytest参数化parametrize
时间: 2023-10-04 17:09:46 浏览: 51
pytest中的参数化装饰器parametrize可以用于为函数或类添加多个参数组合,生成多个测试用例。参数的组合是根据给定的参数值列表来生成的。
具体使用方式如下:
1. 使用装饰器@parametrize来标记需要参数化的测试函数或测试类。
2. 在@parametrize装饰器中,通过指定参数名和对应的参数值列表来定义参数组合。参数值列表可以是一个可迭代对象,例如列表或元组。
3. 当有多个参数需要参数化时,可以使用多个@parametrize装饰器,每个装饰器对应一个参数。
4. 最终生成的测试用例数量为各个参数值列表长度的乘积。
例如,如果有两个参数a和b,分别有两个和三个取值,那么最终生成的测试用例数量就是2*3=6。
示例代码如下:
```python
import pytest
data1 = [1, 2]
data2 = ['a', 'b', 'c']
@pytest.mark.parametrize('test1', data1)
@pytest.mark.parametrize('test2', data2)
def test_param(test1, test2):
print('\n测试数据:{}-{}'.format(test1, test2))
```
在上述示例中,test_param函数有两个参数test1和test2,它们分别可以取data1和data2中的值。最终生成的测试用例数量为2*3=6,每个用例中的参数取值为(1, 'a')、(1, 'b')、(1, 'c')、(2, 'a')、(2, 'b')、(2, 'c')。
另外,参数化装饰器还支持指定参数名,用来在测试用例中展示参数值的名称。例如:
```python
import pytest
data = [(1, 2, 3), (4, 5, 9)]
@pytest.mark.parametrize('a, b, expect', data)
def test_param(a, b, expect):
print('\n测试数据:{} {}'.format(a, b))
assert a + b == expect
```
在上述示例中,test_param函数有三个参数a、b和expect,它们分别可以取data中的三元组的值。最终生成的测试用例数量为2,每个用例中的参数取值为(1, 2, 3)和(4, 5, 9)。
通过使用参数化装饰器@parametrize,可以方便地生成多个测试用例,并且在测试报告中展示参数值的组合。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Python测试框架pytest(17)参数化parametrize](https://blog.csdn.net/wangmcn/article/details/120956918)[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_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [pytest之parametrize参数化](https://blog.csdn.net/ifling99/article/details/126236312)[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_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]