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获取系统默认字符编码的方法
Jun 04 Python
浅析python递归函数和河内塔问题
Apr 18 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
实例讲解Python爬取网页数据
Jul 08 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
Python3.6.x中内置函数总结及讲解
Feb 22 Python
使用Python进行体育竞技分析(预测球队成绩)
May 16 Python
python3 logging日志封装实例
Apr 08 Python
python定时截屏实现
Nov 02 Python
python xlsxwriter模块的使用
Dec 24 Python
python playwright之元素定位示例详解
Jul 23 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 array_keys 返回数组的键名
2016/10/25 PHP
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
js实现悬浮窗效果(支持拖动)
2017/03/09 Javascript
解决vue-cli中stylus无法使用的问题方法
2017/06/19 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
修改UA在PC中访问只能在微信中打开的链接方法
2017/11/27 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
Element-UI中关于table表格的那些骚操作(小结)
2019/08/15 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
学习python类方法与对象方法
2016/03/15 Python
Python随机生成数据后插入到PostgreSQL
2016/07/28 Python
Python简单实现网页内容抓取功能示例
2018/06/07 Python
详解python--模拟轮盘抽奖游戏
2019/04/12 Python
python如何导入依赖包
2020/07/13 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
学校门卫管理制度
2014/01/30 职场文书
教堂婚礼主持词
2014/03/14 职场文书
捐资助学倡议书
2014/04/15 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android
python数字图像处理数据类型及颜色空间转换
2022/06/28 Python