《JMeter核心技术、性能测试与性能分析》由清华大学出版社出版,作者结合自身多年IT行业实践经验,持续推出“每周读书与学习”系列内容,旨在为计算机科学与技术及相关专业的毕业生和IT从业人员提供实用的技术指导与经验分享。
此前的内容已系统讲解了JMeter的各类元件及其功能原理。本次分享将聚焦于实际应用,重点探讨如何利用这些元件编写常见的性能测试脚本,并通过具体案例展示实战技巧。
继上次介绍的“用户需先登录再请求其他接口”的脚本实现后,本文将继续深入JMeter性能测试脚本编写的实践场景。
1. 将前一个请求的响应结果作为下一个请求的输入参数
在真实的性能测试过程中,除了对单一接口进行压力测试外,还常常需要模拟复杂的业务流程。例如,存在两个接口调用关系:第二个接口的请求参数依赖于第一个接口的返回值。这种场景下,必须确保请求顺序正确,并能动态传递数据。
以下以调用 http://www.nmc.cn/rest/province/ 接口为例进行说明:该接口用于获取中国各省份或直辖市下属的城市信息。但要成功调用此接口,首先需要知道目标省份或直辖市的唯一代码。而该代码并非直接已知,需通过省份名称查询获得。
因此,整个流程分为两步:
- 根据省份或直辖市名称,调用接口获取其对应的编码;
- 使用上一步获取到的编码作为参数,再次调用接口,获取该地区下所有城市的信息。
为了实现上述逻辑,第一步是准备全国所有省份和直辖市的名称作为基础数据源。由于这些名称是固定的、可枚举的,在JMeter中推荐使用“CSV 数据文件设置”这一配置元件来进行参数化处理。
如下图所示,在“CSV 数据文件设置”中指定包含省份名称的数据文件的绝对路径,并将文件编码设为UTF-8,以确保中文字符能够被正确读取,避免出现乱码问题。因为原始数据中包含大量中文名称,若编码格式不匹配(如误用ANSI),极易导致读取异常。
完成编码设置后,定义变量名为 provinceName,用于存储每次从CSV文件中读取的省份或直辖市名称。
对应的参数化文件中应完整列出所有省级行政区的名称,格式如下图所示:
完成参数化配置后,添加一个HTTP请求取样器,用于调用 http://www.nmc.cn/rest/province 接口。该接口无需额外传参,访问后会返回全部省份及其对应代码的JSON数据。
但由于我们需要根据当前循环中的省份名称提取其专属代码,仅发起请求并不足够,还需对响应结果进行解析。鉴于返回数据为JSON格式,选择“后置处理器”中的“JSON JMESPath Extractor”来提取所需字段。
为保证该后置处理器仅作用于当前取样器的响应数据,建议将其与取样器置于同一逻辑控制组内。此处采用“简单控制器”实现分组管理,从而确保数据处理的准确性和隔离性。
以下是 http://www.nmc.cn/rest/province 接口返回的完整JSON示例,其中包含了各个省份/直辖市的名称与对应代码的映射关系:
以下为中国各省级行政区的相关信息:
北京市、天津市、河北省、山西省、内蒙古自治区、辽宁省、吉林省、黑龙江省,这些地区主要分布在中国的北方区域,涵盖华北与东北地带。
上海市、江苏省、浙江省、安徽省、福建省、江西省、山东省、河南省,位于中国东部沿海及中部地区,经济较为发达,人口密集。
湖北省、湖南省、广东省、广西壮族自治区、海南省、重庆市、四川省、贵州省、云南省,覆盖了中国的中南部和西南地区,地形多样,气候湿润。
西藏自治区、陕西省、甘肃省、青海省、宁夏回族自治区、新疆维吾尔自治区,地处中国西部,地域辽阔,拥有丰富的自然资源与独特的地理风貌。
香港特别行政区、澳门特别行政区、台湾省,属于中国的特别行政区及省份,具有特殊的历史背景与行政地位。
以上各地区的编码分别为: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内容中提取指定省份或直辖市的名称所对应的编码信息。
提取到的结果将被赋值给变量province,以便后续取样器调用相关接口时使用。JMESPath表达式设置为[?name=='${provinceName}'].code,其中${provinceName}引用的是参数化配置中预定义的变量,表示当前需要查找的省份或直辖市名称。同时,匹配数设置为1,确保只提取第一个符合条件的结果。若对JSON JMESPath Extractor的使用不熟悉,可参考本书前文相关内容,其中有对该元件详细的操作说明和应用示例。
当成功通过JSON JMESPath Extractor获取到目标省份或直辖市的代码后,接下来添加第二个HTTP取样器,用于发起请求访问以下接口:
http://www.nmc.cn/rest/province
该接口用于获取指定行政区划下的所有城市信息。如下图所示,在请求URL中动态传入了变量${province},该变量即为上一步提取出的行政区划代码。
完成上述JMeter元件的添加与配置后,建议插入“查看结果树”监听器,以便直观地观察每个取样器的执行情况和响应结果。如图所示,在运行整个测试计划后,可在查看结果树中看到第一个取样器已成功发送请求至:
http://www.nmc.cn/rest/province
该请求用于获取全部省级行政区信息,是后续操作的基础。
进一步查看结果树中的记录可以发现,第二个取样器也成功发起了接口调用,其请求地址为:
http://www.nmc.cn/rest/province/ABJ
如图所示,URL中已正确附加了对应的行政区划代码。由于参数化数据中第一条数据为“北京市”,结合第一个取样器返回的响应内容可知,北京市对应的代码为ABJ。因此,在首次执行时,第二个取样器的请求地址应为:
http://www.nmc.cn/rest/province/ABJ
实际运行结果显示,请求地址与预期完全一致,表明脚本逻辑正确无误。继续查看“获取城市信息”这一取样器的响应数据,可以看到系统已成功返回北京市下辖的所有城市信息。
本示例中,省份或直辖市名称的参数化数据是通过JMeter的“CSV Data Set Config”配置元件实现的。除此之外,也可以采用JMeter函数助手提供的CSVRead函数来完成相同的功能,提供了更灵活的参数化方式。具体配置方式如下图所示。
本次学习重点在于掌握如何在JMeter中编写基本的性能测试脚本,能够独立完成常见的HTTP请求及数据库请求的压测任务。通过每日积累一个知识点,逐步提升技能水平,实现持续进步。


雷达卡


京公网安备 11010802022788号







