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是目前可用的前置 ...
随机推荐
- memcache和redis缓存对比及我为什么选择redis
对比结论 1. 性能上: 性能上都很出色,具体到细节,由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高.而在100k以 ...
- 【转载】【笔记】vue-router之路由传递参数
参考博客地址:https://blog.51cto.com/4547985/2390799 1.通过<router-link> 标签中的to传参 基本语法: <router-link ...
- 017.Kubernetes二进制部署检查集群
一 验证集群功能 1.1 检查节点状态 [root@k8smaster01 ~]# kubectl get nodes 1.2 创建测试文件 [root@k8smaster01 ~]# cd /opt ...
- 微信小程序之POST请求
最近写自己的小项目时,遇到一个问题很头疼,几天了一直解决不了 背景: 前端调用java接口,存中文乱码 但是该接口所要存数据的表在B服务器同样的数据库里面,调用B服务器的接口存中文就没问题 起初以为是 ...
- spring-db-事务
--都是之前各位大佬总结好的,我只是肤浅的汇总一下,结合我犯得错误,适合像我一样的萌新看 第一:@Transcation 引入的注解 package org.springframework.trans ...
- js闭包理解案例-解决for循环为元素注册事件的问题
转发自http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html 一.变量的作用域 要理解闭包,首 ...
- iOS-基于TCP连接<Scoket-客户端>
一:前言(本文为TCP客户端) TCP首先要服务器开放一个端口 然后客户端去连接服务端的IP地址和端口号 连接成功之后再进行数据传输 要经历三次握手 二:代码在GitHub 1.需要的工具类 自行下载 ...
- adb 控制手机动作
下载adb工具包,解压即可 https://download.csdn.net/download/kai402458953/10784310 各种事件说明:https://blog.csdn.n ...
- NTP and Chrony在RHEL
在RHEL7上,Chrony已经代替了NTP来做时间同步服务. 1 服务器上操作 yum -y install chrony vim /etc/chrony.conf # Allow NTP clie ...
- Ride to Office
[题目描述] 起点与终点相隔4500米.现Charley需要从起点骑车到终点.但是,他有个习惯,沿途需要有人陪伴,即以相同的速度,与另外一个人一起骑.而当他遇到以更快的速度骑车的人时,他会以相应的速度 ...