楼主: 谭小包子
16 0

JMeter性能测试脚本编写实战(二)- 前一个请求返回的结果作为后一个请求的入参 [推广有奖]

  • 0关注
  • 0粉丝

小学生

14%

还不是VIP/贵宾

-

威望
0
论坛币
5 个
通用积分
0.8573
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
40 点
帖子
3
精华
0
在线时间
0 小时
注册时间
2018-5-9
最后登录
2018-5-9

楼主
谭小包子 发表于 2025-12-3 07:01:36 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

《JMeter核心技术、性能测试与性能分析》一书由清华大学出版社出版,作者基于自身多年的IT行业实践经验,持续推出每周读书与学习系列内容,旨在为计算机科学技术及相关IT专业的毕业生和从业者提供有价值的参考与指导。

此前的内容已系统讲解了JMeter的理论知识,涵盖各类元件的功能解析及其应用场景。本文将从实际操作出发,聚焦于如何运用这些元件构建常见的性能测试脚本,并通过具体案例演示脚本编写的实战技巧。

继上一期分享的“用户需先登录再请求其他接口”的测试脚本实现方法后,本期将继续深入探讨JMeter在性能测试脚本编写中的高级应用。

1. 利用前一个请求的响应结果作为下一个请求的输入参数

在真实的性能测试场景中,除了对单一接口进行压力测试外,还经常需要模拟多步骤、有关联关系的业务流程。例如,某个接口的调用依赖于另一个接口返回的数据,即前一个请求的结果需作为后一个请求的参数传入。

以下图为例,展示了一个典型的关联请求场景:首先调用 http://www.nmc.cn/rest/province/ 接口获取中国各省份或直辖市的编码信息,然后利用该编码作为参数,再次请求同一接口以获取对应地区下辖的城市列表。

由于该接口在获取城市信息时必须传入具体的行政区划代码,而初始阶段并不掌握每个省市对应的代码值,因此整个流程分为两个步骤:

  1. 根据已知的省市名称,查询其对应的唯一编码;
  2. 使用第一步获取到的编码作为参数,发起第二次请求,获取该区域下的所有城市数据。

为了实现这一流程,首先需要将全国所有省份和直辖市的名称作为可变参数进行管理。在JMeter中,推荐使用“CSV 数据文件设置”这一配置元件来完成参数化处理。如下图所示,在“文件名”字段中指定包含省市名称的CSV文件的绝对路径,并将文件编码设置为UTF-8,确保中文字符能够被正确读取,避免因编码不一致导致的乱码问题。

此外,在“变量名称”栏中定义一个名为 provinceName 的变量,用于存储每次从文件中读取的省市名称。

对应的参数化数据文件应预先录入全部省市名称,格式如下图所示:

完成参数配置后,添加一个HTTP请求取样器,用于调用 http://www.nmc.cn/rest/province 接口。此接口无需额外传参,访问后会返回所有省市名称与其对应编码的JSON数据集合。

由于返回的是批量数据,需从中提取出当前 provinceName 所对应的具体编码,因此需要引入后置处理器进行数据解析。考虑到响应体为JSON格式,选择“JSON JMESPath Extractor”作为后置处理器最为合适。

为保证该提取器仅作用于当前取样器的响应结果,建议将其与取样器置于同一个“简单控制器”内,形成逻辑分组,从而确保处理范围的准确性。

以下是 http://www.nmc.cn/rest/province 接口返回的完整省市编码映射数据示例(部分内容):

以下为中国各省级行政区的名称及相关代码信息:

北京市,代码:ABJ;天津市,代码:ATJ;河北省,代码:AHE;山西省,代码:ASX;内蒙古自治区,代码:ANM。

辽宁省,代码:ALN;吉林省,代码:AJL;黑龙江省,代码:AHL;上海市,代码:ASH;江苏省,代码:AJS。

浙江省,代码:AZJ;安徽省,代码:AAH;福建省,代码:AFJ;江西省,代码:AJX;山东省,代码:ASD。

河南省,代码:AHA;湖北省,代码:AHB;湖南省,代码:AHN;广东省,代码:AGD;广西壮族自治区,代码:AGX。

海南省,代码:AHI;重庆市,代码:ACQ;四川省,代码:ASC;贵州省,代码:AGZ;云南省,代码:AYN。

西藏自治区,代码:AXZ;陕西省,代码:ASN;甘肃省,代码:AGS;青海省,代码:AQH;宁夏回族自治区,代码:ANX。

新疆维吾尔自治区,代码:AXJ;香港特别行政区,代码:AXG;澳门特别行政区,代码:AAM;台湾省,代码:ATW。

由于返回的数据采用的是JSON格式,因此在后置处理器中添加了JSON JMESPath Extractor元件,用于对JSON响应内容进行解析与提取。如下图所示,配置该元件的目的是从返回的JSON数据中提取指定的省份或直辖市名称所对应的编码信息。

提取到的编码值将被赋值给变量province,以便后续的取样器在调用接口时使用该变量获取对应区域下的所有城市数据。JMESPath表达式设置为[?name=='${provinceName}'].code,其中${provinceName}引用了前期在参数化配置中定义的变量名,确保动态匹配目标省份或直辖市。同时,设定匹配次数为1,保证仅提取第一个符合条件的结果。

若对JSON JMESPath Extractor的使用方法不够熟悉,可参考本书前文相关章节,其中已对如何利用该元件从JSON结构中精准提取所需字段进行了详细说明。

当通过JSON JMESPath Extractor成功获取到目标省份或直辖市的对应编码后,接下来可添加第二个HTTP取样器,用于发起新的请求,访问以下接口地址以获取下属城市的完整信息:

http://www.nmc.cn/rest/province

如图所示,在该取样器的URL配置中加入了${province}变量,用于动态传入上一步提取出的行政区划代码,从而实现针对不同区域的城市数据拉取。

完成上述JMeter元件的添加与配置之后,建议继续加入“查看结果树”监听器,便于实时观察各个取样器的执行情况和响应结果。如下图所示,在运行整个测试计划后,通过查看结果树可以确认:第一个取样器已成功发送请求至

http://www.nmc.cn/rest/province

接口,并获得有效响应。

进一步查看结果显示,第二个取样器也成功触发了接口调用,其请求URL为:

http://www.nmc.cn/rest/province/ABJ

如下图所示,该URL中已正确附加了具体的行政区划代码。由于参数化数据中的首个值为“北京市”,结合第一个取样器返回的数据可知,北京市对应的编码为ABJ。因此,在首次执行时,第二个取样器的请求地址应为

http://www.nmc.cn/rest/province/ABJ

实际运行结果与预期完全一致,表明当前性能测试脚本逻辑正确、运行稳定。通过检查“获取城市信息”这一取样器的响应内容,可以看到系统已成功返回北京市下辖的所有城市数据信息。

本示例中,省份或直辖市名称的参数化是借助JMeter配置元件中的“CSV数据文件设置”实现的。除此之外,也可采用JMeter函数助手提供的CSVRead函数来达成相同目的,具体配置方式如下图所示。

2、学习要点总结:

掌握在JMeter环境中编写常见性能测试脚本的能力是本阶段的核心目标,包括但不限于构建标准HTTP请求及数据库请求的压测场景。建议每日积累一个知识点,逐步深入理解工具功能与性能测试流程,持续提升自身的技术水平与实践能力。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Meter 性能测试 JME province extract

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-5 23:18