在对一个测试函数,进行参数化传值时,正常情况下是直接传参,代码及运行结果如下。
import pytest
student = [(1, "Amy"), (2, "Tony Lee")]
@pytest.mark.parametrize('age,name', student)
def test_param_stu(age, name):
assert age != 0
assert len(name) != 0
无标记运行结果
可以看到,参数值在执行结果中出现,对于比较少的情况标记没什么问题,但如果参数情况复杂,可读性就会差一些。为了解决这个问题,有以下两个方法。
利用pytest.param()
(这个方法我觉得有些麻烦...但可能我没领悟到精髓....)
利用pytest.param()进行传参,id可以为每一组参数进行自定义,最后的运行结果也会以id标记出现。
代码为
import pytest
@pytest.mark.parametrize('age,name', [pytest.param(9, 'amy', id='one'), pytest.param(8, 'tony', id='two')])
def test_param(age, name):
assert age != 0
assert len(name) != 0
运行结果:
pytest.param运行结果
parametrize()中的ids参数
楼上,是我看书学到的方法。
但其实,ids参数可以直接做到自定义标记。
import pytest
student = [(1, "Amy"), (2, "Tony Lee")]
@pytest.mark.parametrize('age,name', student, ids=['one', 'two'])
def test_param_stu(age, name):
assert age != 0
assert len(name) != 0
运行结果:
ids运行结果
所以,其实直接运用ids参数就可以了~
附赠其它知识点
在标记xfail的测试函数,成功了会出现xpass,如果想强制性的指定为fail,可以在pytest.ini
文件中,进行如下配置:(但我至今还没有遇到这个情况的使用场景
xfail_strict=true
没什么工作,但也没有认真学习的一天,是个咸鱼~~~
自我记录,有错误欢迎指正。
网友评论