@pytest.mark.parametrize() 基本用法
时间: 2023-08-31 15:22:40 浏览: 51
### 回答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() 装饰器,我们可以更方便地进行参数化测试,减少了编写大量重复测试用例的工作量。