pytest框架之fixture前置和后置
一、conftest.py
- 定义公共的fixture,多个测试类中都可以调用
- pytest提供了conftest.py文件,可以将fixture定义在此文件中
- 运行测试用例时,不需要去导入这个文件,会自动去查找conftest.py文件,然后去找到对用的fixture
二、前置和后置
fixture函数根据关键字yield作为前置和后置的分割线,并且yield也可以接收返回值,作用相当于return
import pytest @pytest.fixture()
def init_demo():
print("这是测试用例的前置")
a = 1
yield a # 分割线(yield + 返回值)
print("这是测试用例的后置")
三、调用fixture
1.在测试用例中直接调用
将fixtures的函数名称作为测试用例的入参
如果fixture有返回值,那么测试用例中的fixture函数名称就接收返回值,并且可以将fixture函数名称作为返回值使用
def test_add_01(init_demo):
b = init_demo + 2
assert 3 == b
运行结果:

2.用fixture装饰器调用fixture
在测试用例/测试类前面加上@pytest.mark.usefixtures('fixture函数名称')
ps:定义conftest.py文件,在此文件中可以定义多个fixture,pytest会自动搜索此文件
import pytest
@pytest.mark.usefixtures('init_demo')
def test_add_02():
b = 1 + 2
assert 3 == b
运行结果:

3.用autos调用fixture
- 在定义fixture时,有一个参数autouse,默认设置的为False
- 当默认为False,就可以选择用上面两种方式来使用fixture
- 当设置为Ture时,在一个session内的所有的test都会自动调用这个fixture,建议该开关谨慎使用
conftest代码如下:
import pytest @pytest.fixture(autouse=Ture)
def init_demo():
print("这是测试用例的前置")
yield
print("这是测试用例的后置")
测试代码如下:
import pytest def test_add_02():
b = 1 + 2
assert 3 == b
运行结果:

四、fixture的继承(前置的前置,后置的后置)
- 作用域(scope关键字):function/函数级(测试用例)、class/类级(测试类)、module/模块级(测试模块—py文件)、session/会话级(整个测试执行会话)
- 形象比喻:夹心饼干
- 继承条件:作用域由里向外继承作用域,也可以继承同级的作用域
- 执行顺序:前置由外层到内层执行,后置由内层到外层执行,先执行最里层的作用域,在执行它的上一层作用域,直到再向外找不到作用域为止
- 继承方法:直接将继承的fixture的函数名称作为入参传入即可
- 返回值:继承父类的同时,也继承了父类的返回值
conftest.py代码如下:
import pytest @pytest.fixture(scope='session')
def init_session():
print("这是测试会话的前置")
yield
print("这是测试会话的后置") @pytest.fixture(scope='module')
def init_module(init_session):
print("这是测试模块的前置")
yield
print("这是测试模块的后置") @pytest.fixture(scope='class')
def init_class(init_module):
print("这是测试类的前置")
yield
print("这是测试类的后置") @pytest.fixture # 相当于@pytest.fixture(scope='function')
def init_function(init_class):
print("这是测试用例的前置")
yield
print("这是测试用例的后置")
测试代码如下:
import pytest
@pytest.mark.usefixtures('init_function')
def test_demo():
print('测试用例')
assert 3 == 3
运行结果:

pytest框架之fixture前置和后置的更多相关文章
- 【Pytest02】全网最全最新的Pytest框架快速进阶篇(pytest前置和后置以及忽略测试用例)
一.Pytest的前置和后置方法 1.Pytest可以集成unittest实现前置和后置 import unittest import pytest class TestCase(unittest.T ...
- android Camera 如何判断当前使用的摄像头是前置还是后置
现在 android 平台的智能手机一般都标配有两颗摄像头.在 Camera 中都存在摄像头切换的功能. 并且有一些功能前后置摄像头上会有所不同.譬如人脸检测,人脸识别,自动对焦,闪光灯等功能, 如果 ...
- C++前置++与后置++的区别与重载
++属于单目运算符,前置与后置的实现代码不一样,下面以整数自增为例: // 前置++,返回自增后的值,且返回的是一个左值 int& operator++(){ *this += 1; retu ...
- ThinkPHP - 前置操作+后置操作
前置操作和后置操作 系统会检测当前操作(不仅仅是index操作,其他操作一样可以使用)是否具有前置和后置操作,如果存在就会按照顺序执行,前置和后置操作的方法名是在要执行的方法前面加 _before ...
- JavaScript运算符:递增递减运算符前置和后置的区别
从两段代码说起 var num1 = 2; var num2 = 20; var num3 = --num1 + num2; var num4 = num1 + num2; console.log(n ...
- c++ 前置++与后置++的区别
用C++编程的都知道,C++提供了一个非常强大的操作符重载机制,利用操作符重载,我们可以为我们自定义的类增加更多非常有用的功能.不过,C++也有限制,就是当我们为自定义的类重载操作符时,重载操作符的含 ...
- PHP通过__call实现简单的AOP(主事务后的其他操作)比如前置通知,后置通知
/** * person class */ class Person { /** * person class -> function say */ public static function ...
- C++的前置++、后置++和前置--、后置--
一.C++的前置++和后置++ 在C++中,运算符重载是你必须要掌握的重点,而前置++和后置++有什么区别呢?其实前置++和后置++是有关于 影响效率的问题,前置++比后置++的效率要高,原因是因为前 ...
- 20_AOP_Advice增强1(前置、后置、环绕)
[增强的类型] 1.前置增强:org.springframework.aop.BeforeAdvice. 由于Spring只支持方法级别的增强,所以MethodBeforeAdvice是目前可用的前置 ...
随机推荐
- 在windows上用apache+mod_wsgi服务部署django项目
之前一直在本地跑django项目,最近尝试在服务器上部署项目,目前已经成功部署,也花了好多时间,这里跟大家交流一下,希望对像我一样的新手有帮助. 一.配置环境: 1.Python版本3.7 2.服务器 ...
- 小程序--log居中 失焦获取表单中的值
value="{{username}}" 绑定值 值在js文件的data中 pa==>Vant-Weap中表单中的值,不是双向绑定的. 你获取值后, 值并没有在对用的data ...
- [Linux]centos下安装memcached
一.yum安装 1.Linux系统安装memcached,首先要先安装libevent库. yum install libevent libevent-devel 2.安装memcached yum ...
- 菜鸟刷面试题(三、Redis篇)
目录: redis是什么?都有哪些使用场景? redis有哪些功能? redis和memecache有什么区别? redis为什么是单线程的? 什么是缓存穿透?怎么解决? redis支持的数据类型有哪 ...
- PyCharm2019 激活
文章末尾补充几个激活码:网上收集 一.破解补丁激活优点:永久期限 缺点:需要修改配置文件和下载破解文件 1.下载破解文件点击链接 链接: https://pan.baidu.com/s/1T405JC ...
- css 揭秘-读书笔记
css 揭秘 [希]Lea verou 著 css 魔法 译 该书涵盖7大主题,47个css技巧,是css进阶必备书籍,开阔思路,探寻更优雅的解决方案.这本书完全用css渲染出的html写成的(布局. ...
- linux远程登入/远程上传文件
一.远程登入 1.安装 Xshell5 2.查看是否具备连接 在linux 主机上输入 chkconfig --list | grep sshd #sshd 0:关闭 1:关闭 2:启用 3:启用 4 ...
- 【koa2】用户注册、登录校验与加盐加密
加密与解密 先介绍一下关于服务端用户名跟密码的存储状态,我们知道当前端在注册一个新用户时,会在表单内填入用户名和密码,并通过post请求提交到服务器,服务器再把用户名和密码从ctx.request.b ...
- js-事件函数调用简化
// 一般写法 function fn(event) { console.log(event) } div.onclick = function (event) { fn(event) } ===== ...
- 通过C#代码调用Dynamics 365 Web API执行批量操作
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...