天天看点

Pytest05:参数化测试

参数化测试是指 允许传递多组数据,对多组数据进行循环调用,pytest 会及时报告失败和passed case.

1.一组数据

咱们先看只有一组数据:

def test_add():
    def equivalent(a,b):
        return  a+b
    assert 10 == equivalent(5, 5)

           

执行结果如图:

Pytest05:参数化测试

测试通过了,但只是一条,能不能批量呢? 难不倒优秀pytest 同学, 使用

2.批量参数

@pytest.mark.parametrize(argnames,argvalues)

修改代码如下:

import  pytest

@pytest.mark.parametrize('a,b',[(5,5),(6,4),(3,7),(8,8)])
def test_add(a,b):
    def equivalent(a,b):
        return  a+b
    assert 10 == equivalent(a,b)

           

我们传递了 四组数据>(5,5),(6,4),(3,7),(8,8)

语法要记住

  1. @pytest.mark.parametrize(argnames,argvalues) , 在函数添加了装饰器
  2. argnames 要用 ‘args1 ,args2,args3’ , 用单引号并args 之间用逗号隔开,相当于Key
  3. argvalues 要用[(args1_value,args2_value,args3_value),(args1_value,args2_value,args3_value)]

    使用中括号,并用tuple 和args 对应,顺序不能变哦.

    咱们看看执行结果吧

    Pytest05:参数化测试

信息相当清晰, 参数 8-8 传入的参数校验失败,并指出了 assert 10 ==16 是错的.

如果想看passed 参数的情况,可以用-v 查看 ,请看截图:

Pytest05:参数化测试

【5-5】,【6-4】等都显示了出来 .

刚才的小伙伴提出了,我只想运行 【3-7】这个参数,有办法吗, 当然可以了, 看下边的截图

Pytest05:参数化测试

3. 参数的数据分离

@pytest.mark.parametrize(‘a,b’,[(5,5),(6,4),(3,7),(8,8)]) ,我们直接把数据传入不大友好,

我们修改下:

import  pytest
data=[(5,5),(6,4),(3,7),(8,8)]

@pytest.mark.parametrize('a,b',data)
def test_add(a,b):
    def equivalent(a,b):
        return  a+b
    assert 10 == equivalent(a,b)
           

data=[(5,5),(6,4),(3,7),(8,8)]

我们同样也可以为类添加 @pytest.mark.parametrize

修改代码如下 :

import  pytest

data=[(5,5),(6,4),(3,7),(8,8)]
@pytest.mark.parametrize('a,b',data)
class Test_add:

    def test_add(self,a,b):
        def equivalent(a,b):
            return  a+b
        assert 10 == equivalent(a,b)

           

打印结果如下:

Pytest05:参数化测试

4. @pytest.mark.parametrize 添加ID标识

语法为 pytest.param(,id=“something”)

修改代码:

import  pytest

data=[pytest.param(5,5,id="5+5:passed"),pytest.param(6,4,id="6+4:passed"),pytest.param(5,4,id="5+4:failed")]
@pytest.mark.parametrize('a,b',data)
class Test_add:

    def test_add(self,a,b):
        def equivalent(a,b):
            return  a+b
        assert 10 == equivalent(a,b)

           

可以看出value 可以放多个值,

输出结果如下:

Pytest05:参数化测试

test_add_variety.py::Test_add::test_add**[5+5:passed]** PASSED [ 33%]

test_add_variety.py::Test_add::test_add[6+4:passed] PASSED [ 66%]

test_add_variety.py::Test_add::test_add[5+4:failed] FAILED [100%]

其中test_add[5+5:passed] 中括号里显示我们的id .

有理解错误,或者好的建议请留言 ,谢谢

继续阅读