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之ReportLab绘制条形码和二维码的实例
Jan 15 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
Python3.5 创建文件的简单实例
Apr 26 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
Pandas过滤dataframe中包含特定字符串的数据方法
Nov 07 Python
Python批量生成幻影坦克图片实例代码
Jun 04 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
Nov 21 Python
在PyTorch中使用标签平滑正则化的问题
Apr 03 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
python正则表达式 匹配反斜杠的操作方法
Aug 07 Python
python多线程和多进程关系详解
Dec 14 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怎样调用MSSQL的存储过程
2006/10/09 PHP
PHP的开发框架的现状和展望
2007/03/16 PHP
php中实现记住密码自动登录的代码
2011/03/02 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
常用PHP封装分页工具类
2017/01/14 PHP
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
2013/01/24 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
基于jquery扩展漂亮的下拉框可以二次修改
2013/11/19 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
jQuery中val()方法用法实例
2014/12/25 Javascript
JavaScript 深层克隆对象详解及实例
2016/11/03 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
网页中的图片查看器viewjs使用方法
2017/07/11 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
vue单页缓存方案分析及实现
2018/09/25 Javascript
移动端手指操控左右滑动的菜单
2019/09/08 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
js删除对象中的某一个字段的方法实现
2021/01/11 Javascript
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
Python实现购物车功能的方法分析
2017/11/10 Python
python tkinter组件摆放方式详解
2019/09/16 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
如何解决python多种版本冲突问题
2020/10/13 Python
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
自立自强的名人事例
2014/02/10 职场文书
小学母亲节活动方案
2014/03/14 职场文书
师范生求职自荐信
2014/06/14 职场文书
临时租车协议范本
2014/09/23 职场文书
小学运动会报道稿
2014/10/04 职场文书
机关干部四风问题自我剖析及整改措施
2014/10/26 职场文书
2015年维修工作总结
2015/04/25 职场文书
大学生暑假实习总结
2015/07/13 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang