Pytest多环境切换实战:测试框架配置的最佳实践!

你是否也遇到过这种情况:本地测试通过,一到测试环境就翻车?环境变量错乱、接口地址混乱、数据源配置丢失……这些「环境切换」问题简直像定时炸弹,随时引爆你的测试流程!

测试人员每天都跟不同的环境打交道,比如线上环境,测试环境,预上线环境等等,那么作为自动化测试人员写的代码,我们也要具备能自由切换环境的能力,那么今天小编就给大家聊一下,如何能让我们python语言写的测试用例可以自由切换到不同的环境下面去运行呢

Pytest 作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换?有没有一种通用、实用、可复用的方案?

“Pytest如何实现环境切换,让测试适应不同场景?”这个问题曾让我挠头。配置文件怎么写?参数怎么传?能不能自动化切换而不用手动改代码?带着这些疑问,我开始摸索Pytest的环境管理功能。从简单的命令行参数到复杂的配置文件,我发现它不仅灵活,还能无缝对接团队协作。那么,具体该怎么操作呢?接下来,让我们一起进入实战,揭开Pytest环境切换的奥秘。

今天给他大家聊一下通过pytest框架实现自由环境切换的几种方法。

1 pytest-base-url

pytest有一个插件叫pytest-base-url ,是管理base_url非常好的一款插件,文档资料链接:https://pypi.org/project/pytest-base-url/

下载方式:

pip install pytest-base-url

图片

案例如下:

import requestsdef test_demo(base_url):resp = requests.get(base_url)status_code = resp.status_codeassert status_code == 200

 

第1种使用方式是终端添加--base-url这个命令,如下所示:

图片

第2种使用方式是在pytest.ini配置文件种去配置base_url,然后自动读取url的数据,这样就不用添加--base-url这个命令行参数了:

图片

命令行直接运行pytest 即可。

2 hooks函数

pytest有个hooks函数,可以自定义命令行参数,一般在conftest.py中去引用。

Conftest.py中写pytest_addoption这个hooks函数,可以自定义命令行参数,base_url只能对一个url地址进行传递,那么有的项目不仅需要多项目请求的url地址进行不同环境的切换,还需要对mysql的url地址进行不同的切换,这个时候就可以用自定义命令,定义不同的命令行参数,这样我们在执行pytest的时候就可以自由进行传递。

代码如下:

通过pytest_addoption这个hooks函数,设置了两个命令行参数,一个是--mysql-url,另一个是--project-url,help后面是对这两个命令行的解释,解释说明这两个命令行代表什么含义

import pytestdef pytest_addoption(parser):parser.addoption("--mysql-url", action="store", help="这里可以传递mysql的url地址")parser.addoption("--project-url", action="store", help="这里可以传递项目的url地址")

通过fixture函数中的request参数去读取命令行中传递的参数,赋值给一个变量,就可以在pytest中随便使用。

@pytest.fixture(scope='class')
def get_url(request):mysql_url = request.config.getoption('--mysql-url')project_url = request.config.getoption('--project-url')return mysql_url, project_url

项目代码如下:

fixture函数的调用,直接把fixture的名字当成参数传递到测试用例里面即可

import requestsdef test_demo(get_url):mysql_url = get_url[0]print('mysql_url的地址是{}'.format(mysql_url))project_url = get_url[1]resp = requests.get(project_url)status_code = resp.status_codeassert status_code == 200

运行测试的命令为:

pytest -s --mysql -url 192.168.1.11--project-url http://www.example.com

如下图所示:

图片

3 yml和fixture

通过 yml文件 和 fixture 进行配合使用,首先在项目目录下面创建一个conf.yml,然后里面去手动配置现在要运行的环境,截图如下:

图片

然后在创建一个conftest.py,里面定义两个fixture函数,一个用来读取conf.yml里面的内容,另一个用来配置具体的环境信息

比如qa环境,release环境,然后通过conf.yml里面配置的qa还是release,来读取project_url 和 mysql_url,截图如下:

import pytest
import yaml@pytest.fixture(scope="session")
def config():with open('./conf.yml', 'r', encoding='utf-8') as f:conf = yaml.load(f.read(), Loader=yaml.FullLoader)return conf@pytest.fixture(scope="session")
def env_vars(config):env = config["env"]mapping = {"qa": {"project_url": "http://121.42.15.146:9090","mysql_url": "192.168.1.1"},"release": {"project_url": "https://release.com","mysql_url": "127.0.0.1"}}project_url = mapping[env]["project_url"]mysql_url = mapping[env]["mysql_url"]return mysql_url, project_url

项目代码(还是之前的测试用例)如下:

import requestsdef test_demo(env_vars):mysql_url = env_vars[0]print('mysql_url的地址是{}'.format(mysql_url))project_url = env_vars[1]resp = requests.get(project_url)status_code = resp.status_codeassert status_code == 200

命令行运行方式,正常运行即可,截图如下:

图片

结论

随着 CI/CD 流水线普及,多环境并存已成常态。测试人员面临的环境复杂度越来越高,若不能实现配置统一、切换自如,将严重拖慢测试效率,甚至引发线上事故。

环境切换看似是小问题,实则影响自动化测试流程的稳定性与扩展性。掌握 Pytest 中的配置管理,就等于掌握了自动化测试的方向盘。

总的来说,Pytest的环境切换通过命令行参数、配置文件和插件支持,让测试灵活适应各种场景。从单人开发到团队协作,它都能大幅提升效率。这不仅是技术实践,更是现代测试思维的体现。掌握环境切换,你的测试流程将更加顺畅,代码质量也能更上一层楼。

测试环境千万条,配置管理第一条;配置不统一,Bug泪两行。

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

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

相关文章

蓝桥杯赛前题

开始每个人能量为3 答题了&#xff0c;答题者1 扣分最后算 #include<bits/stdc.h> using namespace std;const int N1e510; int a[N]; int main(){int n,k,q;cin>>n>>k>>q;for(int i1;i<n;i){a[i]k; }for(int i1;i<q;i){int x;cin>>x;a[…

VSCode优雅的使用debug

原始用法&#xff1a;(这里不使用) 配置launch.json&#xff0c;里面传入参数然后debug&#xff0c;这里我们通常需要传入的参数比较多&#xff0c;而且经常修改参数&#xff0c;直接去修改launch.json会比较麻烦&#xff0c;所以使用sh脚本比较方便。 {// Use IntelliSense to…

oracle常见问题处理集锦

oracle常见问题处理集锦 oracle常见问题处理集锦ORA-03001:未实施的功能ORA:28000 the count is locked oracle常见问题处理集锦 ORA-03001:未实施的功能 问题 ORA-03001:未实施的功能 在datagrip中修改表名称&#xff0c;使用的语法是&#xff1a; rename old_name to new_n…

项目日志配置模板示例

1.新增application.properties配置 logging.configclasspath:logback-spring.xml spring.profiles.activedev 将项目部署到服务器时需要将dev修改为test后再进行打包部署 2.新增logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <…

2025年第十八届“认证杯”数学中国数学建模网络挑战赛【BC题】完整版+代码+结果

# 问题一&#xff1a;随机森林回归from sklearn.ensemble import RandomForestRegressormodel_rf RandomForestRegressor()model_rf.fit(X_train, y_train)# 问题二&#xff1a;LSTM时间序列预测from tensorflow.keras.models import Sequentialmodel_lstm Sequential()model…

C语言实现TcpDump

一、 在 C 语言中实现 TCP 抓包功能&#xff0c;通常可以使用 libpcap 库。libpcap 是一个广泛使用的网络抓包库&#xff0c;它提供了捕获网络数据包的接口。 libpcap 是一个广泛使用的 C 语言库&#xff0c;用于捕获和过滤网络数据包。它提供了一个通用接口&#xff0c;用于访…

Spark-Core编程

sortByKey算子&#xff1a;对(K, V)型RDD按key排序&#xff0c;K需实现Ordered接口&#xff0c;可指定升序或降序及分区数。 join算子&#xff1a;连接两个(K, V)和(K, W)型RDD&#xff0c;返回(K, (V, W))型RDD 。 leftOuterJoin算子&#xff1a;类似SQL左外连接&#xff0c;返…

阅读MySQL实战45讲第9天

目录 一、你的 SQL 语句为什么变“慢” 二、什么情况会引发数据库的 flush 过程&#xff1f; 三、分析上面四种场景对性能的影响 四、InnoDB 刷脏页的控制策略 五、原作者小结&#xff1a; 引言&#xff1a; 一条 SQL 语句&#xff0c;正常执行的时候特别快&#xff0c;但是有时…

cin,cin.get(),getchar(),getline(),cin.get line()异同点

文章目录 1.cin2.cin.get()3.getchar()4.cin.getline()5.getline() 1.cin &#xff08;1&#xff09;cin>>等价于cin.operator>>()&#xff0c;即调用成员函数operator>>()进行读取数据。 &#xff08;2&#xff09;当cin>>从缓冲区中读取数据时&…

VMware虚拟机Ubuntu磁盘扩容

VMware中操作&#xff1a; 选择要扩容的虚拟机&#xff0c;点击编辑虚拟机设置 打开后点击磁盘——>点击扩展&#xff08;注意&#xff1a;如果想要扩容的话需要删除快照&#xff09; 调整到你想要的容量 点击上图的扩展——>确定 然后我们进到虚拟机里面 首先&#…

卷积神经网络(CNN)可视化网站汇总

深度学习 文章目录 深度学习前言CNN ExplainerDeep Learning PlaygroundConvNetJSUnderstanding CNN with Interactive Visualizations3Blue1Brown Neural Networks YouTube PlaylistDistill.pubTensorFlow CNN Visualization (TensorBoard)NN-SVGOpenAI Microscope 前言 汇总…

实习技能记录【3】-----Git操作

1. Git是什么 Git 是一个分布式版本控制系统 (Distributed Version Control System, DVCS)。 它的核心目标是跟踪文件的变化&#xff0c;让你能够随时记录、回溯、协作和管理你的项目。 2. 介绍 2.1 Git 工作区、暂存区、本地仓库介绍 区域名称英文名说明相关命令工作区Wor…

蓝桥杯单片机刷题——按键设置当前采集距离为距离参数

设计要求 驱动超声波传感器&#xff0c;启动距离测量功能,并将其结果显示到数码管上。 按键“S5”定义为参数按键&#xff0c;按下S5按键&#xff0c;设备自动将当前采集的距离数据作为距离参数&#xff1b; 若测量的距离数据超过距离参数&#xff0c;指示灯L1点亮&#xff…

KV Cache大模型推理加速功能

KV Cache KV Cache是大模型标配的推理加速功能&#xff0c;也是推理过程中&#xff0c;显存资源巨大开销的元凶之一。在模型推理时&#xff0c;KV Cache在显存占用量可达30%以上。 目前大部分针对KV Cache的优化工作&#xff0c;主要集中在工程上。比如著名的VLLM&#xff0c…

Windows 图形显示驱动开发-WDDM 2.0功能_上下文监视

功能概述 上下文监视机制是GPU与CPU协同计算的核心同步技术&#xff0c;通过受监视围栏&#xff08;Monitored Fence&#xff09;实现跨硬件单元的高效协调。其核心目标是解决以下场景的同步需求&#xff1a; GPU引擎间同步&#xff1a;例如在多渲染管线中&#xff0c;后处理…

基于YOLOv8的机场跑道异物检测识别系统:提升航空安全的新一代解决方案(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​​​​​​​ ​​ 1. 机场跑道异物检测领域概述 机场跑道异物(Foreign Object Debris, FOD)是指存在于机场跑道、滑行道等关…

网络协议学习

最近在适配ESP32的网络驱动&#xff0c;借此机会先学习一下网络通信协议。 以太网帧、IP包及TCP与UDP的报文格式一文读懂网络报问中的检验和&#xff08;checksum&#xff09;—— 原理举例代码 提问腾讯元宝提示词&#xff1a; TCP窗口是干什么的拥塞窗口是什么的

fit 转 gpx

新增 fit 转 gpx 功能 https://fittools.cc/home/fit2gpx

C++ I/O 性能优化指南

在高性能计算和大规模数据处理中&#xff0c;I/O 性能优化是提升系统整体效率的关键环节。C 作为一种高性能编程语言&#xff0c;提供了丰富的工具和机制来优化 I/O 操作。本文将详细介绍在 Linux 环境下&#xff0c;如何通过代码层面的优化、系统调用的选择以及多线程技术等手…

Python中内置的数据结构类型详析(内置数据容器)

目录 1. 元组&#xff08;Tuple&#xff09;​​2. 列表&#xff08;List&#xff09;​3. 字典&#xff08;Dict&#xff09;4. 集合&#xff08;Set&#xff09;​​5. 字符串&#xff08;Str&#xff09;6. 队列&#xff08;Queue&#xff09;与栈&#xff08;Stack&#xf…