当前位置: 首页 > news >正文

Pytest钩子函数,测试框架动态切换测试环境

在软件测试中,测试环境的切换是个令人头疼的问题。不同环境的配置不同,如何高效切换测试环境成为许多测试开发人员关注的重点。你是否希望在运行测试用例时,能够动态选择测试环境,而不是繁琐地手动修改配置?

Pytest 测试框架的 hook 函数可以轻松实现这一需求! 本文将带你详细了解如何借助 pytest 的强大功能,实现测试环境的动态切换。

在自动化测试过程中,有时候我们需要切换不同的测试环境用于验证功能是否正常(比如在测试环境中功能是正常的,但是到了预发布环境中就出现了问题)。往往我们需要手动修改测试脚本中的配置适配在不同的环境执行,十分不优雅!

如果能在执行测试脚本之前指定对应环境进行自动化配置那就不需要手动一个个修改配置了,比如像pytest执行时可以通过传入丰富的内置命令行参数改变其测试行为。同样pytest也能支持自定义命令行参数,通过对应的参数选取对应的环境配置进行执行,实现这一需求可以通过pytest的hook函数。

Pytest 是 Python 社区最受欢迎的测试框架之一,其灵活的插件机制和丰富的 hook 函数,让开发者能够根据需求自定义测试行为。在动态切换测试环境的场景中,以下思路和方法非常实用:

1. 使用 pytest 的 pytest_addoption 添加命令行参数

通过为 pytest 添加命令行参数,我们可以实现环境配置的动态传递。

实现步骤:

  • conftest.py 文件中,定义一个选项用于传递环境信息。
def pytest_addoption(parser):parser.addoption("--env", action="store", default="dev", help="Specify test environment: dev/staging/prod")

关于pytest hook函数

Hook函数(钩子函数),它是pytest框架的开发者为了让用户更好的去扩展pytest的功能而预留的一些函数。而预留的这些函数在整个测试执行的生命周期中特定的阶段会被pytest自动调用执行。

关于pytest中的预留钩子,可以通过开发插件,和在conftest.py去实现这些钩子。pytest中的钩子函数按功能一共分为6类:引导钩子,初始化钩子、用例收集钩子、用例执行钩子、报告钩子、调试钩子,当然动态切换测试环境这个需求我们不需要熟悉所有的钩子函数,这里我们只需要知道pytest_addoption这个初始化钩子函数即可:

函数

pytest_addoption

参数
  • parser :参数解析器
  • pluginmanager :插件管理器
触发时机:
  • conftest文件加载完之后执行, 在测试运行开始时调用一次。
作用:
  • 添加运行命令的命令行参数,pytest.ini的配置参数

实现步骤

1:新增conftest.py文件,添加pytest_addoption钩子函数
def pytest_addoption(parser):"""注册自定义参数命令行参数"""parser.addoption("--env", default="test", choices=['dev', 'test', 'pre'],help="命令行参数 '--env' 设置环境切换")

参数说明:

  • --env 代表需要传入 --env 参数,后续通过pytest --env=test 或者 pytest --env test去运行
  • default 代表默认值,不传--env参数的情况下默认使用test环境
  • choices 设置参数范围,仅限于dev、test、pre这三个环境
  • help 代表命令行参数的帮助信息

需要注意:钩子函数名字是固定的,不能随意更改

2:定义fixture函数,用于获取命令行参数
@pytest.fixture(scope='session')
def get_env(request):option = request.config.getoption("--env")if option == 'test':print("当前环境为测试环境")elif option == "dev":print("当前环境为开发环境")elif option == "pre":print("当前环境为预发布环境")

 

3:在测试函数上使用fixture

image20230731151028054.png

我们可以看到通过--env参数可以切换不同的环境执行,不加参数的情况下使用的是test环境。

4:fixture函数解析不同的配置

上述的步骤能够完成基本的命令行参数解析,但是离动态切换环境还差一步:我们需要通过不同的参数读取对应的配置文件,将配置文件信息解析出来传递给测试用例使用。

在项目的config目录下保存项目的不同环境配置文件:dev-env.ini、test-env.ini、pre-env.ini。文件中存储不同的环境参数值(比如URL、账号信息、数据库配置信息等),如下所示:

[host]
baseurl = http://192.168.3.200:8080[account]
username = admin
password = 123456abc[dbinfo]
url = http://db.192.168.3.100:8081
port = 3306
username = root
password = 123456abc

[host] baseurl = http://test.lemonban.com [account] username = lemon_auto password = lemon123456 [dbinfo] url = http://db.lemonban.com port = 3306 username = student password = 123456a

image20230731153018604.png

通过在测试函数中引用fixture函数get_env,即可获取对应的配置参数值。

在敏捷开发和 DevOps 的背景下,动态切换测试环境已经成为软件测试流程中不可或缺的一部分。传统的手动切换环境方式效率低下,甚至可能导致配置错误,进而影响测试结果的准确性。 借助 Pytest 的灵活机制,动态切换测试环境不仅能提升测试效率,还能更好地适应多环境并行测试的需求。

Pytest 的 hook 函数为动态切换测试环境提供了强大的支持。通过简单的配置和代码调整,你可以轻松实现多环境测试的需求,让测试流程更加高效和规范化。

“测试环境切换不再是难题,Pytest 带你迈向自动化测试的新高度!”


相关文章:

Pytest钩子函数,测试框架动态切换测试环境

在软件测试中,测试环境的切换是个令人头疼的问题。不同环境的配置不同,如何高效切换测试环境成为许多测试开发人员关注的重点。你是否希望在运行测试用例时,能够动态选择测试环境,而不是繁琐地手动修改配置? Pytest 测…...

VUE3封装一个Hook

在 Vue 3 中,Composition API 让我们能够封装和复用代码逻辑,尤其是通过 setup 函数进行组件间的复用。为了提高代码的可复用性,我们可以把一些常见的 API 请求和状态管理逻辑封装到一个单独的 hook 中。 以下是一个简单的例子,我…...

【Spring Boot】Spring AOP 快速上手指南:开启面向切面编程新旅程

前言 🌟🌟本期讲解关于spring aop的入门介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废话不…...

HTML基础入门——简单网页页面

目录 一,网上转账电子账单 ​编辑 1,所利用到的标签 2,代码编写 3,运行结果 二,李白诗词 1,所用到的标签 2,照片的编辑 3,代码编写 4,运行结果 一,网…...

INT301 Bio Computation 题型整理

perceptron 设计和计算 1. XOR: 当两个输入值中只有一个为真时,输出为真 2. 3. 5. 6. 7. 2^3 2^n 9. a) 直接test b) 把v≥2 改成 v≥1 10. no, because it cant be separate through only one decision boundary,its not linearlly separable. Backpropagatio…...

机器学习免费使用的数据集及网站链接

机器学习领域存在许多可以免费使用的数据集,这些数据集来自于学习、研究、比赛等目的。 一、综合性数据集平台 1.Kaggle 网址:Kaggle 数据集https://www.kaggle.com/datasets Kaggle是一个数据科学竞赛和社区平台,提供了大量的数据集供用…...

低空经济——飞行汽车运营建模求解问题思路

1. 掌握问题背景和领域知识 目标: 理解飞行汽车及其运营问题的核心要素和应用背景。学习内容: 飞行汽车基础: 了解飞行汽车的技术特点(垂直起降、电动推进等)。阅读行业报告,如 Uber Elevate 白皮书。共享…...

英伟达Project Digits赋能医疗大模型:创新应用与未来展望

英伟达Project Digits赋能医疗大模型:创新应用与未来展望 一、引言 1.1 研究背景与意义 在当今数字化时代,医疗行业作为关乎国计民生的关键领域,正面临着前所未有的挑战与机遇。一方面,传统医疗模式在应对海量医疗数据的处理、复…...

【Python3】异步操作 redis

aioredis 在高版本已经不支持了, 不要用 代码示例 redis 连接池异步操作redis以及接口 import asyncio from sanic import Sanic from sanic.response import json import redis.asyncio as redis from redis.asyncio import ConnectionPool# 创建 Sanic 应用 app…...

【W800】UART 的使用与问题

1.开发环境 OS: Windows 11开发板:海凌科 HLK-W800-KIT-PROSDK: W80X_SDK_v1.00.10IDE: CSKY Development Kit 2.UART 使用 在 SDK 中创建文件 uart_test.h 和 uart_test.c,然后在 CDK 项目中添加这两个文件,CDK 会自动 include 头文件。 …...

UART串口数据分析

串口基础知识详细介绍: 该链接详细介绍了串并行、单双工、同异步、连接方式 https://blog.csdn.net/weixin_43386810/article/details/127156063 该文章将介绍串口数据的电平变化、波特率计算、脉宽计算以及数据传输量的计算。 捕获工具:逻辑分析仪&…...

NFS 组件容器化部署实战指南

文章目录 前言部署NFS服务器K8S部署NFS问题记录 前言 使用nfs-client-provisioner这个应用,利用nfs server给kubernets提供作为持久化后端,并且动态提供pv。所有节点需要安装nfs-utils组件,并且nfs服务器与kubernets worker节点都能网络连通…...

嵌入式软件C语言面试常见问题及答案解析(三)

嵌入式软件C语言面试常见问题及答案解析(三) 上一篇已经足够长了,再长也就有点不礼貌了,所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者代码均代表个人的理解,如有不合理或者错误的地方,欢迎大家批评指正。 本文中题目列表 1. 编码实现子串定…...

nvm安装教程

Node Version Manager (NVM) 是一个用来管理多个 Node.js 版本的命令行工具。使用 NVM,你可以在同一台机器上轻松安装和切换不同的 Node.js 版本。以下是针对 Unix 类系统(如 Linux 和 macOS)的 NVM 安装教程: 安装 NVM 更新系统…...

单片机-定时器中断

1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期(晶振周期或外加振荡周期)。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器…...

Hadoop 实战笔记(一) -- Windows 安装 Hadoop 3.x

环境准备 安装 JAVA 1.8 Java环境搭建之JDK下载及安装下载 Hadoop 3.3.5 安装包 Hadoop 下载:https://archive.apache.org/dist/hadoop/common/ 一、JAVA JDK 环境检查 二、Hadoop(HDFS)环境搭建 1. 解压安装文件 hadoop-3.3.5.tar 2. 配置环境变量 HADOOP_HO…...

AI中的神经元与权重矩阵之间的关系;神经元连接角度看行和列的意义

AI中的神经元与权重矩阵之间的关系 目录 AI中的神经元与权重矩阵之间的关系神经元连接角度看行和列的意义AI中的神经元概念 在人工智能领域,特别是神经网络中,神经元是基本的计算单元,它是对生物神经元的一种抽象模拟。就像生物神经元接收来自其他神经元的电信号,经过处理后…...

mysql、postgresql、druid链接池踩坑记录

The last packet successfully received from the server wIs 10,010 milliseconds ago. The last packet sent successfully to the server was 10,010 milliseconds ago.### The error may exist in URL mysql 链接字符串没有 &connectTimeout600000&socketTimeout6…...

NRF24L01模块STM32通信-通信初始化

目录 前言 一、IO口初始化 二、模拟SPI的基础代码 1.一些代码的宏定义 2.起始信号 3.CS,SCK,MOSI操作 4.MISO,IRQ操作 三.中间层代码 1.字节的输入和读取 2.写操作 3.读操作 四.应用层代码 1.24L01的检测 2.在main函数进行简单验证 3.24L01宏定义的代码 总结 前…...

高比例压缩:Linux 中的压缩命令与技巧

文章目录 高比例压缩:Linux 中的压缩命令与技巧1. 压缩格式的选择2. gzip 命令示例:压缩文件示例:解压文件 3. bzip2 命令示例:压缩文件示例:解压文件 4. xz 命令示例:压缩文件示例:解压文件 5.…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

JS红宝书笔记 - 3.3 变量

要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...

GAN模式奔溃的探讨论文综述(一)

简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器,一般作为Page页面的根容器使用,其内部默认包含了标题栏、内容区和工具栏,其中内容区默认首页显示导航内容(Navigation的子组件)或非首页显示(Nav…...