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

python学习-pytest-fixture

pytest自动化测试框架详解+mark标记+fixture夹具

pytest自动化测试框架详解+mark标记+fixture夹具

pytest接口自动化测试框架 | fixture调用fixture