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

news2025/1/9 16:45:17

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

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 带你迈向自动化测试的新高度!”


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

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

相关文章

【RK3568笔记】Android修改开机动画

概述 Android 的开机动画是由一系列连续的 PNG 图片作为帧组成的动画形式,不是一张 GIF 图片。将各帧 PNG 图片以压缩方式进行保存(压缩方式要求是存储压缩),并将保存的文件名命名为 bootanimation.zip,这个 bootanim…

华为路由器、交换机、AC、新版本开局远程登录那些坑(Telnet、SSH/HTTP避坑指南)

关于华为设备远程登录配置开启的通用习惯1、HTTP/HTTPS相关服务 http secure-server enablehttp server enable 2、Telnet服务telnet server enable3、SSH服务stelnet server enablessh user admin authentication-type password 「模拟器、工具合集」复制整段内容 链接&…

spring boot学习第二十三篇:Spring Boot集成RocketMQ

前置条件先安装好RocketMQ 希望在Window10安装rocketMQ并简单使用&#xff0c;可以参考如下文章&#xff1a; Window10安装rocketMQ并简单使用-CSDN博客 1、pom.xml文件里面加上依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId&…

花生好坏缺陷识别数据集,7262张图片,支持yolo,coco json,pasical voc xml格式的标注,识别准确率在95.7%

花生好坏缺陷识别数据集,7262张图片&#xff0c;支持yolo&#xff0c;coco json&#xff0c;pasical voc xml格式的标注&#xff0c;识别准确率在95.7% 数据集分割 训练组87&#xff05; 6353图片 有效集8% 606图片 测试集4% 303图片 预处理 自动定…

在JavaScript开发中,如何判断对象自身为空?

前言 如何判断一个对象为空是我们在开发中经常会遇到的问题&#xff0c;今天我们来聊聊几种经常使用的方法&#xff0c;以及在不同的场景下我们如何去使用。 1. JSON.stringify JSON.stringify 方法可以使对象序列化&#xff0c;转为相应的 JSON 格式。 const obj {};cons…

现场展示deepseek VS openAI o1模型大对比

DeepSeek-V3 模型的发布在 AI 领域引起了广泛关注。作为一款拥有 6850 亿参数的混合专家&#xff08;MoE&#xff09;语言模型&#xff0c;DeepSeek-V3 在多个基准测试中表现出色&#xff0c;甚至超越了一些闭源模型。其在 Aider 代码能力排行榜上的正确率达到 48.4%&#xff0…

2010年IMO几何预选题第1题

在 △ A B C \triangle ABC △ABC 中, A D AD AD, B E BE BE, C F CF CF 为三条高线, 延长 E F EF EF 交 ( A B C ) (ABC) (ABC) 于 P P P, 延长 D F DF DF, B P BP BP 交于 Q Q Q. 求证: A P A Q APAQ APAQ. 证明: 设 D F DF DF 交 ( A P F ) (APF) (APF) 于点 …

SOLID原则学习,单一职责原则(Single Responsibility Principle)

文章目录 1. 定义2. 核心思想3. 优点4. 总结 1. 定义 单一职责原则是面向对象设计中的五大原则&#xff08;SOLID&#xff09;之一&#xff0c;由Robert C. Martin提出。它指出一个类应该只有一个引起它变化的原因&#xff0c;即一个类应该只负责一项职责。 2. 核心思想 职责…

对快速由表及里说拜拜/如何正确运用由表及里

你是不是还&#xff1a;看到一男子拖走一女子就以为小情侣吵架而已&#xff08;可能人贩子&#xff09;&#xff1b;看到男友对你好个几次就从此死心塌地&#xff08;可能有手就行&#xff0c;细节装装而已&#xff09;结果耽误终身&#xff1b;看到女同事对你微笑不排斥就以为…

【算法】八大排序算法

这篇文章是对数据结构中 八大经典排序算法 的详解&#xff0c;包括其原理、实现过程、时间复杂度、空间复杂度及其适用场景。最后两种排序不常见&#xff0c;但仍收录了进来保持文章结构的完整性。 排序(Sort)是将无序的记录序列&#xff08;或称文件&#xff09;调整成有序的…

【学习笔记】数据结构(十一)

外部排序 文章目录 外部排序11.1 外存信息的存取11.2 外部排序的方法11.3 多路平衡归并的实现 - 增加k11.4 置换-选择排序 - 减少m11.5 最佳归并树 外部排序 指的是大文件的排序&#xff0c;即待排序的记录存储在外存储器 上&#xff0c;在排序过程中需进行多次的内、外存之间的…

基于 Python 自动化接口测试(踩坑与实践)

文档&#xff1a;基于 Python 的自动化接口测试 目录 背景问题描述与解决思路核心代码修改点及其详细解释最终测试结果后续优化建议 1. 问题背景 本项目旨在使用 Python 模拟浏览器的请求行为&#xff0c;测试文章分页接口的可用性。测试目标接口如下&#xff1a; bashcoder…

单片机-外部中断

中断是指 CPU 在处理某一事件 A 时&#xff0c;发生了另一事件 B&#xff0c;请求 CPU 迅速去处理(中断发生)&#xff1b;CPU 暂时停止当前的工作(中断响应)&#xff0c; 转去处理事件 B(中断服务)&#xff1b;待 CPU 将事件 B 处理完毕后&#xff0c;再回到原来事件 A 被中断的…

vite5.x配置https

旧版的vite直接在config里面配置https&#xff1a;true即可&#xff0c;新版的麻烦一些。 1.准备工作 需要安装openssl 下载地址&#xff1a;Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 找到合适的版本安装&#xff0c;配置好环境变量&#x…

Clip Studio Paint 报错:Running on unsupported Os. Clip Studio Paint will close.

问题描述 启动 Clip Studio Paint 报错&#xff1a;Running on unsupported Os. Clip Studio Paint will close. 原因 Clip Studio Paint 锁区&#xff0c;系统是中国大陆的无法使用。 解决方式 打开系统设置 时间和语言- 区域- 区域格式- 简体中文&#xff08;新加坡&am…

vue2/vue3中使用的富文本编辑器vue-quill

前言&#xff1a; 整理下常用的富文本编辑器工具。 vue3: 实现效果&#xff1a; 实现步骤&#xff1a; 1、安装插件&#xff0c; 编辑器核心插件 vueup/vue-quill yarn add pnpm i npm i cnpm i vueup/vue-quill vueup/vue-quill 2、安装选择性插件 &am…

Vscode 如何使用GitHub Copilot

一、“GitHub Copilot”进行登录 前提必须有github账号&#xff0c;如果没有就注册一个&#xff1b; 系统会提示您输入 GitHub 凭据。单击“登录 GitHub”&#xff0c;然后单击“允许”并输入您的 GitHub 凭据。 登录成功后&#xff1a; 二、 GitHub Copilot功能 1、预测代码 …

docker搭建atlassian-confluence:7.2.0

文章目录 引言I 部署前准备数据库镜像准备自己构建镜像dockerhub第三方镜像II 安装启动容器基础配置(获取服务器ID)授权码获取集群选择设置数据库配置管理员账号引言 准备数据库、镜像启动容器获取服务器ID根据服务器ID等信息,基于atlassian-agent.jar 授权I 部署前准备 数…

通过可穿戴外骨骼,以更灵活的方式操作你的机器人。

今天&#xff0c;我们将介绍一款专为控制 Mercury X1 和 Mercury B1 机械臂而设计的创新外骨骼。这种外骨骼以人类手臂的结构为蓝本&#xff0c;可实现直观和精确的控制。 开发这种外骨骼的动机源于人们对深度学习和机器学习等领域日益增长的兴趣。这些技术使机器人能够自主学习…

Ubuntu更改内核

需求背景&#xff1a; 由于软件需要在较低版本或者指定版本才可以运行 版本&#xff1a; 配置文件&#xff1a; vi /etc/default/grub 启动界面&#xff1a; 可运行版本&#xff1a; 解决方案&#xff1a; 方案1、更改启动顺序 sudo vi /etc/default/grub 方案2、调整启动顺…