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 生成不重复的随机数的代码
May 15 Python
python将图片文件转换成base64编码的方法
Mar 14 Python
简单介绍Python的Django框架加载模版的方式
Jul 20 Python
Python创建xml文件示例
Mar 22 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
使用Python读取安卓手机的屏幕分辨率方法
Mar 31 Python
使用python进行文本预处理和提取特征的实例
Jun 05 Python
详解用python生成随机数的几种方法
Aug 04 Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 Python
Django项目中实现使用qq第三方登录功能
Aug 13 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 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超大文件下载,断点续传下载的方法详解
2013/06/06 PHP
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
2016/05/12 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
js中let能否完全替代IIFE
2019/06/15 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
JS倒计时两种实现方式代码实例
2020/07/27 Javascript
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
使用python实现strcmp函数功能示例
2014/03/25 Python
Python中的jquery PyQuery库使用小结
2014/05/13 Python
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
Python将一个Excel拆分为多个Excel
2018/11/07 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
Python手动或自动协程操作方法解析
2020/06/22 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
CSS3实现线性渐变用法示例代码详解
2020/08/07 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
美国在线面料商店:Fashion Fabrics Club
2020/01/31 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
网络事业创业计划书范文
2014/01/09 职场文书
民族团结先进个人材料
2014/02/05 职场文书
中秋节主持词
2014/04/02 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
小学优秀教师材料
2014/12/15 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
中秋节随笔
2015/08/15 职场文书
《分数的意义》教学反思
2016/02/20 职场文书
python装饰器代码解析
2022/03/23 Python