pytest参数化parametrize使用方法(实现数据相加)

如果有一批测试用例,具有相同的测试步骤 ,只是测试参数数据不同 。那么自动化测试时,就可以使用pytest.mark.parametrize()传入测试函数,测试时会循环执行这些测试数据,使用参数化好处是把测试数据从用例代码中分离开来,以后增加新的测试用例,只需要修改数据就行。


使用方法:

@pytest.mark.parametrize(argnames, argvalues)

argnames:参数化变量名,字符串,多个参数中间用逗号隔开,参数化变量名要与操作的函数的形参一样。

argvalues:list,多组数据用元组类型。里面装的是参数化的值(也就是测试数据),与操作函数的形参对应。

说白了:@pytest.mark.parametrize(argnames, argvalues)相当于调用函数传递实参,第一个参数是定位函数的形参,第二个参数是传入实参,实参用列表来装。


举个例子:使用参数化@pytest.mark.parametrize计算两个数之间的和,并断言计算的值是否正确

import pytest

@pytest.mark.parametrize('a,b,result', [
    (1,2,3),
    (4,5,9)])

def test_add(a, b,result):
    assert a+b==result

测试结果: 运行成功

test_autotest1.py::test_add[1-2-3] PASSED                                [ 50%]
test_autotest1.py::test_add[4-5-9] PASSED                                [100%]

注意上面说的:参数化变量名'a,b,result'与要传入参数的函数test_add(a, b, result)的形参一样。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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* [pytestparametrize参数化](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 ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值