pytest框架--@pytest.fixture(scpoe=‘xxx')装饰器

Posted yzwdcjs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytest框架--@pytest.fixture(scpoe=‘xxx')装饰器相关的知识,希望对你有一定的参考价值。

pytest是一个非常成熟的全功能的Python测试框架

用例设计原则 谨记:当我们使用pytest框架写case的时候,一定要拿它的命令规范去case,这样框架才能识别到哪些case需要执行,哪些不需要执行
文件名以test_.py文件和_test.py
以Test开头的类
以test_开头的函数
以test_开头的方法

运行方式
可以通过pycharm里的终端命令,也可以pytest.main()运行(主推)

@pytest.fixture() 即测试用例执行的环境准备和清理,相当于unittest的setup()和teardown()

上面装饰器,下面函数名
定义fixture跟定义普通函数差不多,唯一区别就是在函数上加个装饰器@pytest.fixture(),fixture命名不要以test开头,跟用例区分开。
fixture是有返回值得,没有返回值默认为None。用例调用fixture的返回值,直接就是把fixture标记的函数名称当做变量名称传进去。

那么在一个fixture 内部如何区分环境准备、环境清理呢
环境清理没有专门的装饰器,还是在fixture装饰器函数内使用yield 关键字
yield 关键字以后得代码,就是环境清理的代码,即在测试用例执行完成之后会执行的代码

fixture的作用范围
fixture里面有个scope参数可以控制fixture的作用范围:session>module>class>function
-function:每一个函数或方法都会调用(默认就是function)
-class:每一个类调用一次,一个类中可以有多个方法
-module:每一个.py文件调用一次,该文件内又有多个function和class
-session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module

conftest.py配置
应用场景:上面一个案例是在同一个.py文件中,多个用例调用一个登陆功能,如果有多个.py的文件都需要调用这个登陆功能(fixtrue函数)的话,那就不能把登陆(fixtrue)写到用例里面去了。
此时应该要有一个配置文件,单独管理一些预置的操作场景,pytest里面默认读取conftest.py里面的配置

conftest.py配置需要注意以下点:
conftest.py配置脚本名称是固定的,不能改名称
conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
不需要import导入 conftest.py,pytest用例会自动查找

test_1.py
import pytest
class Test_A:
@pytest.fixture(scope=‘class‘)
def c(self):
print(‘ccc‘)
yield
print(‘ggg‘)

def test_b(self,c,a):
    print(‘bbb‘)

conftest.py
import pytest
@pytest.fixture()
def a():
print(‘aaa‘)
yield
print(‘hhh‘)

以上是关于pytest框架--@pytest.fixture(scpoe=‘xxx')装饰器的主要内容,如果未能解决你的问题,请参考以下文章

pytest接口自动化测试框架 | @pytest.fixture()装饰器

iOS自动化探索自动化测试框架pytest - fixtures

pytest测试框架(三)

pytest接口自动化测试框架 | conftest.py和@pytest.fixture()结合

pytest测试框架介绍

pytest框架的一些补充