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中使用gzip模块压缩文件的简单教程
Apr 08 Python
Python内置模块ConfigParser实现配置读写功能的方法
Feb 12 Python
Python实现的knn算法示例
Jun 14 Python
Python类的继承、多态及获取对象信息操作详解
Feb 28 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
Jun 23 Python
详解anaconda离线安装pytorchGPU版
Sep 08 Python
运行python提示no module named sklearn的解决方法
Nov 29 Python
python实现图片转字符画的完整代码
Feb 21 Python
python实现求纯色彩图像的边框
Apr 08 Python
python实现简单聊天功能
Jul 07 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面向对象全攻略 (八)重载新的方法
2009/09/30 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
PHP 使用redis简单示例分享
2015/03/05 PHP
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
JS按位非(~)运算符与~~运算符的理解分析
2011/07/31 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
jQuery实现tag便签去重效果的方法
2015/01/20 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
详解Webpack+Babel+React开发环境的搭建的方法步骤
2018/01/09 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
vue组件之间通信实例总结(点赞功能)
2018/12/05 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
Python读写文件方法总结
2015/06/09 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
python 伯努利分布详解
2020/02/25 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
canvas实现烟花的示例代码
2020/01/16 HTML / CSS
Zatchels官网:英国剑桥包品牌
2021/01/12 全球购物
软件缺陷的分类都有哪些
2014/08/22 面试题
大学生蛋糕店创业计划书
2014/01/13 职场文书
负责人任命书范本
2014/06/04 职场文书
社区服务活动报告
2015/02/05 职场文书
防卫过当辩护词
2015/05/21 职场文书
2015年小学生国庆节演讲稿
2015/07/30 职场文书
vue3种table表格选项个数的控制方法
2022/04/14 Vue.js