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用fork来创建子进程注意事项
Jul 03 Python
使用Python读写及压缩和解压缩文件的示例
Jul 08 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
python 编写简单网页服务器的实例
Jun 01 Python
Sanic框架路由用法实例分析
Jul 16 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
如何在python中执行另一个py文件
Apr 30 Python
通过自学python能找到工作吗
Jun 21 Python
django下创建多个app并设置urls方法
Aug 02 Python
Python利用zhdate模块实现农历日期处理
Mar 31 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聊天室技术
2006/10/09 PHP
Symfony核心类概述
2016/03/17 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
PHP快速排序quicksort实例详解
2016/09/28 PHP
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
Python处理中文标点符号大集合
2018/05/14 Python
python 获取字符串MD5值方法
2018/05/29 Python
python爬虫数据保存到mongoDB的实例方法
2020/07/28 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
2020/09/16 Python
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
实习评语
2013/12/16 职场文书
数控专业个人求职信范文
2014/02/05 职场文书
美术学专业求职信
2014/07/23 职场文书
2014年连锁店圣诞节活动方案
2014/12/09 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
六一儿童节新闻稿
2015/07/17 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书