如何用BeanShell将Petstore API提取的JSON数据批量存入CSV?
解决BeanShell批量存储JSON Extractor提取数据到CSV的问题
核心问题分析
你遇到的问题是因为未正确遍历JSON Extractor生成的所有匹配结果,且未做非空校验,导致只能写入第一条数据或null值。JMeter中JSON Extractor提取多个结果时,会生成带索引的变量(如doggieId_1、doggieId_2),以及doggieId_matchNr变量存储匹配总数,必须基于这两个变量实现批量写入。
正确的BeanShell脚本实现
将以下脚本放入BeanShell PostProcessor中,替换doggieId为你JSON Extractor中设置的引用变量名,并修改CSV文件路径:
import java.io.FileWriter; import java.io.BufferedWriter; // 定义CSV文件路径,可改为绝对路径(如Windows下"C:/test/doggie_ids.csv") String csvPath = "doggie_ids.csv"; // 获取匹配到的结果总数 int totalMatches = Integer.parseInt(vars.get("doggieId_matchNr")); BufferedWriter writer = new BufferedWriter(new FileWriter(csvPath, true)); try { // 遍历所有匹配结果,索引从1开始 for (int i = 1; i <= totalMatches; i++) { String currentId = vars.get("doggieId_" + i); // 过滤空值,仅写入有效数据 if (currentId != null && !currentId.trim().isEmpty()) { writer.write(currentId); writer.newLine(); } } } catch (Exception e) { log.error("写入CSV失败: " + e.getMessage()); } finally { if (writer != null) { writer.close(); } }
关键注意事项
- 变量命名对应:确保
doggieId与你JSON Extractor的「引用名称」完全一致,否则无法获取到变量。 - 文件模式选择:
FileWriter(csvPath, true)中的true表示追加写入,适合多次运行测试累积数据;若需要每次覆盖旧文件,改为false。 - 路径正确性:相对路径基于JMeter启动目录,建议使用绝对路径避免文件找不到的问题。
- 空值过滤:通过
currentId != null && !currentId.trim().isEmpty()过滤无效的null或空字符串,避免写入脏数据。
内容的提问来源于stack exchange,提问作者Rakesh
相关产品推荐
相关产品推荐

