pytest.mark.parametrize用法举例
时间: 2023-12-31 10:04:37 浏览: 28
pytest.mark.parametrize用法举例:可以在测试函数上方使用该装饰器,将多组参数传入测试函数,并自动化执行所有测试用例。例如:@pytest.mark.parametrize("input, expected_output", [(5, 10), (10, 20)])。这意味着我们将两组参数传递给该测试函数,第一组参数为5和10,第二组参数为10和20,分别执行测试函数,预期输出结果分别为10和20。
相关问题
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 ]
@pytest.mark.parametrize() 基本用法
### 回答1:
`@pytest.mark.parametrize()` 是 Pytest 中的一个装饰器,用于为测试函数提供参数化数据。
基本用法如下:
```python
import pytest
@pytest.mark.parametrize("input1, input2, expected_output", [
(1, 2, 3),
(2, 3, 5),
(3, 4, 7),
(4, 5, 9)
])
def test_addition(input1, input2, expected_output):
assert input1 + input2 == expected_output
```
在上面的例子中,我们定义了一个名为 `test_addition` 的测试函数,并用 `@pytest.mark.parametrize()` 装饰器为该函数提供了参数化的数据。参数化数据由一组元组构成,每个元组对应一个测试用例,其中包含了输入参数和期望输出参数。
在运行测试时,pytest 会根据提供的参数组合,逐一执行测试函数,并将每个测试用例的结果与期望值进行比较,从而验证代码的正确性。
需要注意的是,在参数化时,要确保传入的参数数量与测试函数的参数数量一致。如果参数数量不匹配,pytest 会抛出异常。
### 回答2:
@pytest.mark.parametrize() 是 pytest 中的一个装饰器,用于参数化测试函数。参数化测试是一种测试方法,在进行多次测试时,通过传入不同的参数来运行相同的测试函数。
使用 @pytest.mark.parametrize() 装饰器时,需要将参数化的测试数据以参数的形式传入装饰器中。这些参数可以是一个值,也可以是一个列表,甚至是一个元组。每一组参数都会作为一个测试用例来执行测试函数。
下面是 @pytest.mark.parametrize() 的基本用法示例:
```python
import pytest
@pytest.mark.parametrize('name, age', [('Alice', 25), ('Bob', 30), ('Carl', 35)])
def test_person(name, age):
assert isinstance(name, str)
assert isinstance(age, int)
```
上面的示例中,`name` 和 `age` 参数分别代表人物的姓名和年龄。`@pytest.mark.parametrize('name, age', [('Alice', 25), ('Bob', 30), ('Carl', 35)])` 这行代码指定了三个测试用例,分别是 ('Alice', 25)、('Bob', 30) 和 ('Carl', 35)。
在执行测试时,pytest 将会创建三个测试用例并分别将对应的参数传入测试函数 test_person() 中。每个测试用例都会执行两个断言语句来验证参数的类型。
运行上述测试函数时,pytest 会打印出每个测试用例的执行结果,如果断言失败,还会给出具体的错误信息。
### 回答3:
@pytest.mark.parametrize() 是 pytest 框架中的一个装饰器,主要用于在测试函数中传递参数和参数化测试。
具体的用法如下:
1. 导入 pytest 和 pytest.mark 模块:
```
import pytest
import pytest.mark
```
2. 使用 @pytest.mark.parametrize() 装饰器来定义参数化的测试函数。
```
@pytest.mark.parametrize("参数名", 参数列表)
def test_function(参数名):
# 测试逻辑
```
其中,"参数名" 是参数的名称,参数列表可以是一个列表或元组。
3. 参数列表是一个包含多个参数值的列表或元组,每个参数值都是一个独立的测试用例。
```
@pytest.mark.parametrize("param", [1, 2, 3])
def test_function(param):
assert param > 0
```
在上述的示例中,test_function() 函数将被执行三次,分别使用参数 1、2 和 3 进行测试。
4. 参数列表也可以使用多个参数。
```
@pytest.mark.parametrize("param1, param2", [(1, 2), (3, 4), (5, 6)])
def test_function(param1, param2):
assert param1 + param2 == 3
```
在上述示例中,test_function() 函数将会被执行三次,分别使用 (1, 2)、(3, 4) 和 (5, 6) 作为参数进行测试。
5. pytest.mark.parametrize() 还支持使用字典来传递参数。
```
@pytest.mark.parametrize("param", [{"a": 1, "b": 2}, {"a": 3, "b": 4}, {"a": 5, "b": 6}])
def test_function(param):
assert param["a"] + param["b"] == 3
```
在上述示例中,test_function() 函数将会被执行三次,分别使用 {"a": 1, "b": 2}、{"a": 3, "b": 4} 和 {"a": 5, "b": 6} 作为参数进行测试。
通过使用 pytest.mark.parametrize() 装饰器,我们可以更方便地进行参数化测试,减少了编写大量重复测试用例的工作量。