parametrize的值可以使用函数嘛
时间: 2023-12-30 18:06:34 浏览: 14
是的,pytest中的parametrize装饰器可以使用函数来生成参数值。这个函数应该返回一个可迭代的对象,例如列表或元组,其中每个元素都是一个参数组合。下面是一个简单的示例:
```python
import pytest
def get_test_data():
return [(1, 2, 3), (4, 5, 9), (10, 20, 30)]
@pytest.mark.parametrize("a, b, expected", get_test_data())
def test_addition(a, b, expected):
assert a + b == expected
```
在这个例子中,`get_test_data`函数返回一个包含三个元组的列表,每个元组表示一个参数组合。`@pytest.mark.parametrize`装饰器使用这些参数值来运行三次`test_addition`测试函数。
相关问题
pytest参数化parametrize
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 ]
pytest.mark.parametrize 文件
pytest.mark.parametrize是pytest框架中的一个装饰器,用于参数化测试用例。它可以将不同的参数传递给同一个测试函数,以便多次运行测试用例。在引用\[1\]和引用\[2\]中,示例展示了如何使用pytest.mark.parametrize来传递单个变量的参数,其中引用\[1\]使用元组作为参数,引用\[2\]使用列表作为参数。而在引用\[3\]中,展示了如何结合yaml数据使用pytest.mark.parametrize。首先,通过read_yaml函数将yaml文件中的数据读取出来,并将其转换为列表形式。然后,将这个列表作为参数传递给pytest.mark.parametrize装饰器,从而实现参数化测试用例。在这个示例中,参数名为"data",并且测试函数test_add_case4可以通过"data"来访问每个测试数据中的具体值。这样,pytest框架会根据参数化的设置,多次运行测试函数,每次传递不同的参数值。
#### 引用[.reference_title]
- *1* *2* [4.pytest parametrize()参数化](https://blog.csdn.net/lzmlc0109/article/details/125719941)[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^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [@pytest.mark.parametrize用法(yaml和fixture结合使用)](https://blog.csdn.net/qq_42870572/article/details/128149867)[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^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)