news 2026/5/8 17:15:13

这个Pytest函数,轻松实现动态参数化√

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
这个Pytest函数,轻松实现动态参数化√

无论什么自动化,部分测试用例均会运用到参数化,参数化可以帮助我们覆盖更多的测试用例,减少重复代码逻辑,然而自动化中也有多种实现参数化的方法,比如UnitTest的DDT模式,Pytest的fixture,以及Pytest的parametrize均可以实现测试用例的参数化。

今天小编介绍新的一种方法,通过hook函数来实现测试用例的参数化,废话不多说,直接进入正文。

pytest_generate_tests

pytest_generate_tests钩子函数是Pytest框架中用来动态生成测试用例参数的钩子函数。通过它,我们可以在运行时动态地生成测试参数,从而避免手动编写重复的测试用例。

在conftest.py文件中编写对应的函数信息:

import pytest def pytest_generate_tests(metafunc): if "data" in metafunc.fixturenames: metafunc.parametrize("data", metafunc.module.test_data, scope="function" )

其中代码中data表示测试用例中对应的传参,类似fixture名称传入,metafunc表示当前测试用例的模块对象,scope表示测试用例的作用域,默认为function。

方法一

简单编写两条测试用例,然后通过pytest_generate_tests实现测试用例的参数化:

import requests url = 'http://apis.juhe.cn/simpleWeather/query' # 测试数据 test_data = [{ "data": { "city": "上海", "key": "xxxxxxxx" } }, { "data": { "city": "北京", "key": "xxxxxxx" } } ] # 测试用例 def test_01(data): # 启动**data表示传入参数 r = requests.post(url, **data) print(r.text)

编写完成后,直接运行程序,通过结果发现已经执行成功。

方法二

通过上面的案例,小伙伴们可能懂了pytest_generate_tests如何运行的.

其实该函数主要提供的就是动态方便我们实现测试用例,上述方法很显然不动态,小编在介绍一种使用方法,场景是根据不同的命令行,传入不同的测试数据。

这个时候就想到了pytest的另一个函数pytest_addoption,可以实现自定义命令行参数后,再次动态实现我们的参数化内容。更改conftest.py文件内容,增加pytest_addoption函数内容:

import pytest def pytest_addoption(parser): # 添加自定义参数--anjing parser.addoption( "--anjing", action="store", default="anjing", help="将'anjing'添加到pytest的配置参数中" ) def pytest_generate_tests(metafunc): if "data" in metafunc.fixturenames: # 获取命令行的参数信息 result = metafunc.config.getoption("anjing") # 判断传参值,通过传参值进行不同传入参数 if result == 'test': metafunc.parametrize("data", metafunc.module.test_shanghai, scope="function" ) if result == 'qa': metafunc.parametrize("data", metafunc.module.test_beijing, scope="function" )

同样根据刚才的测试用例,将测试数据进行分离,参数值为test的访问上海的参数,参数值为qa的我们访问北京的参数:

import requests # 上海的参数 test_shanghai = [{ "data": { "city": "上海", "key": "xxxxxxxx" } }, ] # 北京的参数 test_beijing = [{ "data": { "city": "北京", "key": "xxxxxxx" } }] def test_01(data): '''线下数据''' url = 'http://apis.juhe.cn/simpleWeather/query' r = requests.post(url, **data) print(r.text)

编写完成后,我们直接验证命令行传入不同参数,实现了动态参数化的内容。如果没有传入参数的话,系统会出现报错的。

总结

小编通过两种方法介绍了pytest_generate_tests的使用方法和一般的使用场景。

当然该函数肯定不仅仅只有这两种方法来使用,具体的使用方法可以根据对应的需求或者项目进行来完成,不同的需求不同的使用方法,如果有更好的使用方法可以下方留言,大家一起沟通交流。感谢您的阅读,希望本篇文章可以给您带来帮助。

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 14:56:01

【Java毕设源码分享】基于springboot+vue的旅游民宿信息管理系统设计与实现(程序+文档+代码讲解+一条龙定制)

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

作者头像 李华
网站建设 2026/5/6 12:19:34

代码实现 基于 DeepEval 框架实现工单摘要质量的批量自动评估

代码实现 基于 DeepEval 框架实现工单摘要质量的批量自动评估 一、代码核心目标与整体流程 基于 DeepEval 框架实现工单摘要质量的批量自动评估:对接自定义 OpenAI 兼容接口(34ku),读取 Excel 中的「原始工单对话+人工/模型生成的工单摘要」,通过 DeepEval 的 Summariza…

作者头像 李华
网站建设 2026/4/30 23:57:51

计算单链表的长度

参考视频 2-9 单链表求表长和插入链点操作_哔哩哔哩_bilibili 暂无力扣参考题 题目 #include <stdio.h> #include <stdlib.h>typedef int ElemType; typedef struct LNode {ElemType data;struct LNode *next; }LNode,*LinkList;LinkList Create();/* 细节在此不…

作者头像 李华
网站建设 2026/5/8 0:45:01

全网最全的Cobalt Strike使用教程-内网渗透之域控攻击篇!黑客技术零基础入门到精通教程建议收藏!

免责声明本号所发布的文章及工具只限交流学习&#xff0c;本人不承担任何责任&#xff01;一、前言 在本篇文章中我将继续为大家介绍一些攻击域控制器时常用的一些方法&#xff0c;为了方便演示&#xff0c;我是直接在目标域控制器下进行一系列操作的&#xff0c;在真实环境下&…

作者头像 李华
网站建设 2026/5/8 15:05:34

Dify部署过程中连接Qwen3-32B API的认证配置

Dify 集成 Qwen3-32B API 的认证配置实践 在当前企业加速构建智能系统的大背景下&#xff0c;如何将高性能大模型安全、高效地嵌入现有平台&#xff0c;已成为AI工程落地的关键挑战。Dify 作为一款支持低代码编排的AI应用开发平台&#xff0c;正被越来越多团队用于快速搭建对话…

作者头像 李华
网站建设 2026/4/30 23:57:46

要学会降低写作门槛

如果每天的卡片写作数量低于预期&#xff0c;那就要调整心态。要有一种积极、融合的心态&#xff1a;万物皆可写。 今天想做什么重要的事&#xff1f;要处理什么重要的工作&#xff1f;开会遇到什么问题&#xff1f;开会要提前准备发言吗&#xff1f;要回复别人什么重要的事情…

作者头像 李华