python pytest进阶之xunit fixture详解


Posted in Python onJune 27, 2019

前言

今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearDown方法,那么在pytest框架中同样存在类似的方法,今天我们就来具体说明。

先附上官方文档的一段说明

1.每个级别的setup/teardown都可以多次复用

2.如果相应的初始化函数执行失败或者被跳过则不会执行teardown方法

3.在pytest4.2之前,xunit fixture 不遵循fixture的作用规则的,因此可以在一个session级别且参数auto=True的fixture前执行setup_method方法

但是到目前为止,所有的xunit fixture已经遵循了fixture执行的规则

function级别

实例

def setup_function(function):
 print('\n--------------------')
 print('函数执行前所做的操作')
print('\n--------------------')
 def teardown_function(function):
print('\n--------------------')
 print('函数执行后所做的操作')
print('\n--------------------')
def test_function_1():
print('\n测试函数1')
def test_function_2():
 print('\n测试函数2')
if __name__ == '__main__':
import pytest
pytest.main(['-sq', 'functionLevel.py'])

输出结果

functionLevel.py 
--------------------
函数执行前所做的操作
--------------------
测试函数1
--------------------
函数执行后所做的操作
--------------------
--------------------
函数执行前所做的操作
--------------------
测试函数2
--------------------
函数执行后所做的操作
--------------------
[100%]
========================== 2 passed in 0.03 seconds ===========================

说明

通过输出结果我们可以总结:setup_function会在每一个测试函数前执行初始化操作;teardown_function会在每一个测试函数执行后执行销毁工作

method级别

实例

class TestMethod(object):
 def setup_method(self, method):
 print('\n--------------------')
 print('方法执行前所做的操作')
 print('\n--------------------')
 def teardown_method(self, method):
 print('\n--------------------')
print('方法执行后所做的操作')
print('\n--------------------')
def test_method_1(self):
print('\n测试方法1')
def test_method_2(self):
print('\n测试方法2')
if __name__ == '__main__':
import pytest
pytest.main(['-sq', 'methodLevel.py'])

输出结果

methodLevel.py 
--------------------
方法执行前所做的操作
--------------------
测试方法1
--------------------
方法执行后所做的操作
--------------------
--------------------
方法执行前所做的操作
--------------------
测试方法2
--------------------
方法执行后所做的操作
--------------------
[100%]
========================== 2 passed in 0.03 seconds ===========================

说明

通过输出结果我们可以总结:setup_method会在每一个测试方法前执行初始化操作;teardown_method会在每一个测试方法执行后执行销毁工作,且方法级别的fixture是作用在测试类中的方法上的

class级别

实例

class TestClass(object): 
 @classmethod
 def setup_class(cls):
 print('\nsetup_class() for {}'.format(cls.__name__)) 
 @classmethod
def teardown_class(cls):
 print('\nteardown_class() for {}'.format(cls.__name__))
def test_1(self):
 print('self.test_1()')
def test_2(self):
print('self.test_2()')
if __name__ == '__main__':
import pytest
 pytest.main(['-sq', 'classLevel.py'])

输出结果

classLevel.py 
setup_class() for TestClass
.self.test_1()
.self.test_2()
teardown_class() for TestClass
[100%]
========================== 2 passed in 0.06 seconds ===========================

说明

通过输出结果我们可以总结:setup_class会在测试类执行前执行一次初始化操作;teardown_class会在测试类执行后执行一次销毁工作,且class级别的fixture需要使用@classmethod装饰

module级别

实例

def setup_module(module):
 print('\nsetup_module() for {}'.format(module.__name__))
def teardown_module(module):
 print('\nteardown_module() for {}'.format(module.__name__))
def test_1():
 print('test_1()') 
def test_2():
print('test_2()')
class TestClass(object):
def test_3(self):
print('self.test_3()')
def test_4(self):
print('self.test_4()')
if __name__ == '__main__':
 import pytest
pytest.main(['-sq', 'moduleLevel.py'])

输出结果

moduleLevel.py 
setup_module() for moduleLevel
.test_1()
.test_2()
.self.test_3()
.self.test_4()
teardown_module() for moduleLevel
[100%]
========================== 4 passed in 0.04 seconds ===========================

说明

通过输出结果我们可以总结:setup_module会在整个测试文件也就是模块中的测试类或者测试函数,测试方法执行前执行一次初始化操作;teardown_module会在整个测试文件也就是模块中的测试类或者测试函数,方法执行后执行一次销毁工作

以上就是xunit fixture的4个级别,实际工作中该如何使用还需多练习,深入理解才能得心应手!

附上官方文档做参考虽是英文但是很详细

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍Python中的struct模块
Apr 28 Python
Python中selenium实现文件上传所有方法整理总结
Apr 01 Python
Python实现Smtplib发送带有各种附件的邮件实例
Jun 05 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
python自动截取需要区域,进行图像识别的方法
May 17 Python
Python之数据序列化(json、pickle、shelve)详解
Aug 30 Python
Python内置类型性能分析过程实例
Jan 29 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
python pymysql库的常用操作
Oct 16 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 Python
python 如何将两个实数矩阵合并为一个复数矩阵
May 19 Python
Python批量查询关键词微信指数实例方法
Jun 27 #Python
Django框架orM与自定义SQL语句混合事务控制操作
Jun 27 #Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 #Python
Python自定义一个异常类的方法
Jun 27 #Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 #Python
python pytest进阶之conftest.py详解
Jun 27 #Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
Jun 27 #Python
You might like
PHP+MYSQL的文章管理系统(二)
2006/10/09 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
php object转数组示例
2014/01/15 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
js 调整select 位置的函数
2008/02/21 Javascript
潜说js对象和数组
2011/05/25 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
HTML长文本截取含有HTML代码同样适用的两种方法
2013/07/31 Javascript
JavaScript设计模式之工厂方法模式介绍
2014/12/28 Javascript
JQuery选中checkbox方法代码实例(全选、反选、全不选)
2015/04/27 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
vue项目关闭eslint校验
2018/03/21 Javascript
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
python生成不重复随机数和对list乱序的解决方法
2018/04/09 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
python 遍历列表提取下标和值的实例
2018/12/25 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
Javascript如何发送一个Ajax请求
2015/01/26 面试题
自动化专业个人求职信范文
2013/12/30 职场文书
秋季运动会广播稿大全
2014/02/17 职场文书
学校领导班子四风对照检查材料
2014/09/27 职场文书
学生党员批评与自我批评
2014/10/15 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android