pytest的参数化处理

在pytest中,可以使用参数化测试,即每组参数都独立执行一次测试。使用的是:pytest.mark.parametrize(argnames,argvalues).传入的数据格式可以是:

  • 列表
  • 元祖
  • 字典

1.列表
代码如下:test_01函数会执行两次,因为列表中有两个值。

import pytest

# 列表
data = ['123', '456']

@pytest.mark.parametrize('pwd', data)
def test_01(pwd):
    print(pwd)

输出:

============================= test session starts =============================
collecting ... collected 2 items

test_para.py::test_1[123] PASSED                                         [ 50%]123

test_para.py::test_1[456] PASSED                                         [100%]456


============================== 2 passed in 0.02s ==============================

2.元组
代码如下所示,在列表中包含两个元组的值,函数有三个参数,且也会执行两遍。

data2 = [
    (1, 2, 3),  # 或者[1, 2,3]
    (4, 5, 6)  # 或者[4, 5,6]
]


@pytest.mark.parametrize('a, b, c', data2)
def test_2(a, b, c):
    print(a, b, c)
============================= test session starts =============================
collecting ... collected 2 items

test_para.py::test_2[1-2-3] PASSED                                       [ 50%]1 2 3

test_para.py::test_2[4-5-6] PASSED                                       [100%]4 5 6


============================== 2 passed in 0.02s ==============================

3.字典

# 字典

data3 = (
    {
        'user': 1,
        'pwd': 2
    },
    {
        'user': 3,
        'pwd': 4
    }
)


@pytest.mark.parametrize('dic', data3)
def test_3(dic):
    print(dic)

输出如下:

============================= test session starts =============================
collecting ... collected 2 items

test_para.py::test_3[dic0] PASSED                                        [ 50%]{'user': 1, 'pwd': 2}

test_para.py::test_3[dic1] PASSED                                        [100%]{'user': 3, 'pwd': 4}


============================== 2 passed in 0.02s ==============================

4.参数ids
参数化装饰器有一个额外的参数ids,可以标识每一个测试用例,自定义测试数据结果的显示,为了增加可读性。
代码如下:

data_1 = [
    pytest.param(1, 2, 3, id="(a+b):pass"),  # id的值可以自定义, 只要方便理解每个用例是干什么的即可
    pytest.param(4, 5, 10, id="(a+b):fail")
]


def add(a, b):
    return a + b


class TestParametrize(object):

    @pytest.mark.parametrize('a, b, expect', data_1)
    def test_parametrize_1(self, a, b, expect):
        assert add(a, b) == expect

输出:

============================= test session starts =============================
collecting ... collected 2 items

test_para.py::TestParametrize::test_parametrize_1[(a+b):pass] 
test_para.py::TestParametrize::test_parametrize_1[(a+b):fail] PASSED     [ 50%]FAILED     [100%]
test_para.py:54 (TestParametrize.test_parametrize_1[(a+b):fail])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远不要矫情

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值