python自动测试Pytest中Fixture装饰器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python自动测试Pytest中Fixture装饰器相关的知识,希望对你有一定的参考价值。
参考技术A可以使用 pytest.fixture() 查看 fixture() 函数的源码和所需要的参数,同Fixture装饰器需要的参数一样。
说明:
使用Fixture装饰器来实现部分用例的前后置。
比如:我们在测试一个操作流程时,有的测试用例需要登陆,有的测试用例执行不需要用户登陆。
如果要直接使用 setup_function() 前置函数来实现,该文件中的所有用例执行前都需要进行用户登陆。
如下示例:
我们可以使用Fixture装饰器来实现部分用例的前后置,如下示例:
前面的示例,是在用例前加前置条件,相当于执行了 setup() 前置函数,既然有 setup() 前置函数那就会有 teardown() 后置函数,Fixture里面的 teardown() 后置函数用 yield 来唤醒。
示例:
yield 是当用例执行完之后,会执行 yield 后面的代码,但用例不能有 return 返回值。
addfinalizer 实现功能跟 yield 一样,但是用例可以 return 参数,传给后面用例。
示例1:
示例2:
示例3:
使用 yield 也可以返回数据。(这种方式好神奇)
上面例子是带返回值并且还要实现 teardown() 后置函数的Fixture写法。
这里就是单纯的说明带返回值的Fixture。
我们可以选择让Fixture返回我们需要的东西,如果Fixture需要配置一些数据,读个文件,或者连接一个数据库,那么你可以让Fixture返回这些数据或资源。
示例:
Fixture修饰的函数可以通过添加 params 参数来实现参数化。(实际工作中,不常用此方式)
request 代表Fixture的调用状态, request.param 作为返回值供测试使用。
示例:
参数是一个元组列表格式的数据。
总结: params 参数支持的格式。
@pytest.mark.usefixtures("fixturename") 装饰类也是一种调用Fixture的方式。
@pytest.mark.usefixtures("fixturename") 装饰类可以装饰模块、类、函数、方法。
usefixtures 与传 fixture 区别:
如果Fixture有返回值,则不能用 @pytest.mark.usefixtures("fixturename") 装饰器修饰用例。
如果Fixture没有返回值,用 @pytest.mark.usefixtures("fixturename") 装饰器和 @pytest.fixture() 装饰器作用一样。
示例:
以上是关于python自动测试Pytest中Fixture装饰器的主要内容,如果未能解决你的问题,请参考以下文章
python接口自动化12-pytest前后置与fixture
Python测试框架pytest(23)插件 - pytest-pickedpytest-lazy-fixture
pytest自动化测试框架详解+mark标记+fixture夹具