如何在JMeter中遍历Excel每行数据并与JSON响应做字段匹配校验
JMeter Excel行数据与接口JSON响应匹配校验实现方案
1. 前置依赖准备
JMeter默认不支持Excel读取,需提前导入Apache POI相关依赖包:
- 下载对应版本的
poi-x.x.x.jar、poi-ooxml-x.x.x.jar - 将jar包放入JMeter安装目录的
lib/ext文件夹下,重启JMeter生效
2. 预加载Excel所有有效数据到内存
在线程组下添加 JSR223 前置处理器,使用Groovy脚本读取Excel数据,组合为唯一标识存入全局集合,避免后续每次校验都重复读Excel:
import org.apache.poi.ss.usermodel.WorkbookFactory import java.util.HashSet // 替换为你的Excel文件实际路径 def excelPath = "C:/your_path/user_data.xlsx" def workbook = WorkbookFactory.create(new File(excelPath)) def sheet = workbook.getSheetAt(0) def validDataSet = new HashSet() // 若Excel有表头,从第2行(索引1)开始遍历,无表头则从索引0开始 for (int i = 1; i <= sheet.lastRowNum; i++) { def row = sheet.getRow(i) // 索引对应Excel列:0=Last_Name、1=ID、2=First_Name,根据实际列顺序调整 def lastName = row.getCell(0).getStringCellValue().trim() def userId = row.getCell(1).numericCellValue.toInteger() def firstName = row.getCell(2).getStringCellValue().trim() // 按规则拼接唯一键,分隔符选择不会出现在字段值中的字符即可 def uniqueKey = "${userId}_${firstName}_${lastName}" validDataSet.add(uniqueKey) } // 将有效集合存入JMeter全局属性,供后续断言调用 props.put("user_valid_set", validDataSet) workbook.close()
3. 提取接口响应的目标字段
在HTTP接口请求采样器下添加 JSON提取器,配置如下:
- 引用名称:
resp_id、resp_first_name、resp_last_name - JSON路径表达式:
$.id、$.first_name、$.last_name - 匹配数字:
0(取第一个匹配结果,若返回多条可填-1提取所有)
4. 编写匹配断言逻辑
在HTTP接口请求采样器下添加 JSR223 断言,校验接口返回组合是否在Excel有效集合内:
def validSet = props.get("user_valid_set") // 拼接规则与Excel侧完全一致 def respUniqueKey = "${resp_id as int}_${resp_first_name.trim()}_${resp_last_name.trim()}" if (!validSet.contains(respUniqueKey)) { AssertionResult.failure = true AssertionResult.failureMessage = "校验失败:接口返回的用户组合 ${respUniqueKey} 不存在于Excel数据中" }
补充说明
- 若接口返回多条用户数据,可在JSON提取器提取所有结果后,循环遍历每条数据的组合是否在集合内即可
- 采用HashSet存储有效数据的判断时间复杂度为O(1),远优于逐行遍历Excel对比的效率,适合Excel数据量较大的场景
- 该方案默认兼容xls、xlsx两种Excel格式,无需额外调整脚本
内容的提问来源于stack exchange,提问作者Harsha
相关产品推荐
相关产品推荐

