1. Pytest参数化parametrize介绍
在测试过程中,通常需要针对不同的参数运行同一种函数,如果每个参数都手动运行一遍,工作量会非常大。在这种情况下,可以使用pytest中的参数化parametrize来自动化执行不同的测试用例。
pytest.parametrize的优点:
不必手动编写多个测试用例
可以自动化运行多个测试用例
支持引入多个参数值
2. Pytest参数化parametrize代码实例
下面是一个简单的示例,展示如何使用pytest.parametrize
2.1 准备测试函数
假设我们有一个用于计算年终奖金的函数,输入参数包括员工的薪水和公司的年度利润。我们要测试函数在不同参数值下的计算结果是否符合预期。
def calculate_bonus(salary, profit):
if profit >= 1000000:
return salary * 4
elif profit >= 500000:
return salary * 2
else:
return salary
2.2 定义测试用例和参数
现在我们希望对这个函数进行测试。为了测试不同的输入参数,我们可以使用pytest.parametrize。在这个函数中,我们可以将多组参数和期望值作为输入值和预期输出,然后通过一个assert语句来检查返回值是否符合预期
import pytest
@pytest.mark.parametrize("salary, profit, expected", [
(10000, 500000, 20000),
(20000, 1000000, 80000),
(5000, 200000, 5000),
(1000, 90000, 1000),
])
def test_calculate_bonus(salary, profit, expected):
assert calculate_bonus(salary, profit) == expected
在上面的代码中,@pytest.mark.parametrize("salary, profit, expected", [[参数列表]])装饰器指定了函数参数的名称和参数值(其中第一个元素是对应参数的名称,“参数列表”中包含多组参数,每组参数是将要输入的参数值的列表)。
通过使用该装饰器,我们可以自动化地运行多个测试用例,并将每组参数作为输入值,期望值作为预期输出值。如果输入的value和期望输出的expected值不匹配,则pytest会在测试运行期间引发AssertionError异常。
3. 结论
Pytest参数化parametrize是一种强大且灵活的自动化测试方法,可以大大减少测试工作量,让测试人员更加专注于解决实际问题。在上面的示例代码中,我们使用了@ pytest.mark.parametrize装饰器,将多组参数值输入到测试函数中,并通过assert语句来检查函数是否按预期进行计算。