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获取本机mac地址和ip地址的方法
Apr 29 Python
在Python操作时间和日期之asctime()方法的使用
May 22 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
Python从零开始创建区块链
Mar 06 Python
python3实现磁盘空间监控
Jun 21 Python
Python单元测试简单示例
Jul 03 Python
网易有道2017内推编程题 洗牌(python)
Jun 19 Python
python文字转语音实现过程解析
Nov 12 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
Django基础CBV装饰器和中间件
Mar 22 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语法(5)
2006/10/09 PHP
php正则表达式(regar expression)
2011/09/10 PHP
smarty内置函数capture用法分析
2015/01/22 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
php中html_entity_decode实现HTML实体转义
2018/06/13 PHP
PHP+redis实现微博的推模型案例分析
2019/07/10 PHP
javascript中undefined与null的区别
2015/08/16 Javascript
Kotlin学习第一步 kotlin语法特性
2017/05/25 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
Vue传参一箩筐(页面、组件)
2019/04/04 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
Python计算字符宽度的方法
2016/06/14 Python
Python 提取dict转换为xml/json/table并输出的实现代码
2016/08/28 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
利用django+wechat-python-sdk 创建微信服务器接入的方法
2019/02/20 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
2019/08/15 Python
Python实现元素等待代码实例
2019/11/11 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
Python中Yield的基本用法
2020/10/18 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
CSS3教程(6):创建网站多列
2009/04/02 HTML / CSS
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
前台文员职责范本
2014/03/07 职场文书
公证委托书大全
2014/04/04 职场文书
法律专业自荐信
2014/06/03 职场文书
2015感人爱情寄语
2015/02/26 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书
经销商会议开幕词
2016/03/04 职场文书
爱国之歌(8首)
2019/09/29 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python