news 2026/5/1 8:22:25

【接口测试】5_代码实现 _pytest参数化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【接口测试】5_代码实现 _pytest参数化

文章目录

  • 一、参数化
  • 二、回顾pytest参数化
    • 2.1 加法原始案例 review_parameterize.py
    • 2.2 参数化实现(重点)
    • 2.3 参数化实现-进阶
      • 2.3.1 add_data.json
      • 2.3.2 从json文件读取 add_data.py
  • 三、参数化步骤
    • 3.1 接口参数化步骤
    • 3.2 编写参数化文件

一、参数化

参数化的核心:数据驱动(用数据驱动测试用例执行)

  • 数据驱动:针对一个接口,只写一个测试方法。用一份测试数据文件,管理各个测试用例的测试数据。
  • 如:登录接口,共 15 条测试用例。但,只需要一个 测试方法,对应 有 15 组数据的 json数据文件,进行测试。

二、回顾pytest参数化

2.1 加法原始案例 review_parameterize.py

# 待测 函数defadd(x,y):returnx+y# 结合 pytest 定义测试类classTestAddFunc(object):# 定义测试方法deftest01_add(self):res=add(10,20)# 调用 待测函数,得实际结果assert30==res# 断言deftest02_add(self):res=add(100,200)assert300==resdeftest03_add(self):res=add(1000,2000)assert3000==res

结果:

wangfei@afei_Mac parameterizeReviewSH27 % pytest -s review_parameterize.py review_parameterize.py...==================3passedin0.01s==================================================

2.2 参数化实现(重点)

importpytest# 待测 函数defadd(x,y):returnx+y data=[(10,20,30),(100,200,300),(1000,2000,3000)]# 结合 pytest 定义测试类classTestAddFunc(object):# 2个参数,第1个参数是一个字符串,对应每一组数据所对应的key;第2个参数是[(),(),()] 这种格式的数据,称作元祖列表# @pytest.mark.parametrize("",[(),(),()])@pytest.mark.parametrize("x, y, expect",data)# 参2 要求必须是 [(),(),()] 格式的数据deftest_add(self,x,y,expect):# 通用测试方法res=add(x,y)# 调用 待测函数,得实际结果assertexpect==res# 断言

2.3 参数化实现-进阶

2.3.1 add_data.json

[{"x":10,"y":20,"expect":30},{"x":100,"y":200,"expect":300},{"x":1000,"y":2000,"expect":3000}]

2.3.2 从json文件读取 add_data.py

importpytestimportjson# 待测 函数defadd(x,y):returnx+y# 封装函数,读取json文件,将 [{},{},{}] 数据 转换为 [(),(),()] 格式的数据defread_json_data(filename):withopen(filename,"r",encoding="utf8")asf:json_data=json.load(f)# 读取json文件data_list=[]fordatainjson_data:val=data.values()tmp=tuple(val)# 转换成元祖data_list.append(tmp)# 把元祖追加到空列表当中# 必须返回,不能在 for 内returndata_list# 返回 [(10, 20, 30), (100, 200, 300), (1000, 2000, 3000)]# 结合 pytest 定义测试类classTestAddFunc(object):@pytest.mark.parametrize("x, y, expect",read_json_data("add_data.json"))# 参2 要求必须是 [(),(),()] 格式的数据deftest_add(self,x,y,expect):# 通用测试方法res=add(x,y)# 调用 待测函数,得实际结果assertexpect==res# 断言

三、参数化步骤

  1. 将 测试数据,按 [{},{},{}] 格式 组织到 json文件中。
  2. 读取 json文件,将数据转换为 [(),(),()]
  3. 在通用测试方法上一行,添加 @pytest.mark.parameterize()
  4. 给 parameterize() 传参。参1:字符串类型,内容为 json文件中一组数据的 key。参2:[(),(),()]格式数据。
  5. 给 通用测试方法添加形参,与 parameterize() 参1 字符串的内容一致。
  6. 修改 通用测试方法 内部实现,使用形参。

3.1 接口参数化步骤

1、编写数据存储文件json2、编写读取工具方法read_json()3、使用参数化组件进行引用parametrize

3.2 编写参数化文件

心得:1、根据模块来新建json文件(1个模块1个json文件)2、最外侧使用{},模块下几个接口,编写几个key,值为列表3、列表值中,单接口有几组数据,就写几个[}.4、每个{}中,组成格式:说明+要进行参数的参数+预期结果
// 有几个接口,写几个key,值为列表。 在api_register_login.py中有5个接口 //[]中有几组数据,就有几个{}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 21:30:18

TegraRcmGUI:让Switch自定义注入变得像点外卖一样简单

你是否曾经面对复杂的命令行操作感到手足无措?是否在寻找一个能让Switch自定义注入变得直观易懂的工具?今天我要向你介绍的TegraRcmGUI,就是这样一个让你从"技术恐惧"到"轻松掌控"的完美桥梁。 【免费下载链接】TegraRcm…

作者头像 李华
网站建设 2026/4/18 9:19:08

[特殊字符] 终极GTA V防护神器:YimMenu让你的在线游戏体验零风险

在GTA V的公共战局中,你是否经常遭遇恶意攻击、游戏崩溃或各种烦人的骚扰?YimMenu正是为解决这些问题而生的专业防护工具。这个基于C开发的开源项目能够有效保护玩家免受各种公开崩溃攻击,同时大幅提升整体游戏体验质量。 【免费下载链接】Yi…

作者头像 李华
网站建设 2026/5/1 5:46:17

3步搞定显卡驱动冲突:DDU完整清理指南

3步搞定显卡驱动冲突:DDU完整清理指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller 当你的电脑…

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

4、安全标准与认证:保障系统安全的基石

安全标准与认证:保障系统安全的基石 1. 认证现状与策略 近年来,产品认证的失败率有所下降。尽管导致失败的许多原因仍然存在,但企业如今对认证要求有了更清晰的认识,若缺乏必要证据,就不太可能启动认证流程。为了提高产品认证的成功率,在开发过程的早期阶段与认证公司合…

作者头像 李华
网站建设 2026/4/27 19:54:10

ReTerraForged地形模组终极编译指南:从源码到游戏体验

ReTerraForged地形模组终极编译指南:从源码到游戏体验 【免费下载链接】ReTerraForged a 1.19 port of https://github.com/TerraForged/TerraForged 项目地址: https://gitcode.com/gh_mirrors/re/ReTerraForged 还在为Minecraft单调的地形生成而苦恼吗&…

作者头像 李华
网站建设 2026/5/1 5:47:45

解放双手!VLC点击暂停插件让你的观影体验更智能

解放双手!VLC点击暂停插件让你的观影体验更智能 【免费下载链接】vlc-pause-click-plugin Plugin for VLC that pauses/plays video on mouse click 项目地址: https://gitcode.com/gh_mirrors/vl/vlc-pause-click-plugin 还在为每次暂停视频都要费力寻找控制…

作者头像 李华