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去除字符串中的换行符
Oct 11 Python
python里使用正则表达式的组嵌套实例详解
Oct 24 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
May 24 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
python用插值法绘制平滑曲线
Feb 19 Python
详解Python 切片语法
Jun 10 Python
python操作kafka实践的示例代码
Jun 19 Python
Django实现文件上传下载
Oct 06 Python
python中的函数递归和迭代原理解析
Nov 14 Python
Python性能分析工具Profile使用实例
Nov 19 Python
python实现图像拼接功能
Mar 23 Python
Pycharm plot独立窗口显示的操作
Dec 11 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版(4)
2006/10/09 PHP
解析php中反射的应用
2013/06/18 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
用JS操作FRAME中的IFRAME及其内容的实现代码
2008/07/26 Javascript
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
禁止iframe脚本弹出的窗口覆盖了父窗口的方法
2014/09/06 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
Bootstrap表单布局样式代码
2016/05/31 Javascript
关于List.ToArray()方法的效率测试
2016/09/30 Javascript
纯JS焦点图特效实例(可一个页面多用)
2016/12/07 Javascript
微信JSAPI支付操作需要注意的细节
2017/01/10 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
vue中各种通信传值方式总结
2019/02/14 Javascript
利用Promise自定义一个GET请求的函数示例代码
2019/03/20 Javascript
vue使用高德地图点击下钻上浮效果的实现思路
2019/10/12 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
wxPython之解决闪烁的问题
2018/01/15 Python
简单谈谈python基本数据类型
2018/09/26 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
解决django框架model中外键不落实到数据库问题
2020/05/20 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
自我鉴定书范文
2013/10/02 职场文书
丧事主持词大全
2014/04/02 职场文书
Android在Sqlite3中的应用及多线程使用数据库的建议
2022/04/24 Java/Android