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重新引入被覆盖的自带function
Jul 16 Python
Python中支持向量机SVM的使用方法详解
Dec 26 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
python 处理微信对账单数据的实例代码
Jul 19 Python
Django中自定义admin Xadmin的实现代码
Aug 09 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
使用 Python 在京东上抢口罩的思路详解
Feb 27 Python
python中sympy库求常微分方程的用法
Apr 28 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
解决python3安装pandas出错的问题
May 20 Python
Python 的演示平台支持 WSGI 接口的应用
Apr 20 Python
关于的python五子棋的算法
May 02 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后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
Yii2中datetime类的使用
2016/12/17 PHP
PHP设计模式之外观模式(Facade)入门与应用详解
2019/12/13 PHP
javascript深入理解js闭包
2010/07/03 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
基于jquery实现可定制的web在线富文本编辑器附源码下载
2015/11/17 Javascript
理解javascript中DOM事件
2015/12/25 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
JS实现页面载入时随机显示图片效果
2016/09/07 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
vux uploader 图片上传组件的安装使用方法
2018/05/15 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
node app 打包工具pkg的具体使用
2019/01/17 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
详解Vue中的自定义指令
2020/12/07 Vue.js
web.py在SAE中的Session问题解决方法(使用mysql存储)
2015/06/24 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
python set内置函数的具体使用
2019/07/02 Python
django settings.py 配置文件及介绍
2019/07/15 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
Django form表单与请求的生命周期步骤详解
2020/06/07 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
2020/10/15 Python
详解python中的异常捕获
2020/12/15 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
书法培训心得体会
2014/01/05 职场文书
会计专业毕业生求职信
2014/07/04 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
只用Python就可以制作的简单词云
2021/06/07 Python
聊一聊Redis与MySQL双写一致性如何保证
2021/06/26 Redis
浅谈Python魔法方法
2021/06/28 Java/Android