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