python fixture_python pytest进阶之xunit fixture详解
前言
今天我们再说一下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 fixture_python pytest进阶之xunit fixture详解相关推荐
- python fixture_python pytest进阶之fixture详解
前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unit ...
- pytest进阶之xunit fixture
前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...
- 第九:Pytest进阶之xunit fixture
一.今天再说pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学知道在初始化环境和销毁工作时,unittest使用的是setUp,tearDown方法,那么在 ...
- 列表推导式 python原理_Python进阶-列表推导式详解总结
列表推导式并不是什么特别的技术,它只是一种创建列表的简洁方法,目的是为了让大家写程序时更方便更快捷,写出更简洁的代码 初识列表 现在请创建一个list,元素为1到9的整数,先用普通方法做 lst = ...
- [进阶] --- Python3 异步编程详解(史上最全篇)
[进阶] - Python3 异步编程详解:https://blog.csdn.net/lu8000/article/details/45025987 参考:http://aosabook.org/e ...
- python装饰器详解-Python装饰器基础概念与用法详解
本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自 ...
- 【python教程入门学习】Python函数定义及传参方式详解(4种)
这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...
- python argv 详解_对python中的argv和argc使用详解
主要问题 为什么argv中第一个,即index=0的内容就是文件名? python中argc是用什么实现的? 概念解释 argc:argument counter,命令行参数个数 argv:argum ...
- Python中的__name__和__main__含义详解
背景 在写Python代码和看Python代码时,我们常常可以看到这样的代码: ? 1 2 3 4 5 def main(): ...... if __name__ == "__ma ...
最新文章
- 四川托普计算机职业学校里能拿什么快递,四川托普计算机职业学校怎么样_招生问答...
- 发现错误(Core Data 应用程序实践指南)
- linux 为什么编译内核,Linux内核编译与安装
- java中bean的定义有哪些_详解Java的Spring框架中bean的定义以及生命周期
- sql having是什么意思_图解sql面试题:如何查找重复数据?
- SpringBoot启动时实现自动执行代码的几种方式讲解
- 合并压缩JavaScript,开发发布两不误
- C++序列容器存储智能指针
- kuangbin专题
- ubuntu20.4 微信,qq ,等安装安装教程
- sqlalchemy 8 会话 与 异常
- linux 怎么看出io是瓶颈,IO瓶颈探测方法
- 管理学(第二课)笔记
- linux scp 输入密码,scp 在脚本中使用输入密码的解决方法
- KKBOX音乐——数据分析,用户研究与填坑指南
- gif图片过大怎么压缩?gif图怎么压缩大小?
- 五方面详细解析《商业银行互联网贷款管理暂行办法》
- JAVA集合05_Collection.toMap()应用、三个重载方法、解决重复key问题
- Apache Drill Architecture Introduction
- 静态顺序表和动态顺序表区别的优缺点比较
热门文章
- JPA入门到精通 - JPA入门
- javascript中的正则匹配函数exec(),test(),match()
- [Javascipt] Immediately-Invoker 2
- JavaScript代码检验工具——JS Lint工具安装指南
- Windows中断编程
- velocity 基础指令
- MapReduce的并行执行效率
- php 读写文件 file_put_contents() 与 file_get_contents() 函数用法
- python3 语言翻译相关库
- Linux中设置服务自启动的三种方式