You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:47:04