pytest-参数化与fixture

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytest-参数化与fixture相关的知识,希望对你有一定的参考价值。

参考技术A pytest身为强大的测试单元测试框架,那么同样支持DDT数据驱动测试的概念。也就是当对一个测试函数进行测试时,通常会给函数传递多组参数。比如测试账号登陆,我们需要模拟各种千奇百怪的账号密码。

当然,我们可以把这些参数写在测试函数内部进行遍历。不过虽然参数众多,但仍然是一个测试,当某组参数导致断言失败,测试也就终止了。

通过异常捕获,我们可以保证程所有参数完整执行,但要分析测试结果就需要做不少额外的工作。

在 pytest 中,我们有更好的解决方法,就是参数化测试,即每组参数都独立执行一次测试。使用的工具就是 pytest.mark.parametrize(argnames, argvalues) 。

使用就是以装饰器的形式使用。
示例:

注意:

@pytest.mark.parametrize("phone_item,code", list(zip(phone, code))) 第一个参数必须是字符串,字符中的多个参数以 , 隔开,在函数中,形参必须一一对应,并且名字也要一样,具体参考上例。

测试夹具,类似于setup

相对于setup和teardown来说,固件的名字比较灵活。

pytest-fixture参数化

fixture参数化

指定params属性,实现fixture的参数化,引用该fixture的测试方法将遍历全部参数

import pytest

@pytest.fixture(params=["unittest", "pytest"])
def fix1(request):
    print(request.param)

def test_main(fix1):
    assert 0

if __name__ == "__main__":
    pytest.main(["-v"])
===============================
____ test_main[unittest] ______
unittest
____ test_main[pytest] ______
pytest

 

以上是关于pytest-参数化与fixture的主要内容,如果未能解决你的问题,请参考以下文章

pytest--fixture参数化的实现方式和执行顺序

pytest(三十七)--fixture参数化params

pytest文档42-fixture参数化params

pytest10-使用request参数化fixture

pytest--fixture之参数化

pytest文档42-fixture参数化params