Pytest框架之fixture详解(二)

本文关于 fixture 的内容如下:

  • fixture 的 autouse 参数
  • session 和 module 级别的 fixture

1、fixture 的 autouse 参数

pytest 当中的 fixture, 默认情况下在定义好之后,需要测试用例/测试类主动请求使用,才会执行。

但是它有一个参数叫做 autouse,默认是 False。

关闭 fixture 的自动调用/自动执行功能。

如果设置 autouse=True,则表示这个 fixture 在它的作用域范围内都会自动化执行。

分为 2 种情况,接下来举例说明。

第 1 种情况:当定义的 fixture 在测试类内部时

如果 fixture 设置了 autouse=True,只会在测试类类内部生效。测试类以外的用例不受影响。

定义一个 test_pytest-autouse.py,定义一个 TestDemo 类。

在其中定义 2 个 fixture,一个设置了 autouse=True,另外一个使用默认值 False

执行结果:

第 2 种情况,在 conftest.py 当中的 fixture 设置 autouse=True

conftest.py 能影响到所有测试类/测试用例都会执行(依据 fixture 的作用域决定在哪个范围内执行)。

有如下的目录结构:

测试用例文件(test_autouse1.py,test_autouse2.py)当中,并没有使用@pytest.mark.usefixture("func_fix")来主动请求 fixture.

conftest.py 文件中的内容如下:

名为 func_fix 的 fixture 设置了 autouse=True,它的作用域为 function, 那么

在 pytest20210301 包下的每一个测试用例,在执行用例之前都会执行它的前置准备动作,在执行用例之后都会执行它的后置清理动作。

执行 main.py(收集用例并执行)文件的结果如下:

基于以上情况,一般 function、class、module 级别的 fixture,都不会去开启 autouse=True

不同的测试用例/测试类,对于前置准备工作和后置清理工作的需求并不完全一样。

如果开启了 autouse=True, 那么不管测试用例/测试类是否需要,都会去执行。

让测试用例/测试类根据实际需求主动来请求使用 fixture 才是正确之道。

2、session 和 module 级别的 fixture

pytest 的 fixture 除了 function 和 class 以外,还有 session 和 module 级别。

session 级别的 fixture

这里的 session 是指测试会话。

它指的是:从 pytest 开始收集用例,到执行用例完成的整个过程,为一次会话。

比如收集到了 100 个测试用例要执行,那么 session 夹具夹的就是这 100 个用例。

比如收集到了 30 个测试用例要执行,那么 session 夹具夹的就是这 30 个用例。

由于它在所有用例执行的过程中,只执行一次。

如果定义了 session 级别的 fixture,那说明你就是需要执行它的。

所以它是可以设置 autouse=True 的。

我们在做自动化测试的时候,如果有些前置准备工作是为整个测试会话做的,那么可以定义 session 级别的,比如清理/创建一些文件等。

还是以上面的用例结构为例,在 conftest.py 当中添加 session 级别的 fixture,并设置为 autouse=True:

执行结果如下:

module 级别的 fixture

module 是指测试 py 文件,夹具夹的是整个 test_*.py 文件里的测试用例。

在 test_*.py 里,哪一行代码调用了 module 级别的 fixture,那么夹的就是那行代码之后的所有测试用例。

举例来说明。还是以上面的用例结构为例,在 conftest.py 当中添加 module 级别的 fixture:

在 test_autouse2.py 当中,调用 module 级别的 fixture,但并未在第一个用例前调用。

执行结果如下:

到此这篇关于Pytest框架之fixture的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Pytest框架之fixture的详细使用教程

    前言 前面一篇讲了setup.teardown可以实现在执行用例前或结束后加入一些操作,但这种都是针对整个脚本全局生效的 如果有以下场景:用例 1 需要先登录,用例 2 不需要登录,用例 3 需要先登录.很显然无法用 setup 和 teardown 来实现了fixture可以让我们自定义测试用例的前置条件 fixture优势 命名方式灵活,不局限于 setup 和teardown 这几个命名 conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture sc

  • pytest框架之fixture详细使用详解

    本人之前写了一套基于unnitest框架的UI自动化框架,但是发现了pytest框架之后觉得unnitest太low,现在重头开始学pytest框架,一边学习一边记录,和大家分享,话不多说,那就先从pytest框架的精髓fixture说起吧! 简介: fixture区别于unnitest的传统单元测试(setup/teardown)有显著改进: 1.有独立的命名,并通过声明它们从测试函数.模块.类或整个项目中的使用来激活. 2.按模块化的方式实现,每个fixture都可以互相调用. 3.fixt

  • Pytest框架之fixture详解(一)

    我们在编写测试用例,都会涉及到用例执行之前的环境准备工作,和用例执行之后的环境清理工作. 代码版的测试用例也不例外.在自动化测试框架当中,我们也需要编写: 用例执行之前的环境准备工作代码(前置工作代码) 用例执行之后的环境清理工作(后置工作代码) 通常,在自动化测试框架当中,都叫做fixture. pytest作为python语言的测试框架,它的fixture有2种实现方式. 一种是xunit-style,跟unittest框架的机制非常相似,即setup/teardown系列 一种是它自己的f

  • Pytest框架之fixture详解(二)

    本文关于 fixture 的内容如下: fixture 的 autouse 参数 session 和 module 级别的 fixture 1.fixture 的 autouse 参数 pytest 当中的 fixture, 默认情况下在定义好之后,需要测试用例/测试类主动请求使用,才会执行. 但是它有一个参数叫做 autouse,默认是 False. 关闭 fixture 的自动调用/自动执行功能. 如果设置 autouse=True,则表示这个 fixture 在它的作用域范围内都会自动化执

  • Pytest框架之fixture详解(三)

    本文关于fixture的内容如下: 1.参数化fixture 2.fixture工厂 3.request这个fixture 1.参数化fixture fixture有个params参数,允许我们传递数据. 语法格式: # conftest.py文件 ​ # fixture的params参数 # 取value1时,会把依赖此fixture的用例执行一遍. # 取value2时,会把依赖此fixture的用例执行一遍. # 取value3时,会把依赖此fixture的用例执行一遍. # params

  • python pytest进阶之fixture详解

    前言 学pytest就不得不说fixture,fixture是pytest的精髓所在,就像unittest中的setup和teardown一样,如果不学fixture那么使用pytest和使用unittest是没什么区别的(个人理解). fixture用途 1.做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现 2.测试用例的前置条件可以使用fixture实现 3.支持经典的xunit fixture ,像unittest使用的setup和te

  • Bootstrap框架的学习教程详解(二)

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. 一.下载Bootstrap Bootstrap (当前版本 v3.3.0)提供以下几种方式帮你快速上手,每一种方式针对具有不同技能等级的开发者和不同的使用场景. 下载地址:http://v3.bootcss.com/getting-started/#download PS:其实我们不用下载bootstrap也可以使用

  • Python测试框架pytest核心库pluggy详解

    目录 代码案例 实例化: 添加到钩子定义中 (add_hookspecs) 注册插件 register 运行插件 pm.hook.myhook 代码案例 import pluggy # HookspecMarker 和 HookimplMarker 实质上是一个装饰器带参数的装饰器类,作用是给函数增加额外的属性设置 hookspec = pluggy.HookspecMarker("myproject") hookimpl = pluggy.HookimplMarker("m

  • BootStrop前端框架入门教程详解

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. bootstrap 的学习非常简单,并且它所提供的样式又非常精美.只要稍微简单的学习就可以制作出漂亮的页面. bootstrap中文网:http://v3.bootcss.com/ bootstrap提供了三种类型的下载: -----------------------------------------------

  • 基于Java中最常用的集合类框架之HashMap(详解)

    一.HashMap的概述 HashMap可以说是Java中最常用的集合类框架之一,是Java语言中非常典型的数据结构. HashMap是基于哈希表的Map接口实现的,此实现提供所有可选的映射操作.存储的是对的映射,允许多个null值和一个null键.但此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 除了HashMap是非同步以及允许使用null外,HashMap 类与 Hashtable大致相同. 此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性

  • 集合框架(Collections Framework)详解及代码示例

    简介 集合和数组的区别: 数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变. 集合存储对象,一个集合中可以存储多种类型的对象.空间可变. 严格地说,集合是存储对象的引用,每个对象都称为集合的元素.根据存储时数据结构的不同,分为几类集合.但对象不管存储到什么类型的集合中,既然集合能存储任何类型的对象,这些对象在存储时都必须向上转型为Object类型,也就是说,集合中的元素都是Object类型的对象. 既然是集合,无论分为几类,它都有集合的共性,也就是说虽然存储时数据结构不

随机推荐