Pytest之paramtrize参数化

paramtrize 参数化:

众所周知,测试用例需要尽可能多的(有代表性)的测试数据,在pytest中,我们可以往test数组中添加很多同样格式的测试数据,这个过程就是所谓的参数化。

参数化即对同一个接口,使用多种不同的输入对其进行测试,以验证每一组输入的参数是否都可以得到预期的结果。Pytest提供了pytest.mark.paramtrize这种方式来进行参数化

一、参数说明

@pytest.mak.paramtrize(argsnames, argsvalues, ids=None) 

如上所示是paramtrize 使用格式,其中

argsnames :参数名,是个字符串,如中间用逗号分隔则表示为多个参数名;
argsvalues :参数值,参数组成的列表,列表中有几个元素,就会生成几条测试用例;

二、使用方法

  • 使用@pytest.mak.paramtrize()装饰待测试的方法;
  • paramtrize(‘a’, testdata)中’a’是自定义的参数名,testdata即为引入的参数列表;
  • 将自定义的参数名str等作为参数传给test_one;
单个参数名代码示例:
# 文件名为 test_in_time.py
import pytest
testdata1 = [1, 2, 3]

@pytest.mark.parametrize("a", testdata1)
def test_one(a):
    print("\n 参数a的值为", a)

如上代码所示,将自定义的参数名 a 做为参数传给test_one后,该测试方法就可以获得testdata列表中的每一项数据做为一个测试用例,如上代码所示,即有三条测试用例,执行 pytest -v test_in_time.py,结果如下:
图示

多个参数名代码示例
# 文件名 test_in_time.py
import pytest
from datetime import datetime, timedelta


testdata1 = [1, 2, 3]

@pytest.mark.parametrize("a", testdata1)
def test_one(a):
    print("\n 参数a的值为", a)


testdata2 = [
    (datetime(2001, 12, 12), datetime(2001, 12, 11), timedelta(1)),
    (datetime(2001, 12, 11), datetime(2001, 12, 12), timedelta(-1))
]

@pytest.mark.parametrize("a, b, expected", testdata2)
def test_timedistance(a, b, expected):
    diff = a - b
    assert diff == expected

前面参数说明里提到了“ 参数名可以就用逗号分隔”,表示为多个参数名,当使用多个参数名时要注意,参数列表中的元素必须是可拆分的数组,并且数组内的元素数必须和参数名的数量相同,如上述代码所示的testdata2;
执行 pytest -vs test_in_time.py,结果如下:

图示

同一个方法多次使用paramtrize代码示例
# 文件名为test_in_time.py
import pytest
testdata1 = [1, 2, 3]
testdata2 = [4, 5, 6]

@pytest.mark.parametrize("b", testdata2)
@pytest.mark.parametrize("a", testdata1)
def test_one(a, b):
    print("\n 参数a的值为", a)
    print("参数b的值为", b)

图示
如上结果所示,总共产生9个(3 * 3)个测试用例,如果testdata2有两个元素,则会产生6(3 * 2)个测试用例,类似于笛卡尔积。所以可以使用这种方法,使多个 paramtrize 的所有元素互相组合,生成大量测试用例。

【注】pytest的安装使用教程移步Pytest测试框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值