pytest-fixture

news2024/11/29 2:52:41

fixture是pytest特有的功能,它用@pytest.fixture标识,定义在函数前面。在编写测试函数的时候,可以将此函数的名称作为传入参数,pytest会以依赖注入方式将该函数的返回值作为测试函数的传入参数。

fixture主要的目的是为了提供一种可靠和可重复性的手段去运行那些最基本的测试内容。例如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只执行一次,否则每个测试用例都要执行这两步也是冗余。

应用:

  1. 登录登出功能

  1. 数据初始化

作用范围

fixture的scope有5个级别参数function(默认)、class、module、package和session。package被认为是实验性的。

·function:每个函数或方法都会调用;

·class:每个类调用一次,一个类可以有多种方法;

·module:每个.py文件调用一次,该文件内又有多个function和class;

·Session:多个文件调用一次,可以跨.py文件调用,每个.py文件就是module。

典型使用场景-登录登出

最典型的使用场景:登录功能,有些功能需要登录才能使用,例如支付功能和查看购物车,而浏览商品功能不需要登录。

fixture实现步骤如下:

(1)导入pytest。

(2)创建login()函数。

(3)在login()函数上加@pytest.fixture()。

(4)在要使用的测试方法中传入(登录函数名称),也就是先执行login()函数再执行本测试方法。

(5)不传入参数表明不需要登录,此时可以直接执行测试方法。

import pytest


@pytest.fixture()
def login():
    print("用户名登录")
def test_cart(login):
    print("登录后查看购物车")
def test_find_goods():
    print("不登录浏览商品")
def test_pay(login):
    print("登录后执行支付")


if __name__ == '__main__':
    pytest.main(['-s','test.py'])

如图,在test_cart里,调用了login,因为查看购物车需要先登录。当测试用例执行时,会先执行login,将输出结果传给test_cart,然后执行test_cart.

典型使用场景-模块级别数据清理

测试方法后需要销毁并清除的数据该如何处理呢?可以用tesrdownClass,这里介绍用fixture方法。

通过在同一模块中加入yield关键字,当执行fixture时,第一次执行至yield,当整个模型的用例都执行结束后,继续执行fixture内的yield之后的语句。

步骤如下:(1)添加@pytest.fixture(scope=module)语句。

(2)在登录的方法中添加yield,之后添加销毁清除的步骤。


import pytest


@pytest.fixture(scope="module")
def open():
    print("open broswer,open baidu")
    yield
    print("close broswer")#teardown

def test_cart():
    print("登录后查看购物车")
def test_find_goods(open):
    print("不登录浏览商品")
def test_pay():
    print("登录后执行支付")


if __name__ == '__main__':
    pytest.main(['-s','test.py'])

可以看到,第二个test里调用了fixture,在该test前执行了fixture,在最后执行fixture中yield之后的语句。

会话级别与conftest.py结合使用

fixture为session级别是可以跨.py模块调用的,也就是当有多个.py文件用例的时候,如果多个用例只需调用一次fixture,那就可以设置为scope="session"。既然已经是跨模块,需要在.py模块之上。因此采用一个单独的文件conftest.py,文件名称是固定的,pytest会自动识别该文件。放到工程的根目录下就可以全局调用了,如果放到某个package包下,那就只在该package内有效。

常用使用场景:当用户与其他测试工程师合作开发时,公共的模块要存放在不同文件中,要存放在大家都能访问的地方。通常是一些公用的配置。公共模块也可以,例如登录模块是大家公用的,因此应放在项目或包的路径下。

具体执行步骤如下:

(1)在本目录下创建conftest.py文件(文件名必须是这个)。

(2)将登录模块带@pytest.fixture写在conftest.py文件中。

import pytest


@pytest.fixture()
def login():
    print("login with password")

在test文件中写入

import pytest



def test_cart(login):
    print("登录后查看购物车")
def test_find_goods():
    print("不登录浏览商品")
def test_pay(login):
    print("登录后执行支付")


if __name__ == '__main__':
    pytest.main(['-s','test.py'])

自动调用fixture

如果每次使用fixture都要通过传参的方式,则应改变原来测试方法的结构。如何不通过注入的方式让测试方法执行呢?有2种方式可选,第一种在fixture的参数中将autouse参数设置为True,这样便会自动应用所作用的范围。第二种使用@pytest.mark.usefixtures,在需要的测试方法上添加

方法一

在方法上面加@pytest.fixture(autouse=True),因为scope参数未设置,所以使用默认,其作用范围是function,也就是说每个测试方法都默认应用了。

方法二

在需要用到的地方使用

在测试方法上添加@pytest.mark.usefixtures("start")实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/335490.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从C语言向C++过渡

文章目录前言1.命名空间1.域的概念2.命名空间的使用2.C输入&输出3.缺省参数1.概念2.分类3.注意事项4.函数重载5.引用1.概念2.使用注意事项3.引用使用场景4.指针和引用的区别6.内联函数7.auto关键字8.nullptr前言 C被成为带类的C,本文由C语言向C过度,将会初步介…

电子器件系列32:逻辑与门芯片74LS11

一、编码规则 先看看这个代码的意思:74LS11 74是一个系列(74 表示为工作温度范围,74: 0 ~ 70度。) ls的意思就是工艺类型(Bipolar(双极)工艺) 11是代码 什么是74系列逻辑芯片? - 知乎 什么是…

【MyBatis】第八篇:一级,二级缓存

其实缓存字面的意思就是将一些内容缓存下来,等下次使用的时候可以直接调用,通过数据库得到数据,有时候会使用相同的数据,所以mybatis自然也支持缓存。 而mybatis按照缓存的效果可以分两大类:一级缓存和二级缓存。 一…

node.js下载和vite项目创建以及可能遇到的错误

目录 一、node.js的下载 1、去官网下载 节点.js (nodejs.org) 2、下载过程 第一步: 第二步: 第三步: 第四步: 第五步: 二、vite项目的创建(使用的工具是Hbuilder x) 第一步: 出现报错…

基于matlab多功能相控阵雷达资源管理的服务质量优化

一、前言此示例说明如何为基于服务质量 (QoS) 优化的多功能相控阵雷达 (MPAR) 监控设置资源管理方案。它首先定义必须同时调查的多个搜索扇区的参数。然后,它介绍了累积检测范围作为搜索质量的度量,并展示了…

低代码开发平台|制造管理-工艺工序搭建指南

1、简介1.1、案例简介本文将介绍,如何搭建制造管理-工艺工序。1.2、应用场景先填充工序信息,再设置工艺路线对应的工序;工序信息及工艺路线列表报表展示的是所有工序、工艺路线信息,可进行新增对应数据的操作。2、设置方法2.1、表…

权限管理实现的两种方式(详解)

登录的接口请求的三个内容:1. token2. 用户信息、角色信息3. 菜单信息第一种:基于角色Role的动态路由管理 (不推荐,但市场用的比较多)首先列出枚举每个角色对应几个路由,然后根据用户登录的角色遍历枚举出来的角色动态注册对应的路…

4年功能测试经验,裸辞后找不到工作怎么办?

软件测试四年,主要是手动测试(部分自动化测试和性能测试,但是用的是公司内部自动化工具,而且我自动化方面是弱项。) 现在裸辞三个月了,面试机会少而且面试屡屡受挫。总结就是自动化,性能&#…

微服务保护:一、初识Sentinel

1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者I发生了故障,当前的应用的部分业务因为依赖于服务I,因此也会被阻塞。此时&…

链接脚本学习笔记

IAR 一般步骤 链接器用于链接过程。它通常执行以下过程(请注意,某些步骤可以通过命令行选项或链接器配置文件中的指令关闭): 1.确定应用程序中要包含哪些模块。始终包含对象文件中提供的模块。仅当库文件中的模块为从包含的模块…

智慧楼宇系统:商办楼宇运营方的不二之选

现在,许多商办楼宇运营方都倾向于选择专业的商办楼宇管理系统来完成日常运营管理,从而实现楼宇的高效运作。 那么问题来了,商办楼宇运营者该如何选购一个合适的楼宇管理系统?在选择系统之前,必须要清楚系统能解决哪些…

NODE => CORS跨域资源共享学习

1.CORS跨域资源共享 cors是Express的一个第三方中间件。通过安装和配置cors中间件,可以很方便地解决跨域问题 运行npm install cors 安装中间件使用const cors require(‘cors’) 导入中间件在路由之前调用 app.use(cors()&#…

Java · 常量介绍 · 变量类型转换 · 理解数值提升 · int 和 Stirng 之间的相互转换

书接上回 Java 变量介绍 我们继续学习以下内容. 四、常量字面值常量final 关键字修饰的常量五、理解类型转换int 和 long/double 相互赋值int 和 boolean 相互赋值int 字面值常量给 byte 赋值强制类型转换类型转换小结六、理解数值提升int 和 long 混合运算byte 和 byte 的运算…

大数据未来会如何发展

大数据应用的重要性,自全国提出“数据中国”的概念以来,我们周围默默地在发挥作用的大数据逐渐深入人们的心中,大数据的应用也越来越广泛,具体到金融、汽车、餐饮、电信、能源、体育和娱乐等领域 为什么大数据技术那么火&#xf…

机器学习之决策树原理详解、公式推导(手推)、面试问题、简单实例(python实现,sklearn调包)

目录1. 决策树原理1.1. 特性1.2. 思路1.3. 概念决策树概念信息论2. 公式推导2.1. 构造决策树2.1.1. ID3理论示例缺点2.1.2. C4.5理论示例缺点2.1.3. CART示例对比分析2.2. 剪枝3. 实例3.1. 数据集3.2. ID33.3. C4.53.4. CART3.5. sklearn实现4. 几个注意点(面试问题)5. 运行&am…

高性能MySQL -- 查询性能优化

一般来说一个好的程序:查询优化,索引优化,库表结构要同时进行优化。今天我们来讲一下查询优化。 我们需要对MySQL的架构有基本认知,所以这里贴一张图大家看看: 图片来自于《小林coding》 为什么从查询会慢&#xff1…

点云深度学习系列博客(四): 注意力机制原理概述

目录 1. 注意力机制由来 2. Nadaraya-Watson核回归 3. 多头注意力与自注意力 4. Transformer模型 Reference 随着Transformer模型在NLP,CV甚至CG领域的流行,注意力机制(Attention Mechanism)被越来越多的学者所注意,将…

九、Linux文件 - fopen函数和fclose函数讲解

目录 1.fopen函数 2.fclose函数 3.fopen函数和fclose实战 1.fopen函数 fopen fwrite fread fclose ...属于标准C库 include <stdio.h> standard io lib open close write read 属于Linux系统调用 可移植型&#xff1a;fopen > open&#xff08;open函数只在嵌入…

ES6的代理Proxy和反射Reflect的使用

一、Proxy使用 作用&#xff1a;Proxy是ES6为了操作对象而引入的API&#xff0c;不直接作用于对象&#xff0c;而是通过类似媒介的方式进行对象的操作使用 /*** target&#xff1a;需要proxy处理的对象* handler&#xff1a;对对象进行处理的方法 */ let proxy new Proxy(ta…

ARM uboot源码分析2-启动第一阶段

一、start.S 解析5 注释的中文含义&#xff1a; 当我们已经在 RAM 中运行时&#xff0c;我们不需要重新定位 U-Boot。实际上&#xff0c;在 U-Boot 在 RAM 中运行之前&#xff0c;必须配置内存控制器。 1、判断当前代码执行位置 (1) lowlevel_init.S 的 110-115 行。 (2) 这几…