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交换变量
Sep 06 Python
Python入门篇之对象类型
Oct 17 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
django之常用命令详解
Jun 30 Python
python实现获取Ip归属地等信息
Aug 27 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
Nov 02 Python
Python复数属性和方法运算操作示例
Jul 21 Python
500行Python代码打造刷脸考勤系统
Jun 03 Python
使用pyecharts生成Echarts网页的实例
Aug 12 Python
通过实例解析Python return运行原理
Mar 04 Python
Python列表切片常用操作实例解析
Mar 10 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 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
phpize的深入理解
2013/06/03 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
原型方法的不同写法居然会影响调试的解决方法
2007/03/08 Javascript
Jquery 扩展方法
2010/05/06 Javascript
js的一些常用方法小结
2011/06/29 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
完全深入学习Bootstrap表单
2016/11/28 Javascript
node操作mysql数据库实例详解
2017/03/17 Javascript
jQuery输入框密码的显示隐藏【代码分享】
2017/04/29 jQuery
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
JQuery事件委托原理与用法实例分析
2019/05/13 jQuery
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
python处理PHP数组文本文件实例
2014/09/18 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
Python使用win32 COM实现Excel的写入与保存功能示例
2018/05/03 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
浅谈Python中(&,|)和(and,or)之间的区别
2019/08/07 Python
centos7中安装python3.6.4的教程
2019/12/11 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
英国家居用品和家居装饰品购物网站:Cox & Cox
2019/08/25 全球购物
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
护理目标管理责任书
2014/07/25 职场文书
岗位职责说明书模板
2014/07/30 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
幼儿园保教工作总结2015
2015/10/15 职场文书