Pytest参数化parametrize使用代码实例

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语句来检查函数是否按预期进行计算。

后端开发标签