Pytest自动化测试执行环境切换的两种解决方案

🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

一、痛点分析

在实际企业的项目中,自动化测试的代码往往需要在不同的环境中进行切换,比如多套测试环境、预上线环境、UAT环境、线上环境等等,并且在DevOps理念中,往往自动化都会与Jenkins进行CI/CD,不论是定时执行策略还是迭代测试,那么问题来了,难道每次切换环境都需要提供一套测试代码?或者每次切换都要需修改我们的自动化环境配置?答案当然不是,不然怎么能叫测试自动化呢!

在未使用pytest的Hook相关方法之前,切换环境我们一般会使用python的内置模块sys,它有一个argv的方法,可以从我们的命令行接收参数,通过它也可以实现上面的需求,就像如下部分代码这样:

try: if sys.argv[1] == '-p': # 预上线环境 conf_url.write_value(filename=CONFIGS_FILE_PATH_URL, data=p_api_address) modify_properties_url(filename=ENVIRONMENT_PROPERTIES_PATH, url=p_api_address["request"]["url"]) elif sys.argv[1] in [f't{i}' for i in range(1, 8)]: # 测试环境 conf_url.write_value(filename=CONFIGS_FILE_PATH_URL, data=test_api_address(sys.argv[1][1:])) modify_properties_url(filename=ENVIRONMENT_PROPERTIES_PATH, url=test_api_address(sys.argv[1][1:])["request"]["url"]) else: case_logger.error("Please confirm the environmental information.") print("Please confirm the environmental information.") raise Exception except IndexError: # 生产环境 conf_url.write_value(filename=CONFIGS_FILE_PATH_URL, data=formal_api_address) modify_properties_url(filename=ENVIRONMENT_PROPERTIES_PATH, url=formal_api_address["request"]["url"])

这种方式我们需要使用 "python xxx.py -p" 这种方式进行环境切换,然后再执行pytest命令行去执行测试用例,但是这种方法能在pytest的命令行中使用吗?能不能将环境切换的命令行也集成到pytest的命令行中,执行整个自动化项目只使用一条命令行呢?

方法一:Hook方法pytest_addoption注册命令行参数

1、Hook方法注解

pytest_addoption:可以让用户注册一个自定义的命令行参数,方便用户将数据传递给 pytest
这个 Hook 方法一般和内置 fixture pytestconfig 配合使用
pytest_addoption 注册命令行参数,pytestconfig 通过配置对象读取参数的值
参考文档:Writing plugins — pytest documentation

2、使用方法

1.一般编写到conftest.py文件中

2.定义pytest_addoption方法注册pytest命令行参数,函数名和参数保持一致

def pytest_addoption(parser): """注册自定义参数 env 到配置对象""" parser.addoption("--env", action="store", default="https://www.cnblogs.com/", help="将命令行参数 ’--env' 添加到 pytest 配置中")

parser.addoption参数说明:

  • name:自定义命令行参数的名字,可以是:"xx", "-xx" 或 "--xx"
  • action:在命令行中遇到此参数时要采取的基本操作类型
  • store:默认,只存储参数的值,可以存储任何类型的值,此时 default 也可以是任何类型的值,而且命令行参数多次使用也只能生效一个,最后一个值覆盖之前的值
  • append:存储一个列表,用 append 模式将可以同时多次使用自定义参数,并且 default 默认值必须是一个列表,pytest 会把 default 默认参数的值和多个自定义参数的值放在一个列表中
  • store_const:用 const 为命令行参数指定一个常量值,必须和 const 参数同时使用,使用这个模式后命令行参数不能赋值
  • append_const:存储一个列表,使用 const 为命令行参数指定一个常量值,并将 default 默认值和 const 常量值添加到列表中,这个模式可以同时多次使用自定义参数,但是还是不能赋值,只能使用常量
  • nargs:应该使用的命令行参数的数量
  • const:某些操作和nargs选择所需的常量值
  • default:如果参数的值不在命令行中,则使用默认值
  • type:可以是 python 的基础类型,比如:int,str,float,list 等类型,如果不指定类型的话,pytest会把接受到的参数值都默认为 str 类型,所以我们有时需要指定参数的类型,在使用 type 指定类型时,也需要把 default 的类型修改为同样的类型!
  • choices:choices 可以指定几个值,自定义参数必须在这几个值中选择一个,否则会报错
  • required:命令行选项是否可以省略(仅可选)
  • help:对参数作用的简要说明
  • metavar:用法消息中参数的名称
  • dest:要添加到 parse_args() 返回的对象中的属性的名称

3.使用request.config.getoption("--命令行")获取命令行参数的值

@pytest.fixture(scope="session") def get_env(request): """从配置对象中读取自定义参数的值""" return request.config.getoption("--env")

4.fixture继承,进行环境切换

@pytest.fixture(autouse=True) def set_env(get_env): """将自定义参数的值写入全局配置文件""" with open(ENV_TXT_FILE, 'w', encoding='utf-8') as f: f.write(get_env)

5.通过pytest命令行传参一键化实现环境切换和测试用例执行

方法二:使用插件pytest-base-url进行命令行传参

1.安装pytest-base-url

pip install pytest-base-url -i https://pypi.douban.com/simple

2.将base_url参数传入到fixture函数中

@pytest.fixture def driver_setup(base_url): try: URL = base_url start_chrome(URL, options=browser_options(), headless=False) driver = get_driver() except Exception as e: log.error(e) else: yield driver

3.pytest命令行传参

使用 --base-url https://www.xxx.com/ 形式传参

pytest --base-url https://www.cnblogs.com/
第一种不局限于环境切换,任何想通过pytest命令行传入自定义的参数都可以通过方法一实现,因此杀鸡焉用牛刀,环境切换优先推荐方法二!

二、总结

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

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

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

相关文章

主组与附加组

主包主包,为什么我改不了test4的组啊?root@btc-VMware20-1:/nihao/zaijian# id test4 uid=1001(test4) gid=1002(hahaha) 组=1002(hahaha),1003(hello) root@btc-VMware20-1:/nihao/zaijian# gpasswd -d test4 hahah…

阿里出品2026版Java架构师面试指南,涵盖Java所有核心技能

最近很多粉丝朋友私信我说:熬过了去年的寒冬却没熬过现在的内卷;打开Boss直拒一排已读不回,回的基本都是外包,薪资还给的不高,对技术水平要求也远超从前;感觉Java一个初中级岗位有上千人同时竞争&#xff0…

FBM237-P0917QZ输出模块

FBM237-P0917QZ 输出模块特点概览:高性能输出:支持多路数字/模拟信号输出,响应速度快,控制精确。模块化设计:便于扩展和替换,灵活适应不同控制系统需求。多接口兼容:可与各种控制器、PLC或DCS系…

2026 垂直生命线系统防护厂家权威推荐榜单:水平生命线系统/垂直生命线系统/水平生命线系统装置/垂直生命线系统装置源头厂家精选。

高空作业安全是工业生产中不可忽视的核心环节。据统计,我国每年因高空坠落导致的事故超过3000起,其中约65%的事故与防护设备缺失或质量不达标直接相关。在建筑、电力、船舶、石油等高危行业中,如何选择可靠的生命线…

2026年Java岗最全面试攻略,面试必刷,跳槽大厂神器

现在 Java 面试可以说是老生常谈的一个问题了,确实也是这么回事。面试题、面试宝典、面试手册......各种 Java 面试题一搜一大把,根本看不完,也看不过来, 而且每份面试资料也都觉得 Nice,然后就开启了收藏之路。Java 开…

FBM242-P0916JY外置开关模块

FBM242-P0916JY 外置开关模块特点概览:模块化设计:标准化接口,便于安装、扩展和替换。多通道输入:支持多路开关信号输入,实现灵活控制。工业级可靠性:耐高温、防尘、防振动,适应连续运行的工业环…

深入解析:【MySQL】视图

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026南宁市英语雅思培训辅导机构推荐;2026权威出国雅思课程排行榜 - 苏木2025

基于2024-2025雅思官方发布的中国大陆地区考生成绩大数据报告,南宁市雅思考生整体均分为5.8分,其中写作、口语单科平均分分别低至5.6分、5.5分,显著低于全球均值。无论是兴宁区、江南区、青秀区、西乡塘区、邕宁区、…

2026南宁市英语雅思培训辅导机构推荐2026权威出国雅思课程排行榜 - 苏木2025

雅思考试作为出国深造、职场晋升的核心语言凭证,近年来在南宁市兴宁区、江南区、青秀区、西乡塘区、邕宁区、良庆区、武鸣区及横州市、宾阳县、上林县、马山县、隆安县等全域区县的报考热度持续攀升。但多数考生在备考…

2026Java面试常见知识点总结!

我决定以面试的角度,深度聊聊一些面试中经常会被问及的知识点;希望能够帮助你们系统的梳理Java程序员面试中必须要掌握的知识技能。为啥要深度聊聊?就是想让你们把重心都放到技术的深度上来。因为当下面试,面试官更在意的是你对某…

192S06M0132B控制系统模块

192S06M0132B 控制系统模块特点核心控制单元:承担数据处理与指令执行,保证系统高效响应。高可靠性设计:工业级元件,耐高温、防尘、防振动,适合连续运行。灵活扩展:支持与其他模块无缝组合,便于系…

2026年评价高的反渗透超纯水设备,电子行业超纯水设备,超纯水设备厂家采购决策指南 - 品牌鉴赏师

引言在 2026 年,随着电子、半导体等行业的飞速发展,对超纯水设备的需求日益增长,其质量和性能直接影响到产品的品质和生产效率。为了帮助电子行业、半导体行业等用户在采购超纯水设备时做出更科学、合理的决策,我们…

专业气体分析仪采购指南:七大技术类别厂家推荐与对比 - 品牌推荐大师

当前,气体分析仪市场正经历着一场由严格法规、技术进步与产业升级共同驱动的深刻变革。行业已从单一的安全预警,演进为支撑智能制造、超低排放和高端工艺控制的精密感知核心。理解这一市场的最新动态与技术脉络,是做…

VME-HDD-4G单插槽软盘/硬盘模块

VME-HDD-4G 单插槽软盘/硬盘模块特点概览:单插槽设计:紧凑结构,便于安装在标准 VME 机箱中。高容量存储:4GB 存储空间,满足工业数据存储和日志记录需求。兼容软硬盘:可支持传统软盘格式及硬盘存储&#xff…

2026年1月广东定制密封圈 /车削密封件 /超高压密封/ 聚氨酯密封 /非标密封厂家企业哪家好 - 2026年企业推荐榜

一、核心结论 1.1 核心评估框架 本次评估基于四大核心维度构建闭环体系,精准筛选行业头部企业:一是技术研发能力(核心材料配方、专利储备、智能技术应用);二是定制化响应效率(打样周期、批量交付时效、柔性生产能…

【大数据毕设全套源码+文档】基于Python的王者荣耀战队的数据分析系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026四川口碑实木楼梯品牌深度选型指南 - 2026年企业推荐榜

转载自:https://www.pp10top.com/rankinglis/283843.html 文章摘要 本文基于2026年四川地区实木楼梯市场趋势,提供一份专业选型指南,深度剖析多家服务商,重点推荐四川卡芃特楼梯有限公司。内容涵盖行业全景、服务商…

Linux系统编程:内核协议栈,我把网络IO移到用户态后,延迟从毫秒级降到微秒级

写网络服务的程序员,迟早会撞上这堵墙:服务器性能上不去。 CPU占用率不高,内存绑绑有余,网卡带宽远没到上限。但QPS就是卡在10万左右,怎么调都上不去。延迟更头疼,P99动不动飙到几十毫秒。对实时游戏这类场景?这简直是灾难。 问题出在哪?往往不在你的业务代码,而在L…

2026年1月中国大巴车租赁、包车、租车、商务车租赁、旅游包车公司行业竞争格局深度分析报告 - 2026年企业推荐榜

一、核心结论​ 1.1 核心评估框架​ 本报告基于行业本质与客户核心诉求,构建四大评估维度:​ 车况管理:以车辆平均车龄、新能源占比、维保体系完善度为核心指标,直击出行安全痛点​ 调度效率:通过订单响应时效、跨…

网络安全基础核心框架一篇搞定:专为零基础设计的极简入门指南

一、网络安全概述 1.1 定义 信息安全: 为数据处理系统建立和采用的技术和管理的安全保护,保护计算机硬件、软件和数据不因偶然和恶意的原因遭到破坏、更改和泄露。 网络安全: 防止未授权的用户访问信息防止未授权而试图破坏与修改信息 1.2 信息安全…