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发送email的3种方法
Apr 28 Python
Python 处理数据的实例详解
Aug 10 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
Python实现抢购IPhone手机
Feb 07 Python
对python模块中多个类的用法详解
Jan 10 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
Aug 28 Python
pytorch 求网络模型参数实例
Dec 30 Python
pytorch进行上采样的种类实例
Feb 18 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 Python
python实现商品进销存管理系统
May 30 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设计模式 Factory(工厂模式)
2011/06/26 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
javascript按位非运算符的使用方法
2013/11/14 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
Layui 数据表格批量删除和多条件搜索的实例
2019/09/04 Javascript
微信小程序wx.getUserInfo授权获取用户信息(头像、昵称)的实现
2020/08/19 Javascript
常用python编程模板汇总
2016/02/12 Python
python脚本监控docker容器
2016/04/27 Python
python使用jieba实现中文分词去停用词方法示例
2018/03/11 Python
解决python删除文件的权限错误问题
2018/04/24 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
英国航空官网:British Airways
2016/09/11 全球购物
英国知名美妆护肤在线商城:Zest Beauty
2018/04/24 全球购物
Onzie官网:美国时尚瑜伽品牌
2019/08/21 全球购物
如何开发一个JQuery插件
2016/07/28 面试题
Lucene推荐的分页方式是什么?
2015/12/07 面试题
工商企业管理专业自荐信范文
2014/04/12 职场文书
社会实践活动总结范文
2014/07/03 职场文书
初婚初育证明范本
2014/11/24 职场文书
大班上学期个人总结
2015/02/13 职场文书
辞职信的写法
2015/02/27 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
工地材料员岗位职责
2015/04/11 职场文书
2016特色励志班级口号
2015/12/24 职场文书
MySQL 分页查询的优化技巧
2021/05/12 MySQL
pytorch--之halfTensor的使用详解
2021/05/24 Python