前言

今天我们再说一下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详解相关推荐

  1. python fixture_python pytest进阶之fixture详解

    前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unit ...

  2. pytest进阶之xunit fixture

    前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...

  3. 第九:Pytest进阶之xunit fixture

    一.今天再说pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学知道在初始化环境和销毁工作时,unittest使用的是setUp,tearDown方法,那么在 ...

  4. 列表推导式 python原理_Python进阶-列表推导式详解总结

    列表推导式并不是什么特别的技术,它只是一种创建列表的简洁方法,目的是为了让大家写程序时更方便更快捷,写出更简洁的代码 初识列表 现在请创建一个list,元素为1到9的整数,先用普通方法做 lst = ...

  5. [进阶] --- Python3 异步编程详解(史上最全篇)

    [进阶] - Python3 异步编程详解:https://blog.csdn.net/lu8000/article/details/45025987 参考:http://aosabook.org/e ...

  6. python装饰器详解-Python装饰器基础概念与用法详解

    本文实例讲述了Python装饰器基础概念与用法.分享给大家供大家参考,具体如下: 装饰器基础 前面快速介绍了装饰器的语法,在这里,我们将深入装饰器内部工作机制,更详细更系统地介绍装饰器的内容,并学习自 ...

  7. 【python教程入门学习】Python函数定义及传参方式详解(4种)

    这篇文章主要介绍了Python函数定义及传参方式详解(4种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 一.函数初识 1.定 ...

  8. python argv 详解_对python中的argv和argc使用详解

    主要问题 为什么argv中第一个,即index=0的内容就是文件名? python中argc是用什么实现的? 概念解释 argc:argument counter,命令行参数个数 argv:argum ...

  9. Python中的__name__和__main__含义详解

    背景 在写Python代码和看Python代码时,我们常常可以看到这样的代码: ? 1 2 3 4 5 def main():     ...... if __name__ == "__ma ...

最新文章

  1. 四川托普计算机职业学校里能拿什么快递,四川托普计算机职业学校怎么样_招生问答...
  2. 发现错误(Core Data 应用程序实践指南)
  3. linux 为什么编译内核,Linux内核编译与安装
  4. java中bean的定义有哪些_详解Java的Spring框架中bean的定义以及生命周期
  5. sql having是什么意思_图解sql面试题:如何查找重复数据?
  6. SpringBoot启动时实现自动执行代码的几种方式讲解
  7. 合并压缩JavaScript,开发发布两不误
  8. C++序列容器存储智能指针
  9. kuangbin专题
  10. ubuntu20.4 微信,qq ,等安装安装教程
  11. sqlalchemy 8 会话 与 异常
  12. linux 怎么看出io是瓶颈,IO瓶颈探测方法
  13. 管理学(第二课)笔记
  14. linux scp 输入密码,scp 在脚本中使用输入密码的解决方法
  15. KKBOX音乐——数据分析,用户研究与填坑指南
  16. gif图片过大怎么压缩?gif图怎么压缩大小?
  17. 五方面详细解析《商业银行互联网贷款管理暂行办法》
  18. JAVA集合05_Collection.toMap()应用、三个重载方法、解决重复key问题
  19. Apache Drill Architecture Introduction
  20. 静态顺序表和动态顺序表区别的优缺点比较

热门文章

  1. JPA入门到精通 - JPA入门
  2. javascript中的正则匹配函数exec(),test(),match()
  3. [Javascipt] Immediately-Invoker 2
  4. JavaScript代码检验工具——JS Lint工具安装指南
  5. Windows中断编程
  6. velocity 基础指令
  7. MapReduce的并行执行效率
  8. php 读写文件 file_put_contents() 与 file_get_contents() 函数用法
  9. python3 语言翻译相关库
  10. Linux中设置服务自启动的三种方式