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 相关文章推荐
Windows系统下安装Python的SSH模块教程
Feb 05 Python
python获取指定网页上所有超链接的方法
Apr 04 Python
python关键字and和or用法实例
May 28 Python
Python中is与==判断的区别
Mar 28 Python
Python AES加密模块用法分析
May 22 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
详解python持久化文件读写
Apr 06 Python
python语言实现贪吃蛇游戏
Nov 13 Python
Selenium 配置启动项参数的方法
Dec 04 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 Memcached应用实现代码
2010/02/08 PHP
二招解决php乱码问题
2012/03/25 PHP
PHP修改session_id示例代码
2014/01/08 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
2014/06/12 PHP
详解thinkphp5+swoole实现异步邮件群发(SMTP方式)
2017/10/13 PHP
Javascript 圆角div的实现代码
2009/10/15 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
JavaScript自定义数组排序方法
2015/02/12 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
nodejs中实现sleep功能实例
2015/03/24 NodeJs
javascript实现连续赋值
2015/08/10 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
从Node.js事件触发器到Vue自定义事件的深入讲解
2020/06/26 Javascript
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
2017/01/18 Python
Python中str.format()详解
2017/03/12 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
基于python实现微信好友数据分析(简单)
2020/02/16 Python
Python Selenium 设置元素等待的三种方式
2020/03/18 Python
matlab、python中矩阵的互相导入导出方式
2020/06/01 Python
简单的Python人脸识别系统
2020/07/14 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
canvas实现图片镜像翻转的2种方式
2020/07/22 HTML / CSS
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
高中自我鉴定
2013/12/20 职场文书
优秀护士获奖感言
2014/02/20 职场文书
干部考核评语
2014/04/29 职场文书
nginx配置虚拟主机的详细步骤
2021/07/21 Servers