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

JMeter汇总报告自定义问题:添加response Body列并导出含异常的CSV

JMeter自定义报告问题解决办法

问题1:能不能把结果树里的Response Body加到汇总报告里?

默认的JMeter汇总报告是用来统计请求聚合数据的(比如平均响应时间、错误率、吞吐量这些),不会保存单个请求的具体响应内容(比如Response Body)。如果要在报告里加Response Body,得自己写自定义监听器实现:

  • 用JSR223 Listener(建议选Groovy语言,性能比其他脚本语言好),写代码抓每个请求的Response Body,再结合聚合逻辑生成带这个字段的自定义报告。大概思路是:
    1. 先创建CSV文件,写好表头(比如Label、Average、Response Body、Error这些)
    2. 把同一个Label下的所有请求响应时间收集起来,算平均值
    3. 抓Response Body和错误信息,测试跑完后把聚合结果加响应内容写入CSV

注意:硬往默认汇总报告里加Response Body会破坏它“统计整体数据”的定位,不如直接做一份包含单条请求详情的自定义报告更合适。

问题2:生成包含Average、Label、Error字段的简易报告,出错时把完整异常信息写入CSV

用JSR223 Listener加Groovy代码就能实现,步骤如下:

  1. 给测试计划加一个JSR223 Listener,设置语言为Groovy
  2. 在脚本框里写下面的代码(可以根据自己的需求改):
// 测试开始时初始化CSV文件,只执行一次
if (!vars.get("csvInitialized")) {
    def csvFile = new File("test_report.csv")
    csvFile.write("Label,Average,Error,Exception_Details\n")
    vars.put("csvInitialized", "true")
    // 存每个Label对应的所有响应时间
    props.put("responseTimes", new HashMap<String, List<Long>>())
}

// 获取当前请求的信息
def label = sampler.getLabel()
def responseTime = ctx.getPreviousResult().getTime()
def isError = ctx.getPreviousResult().isSuccessful() ? "No" : "Yes"
def exceptionDetails = isError == "Yes" ? ctx.getPreviousResult().getResponseMessage() + "\n" + ctx.getPreviousResult().getResponseDataAsString() : ""

// 把当前响应时间加到对应Label的列表里
def responseTimes = props.get("responseTimes")
if (!responseTimes.containsKey(label)) {
    responseTimes.put(label, new ArrayList<Long>())
}
responseTimes.get(label).add(responseTime)

// 测试结束时计算平均值并写入CSV
if (ctx.getThreadNum() == 0 && ctx.getPreviousResult().isTestEnded()) {
    def csvFile = new File("test_report.csv")
    responseTimes.each { entry ->
        def labelKey = entry.key
        def times = entry.value
        def average = times.sum() / times.size()
        // 判断该Label下是否有错误请求
        def errorStatus = times.any { t -> !ctx.getPreviousResult().isSuccessful() } ? "Yes" : "No"
        def exception = errorStatus == "Yes" ? exceptionDetails : ""
        csvFile.append("${labelKey},${average},${errorStatus},${exception}\n")
    }
}
  1. 跑测试后,指定路径下会生成test_report.csv,直接导入Excel就行。

补充说明:

  • 代码会自动把同一个Label的请求响应时间汇总,算出平均值(Average)
  • 请求出错时,会把完整的响应消息和响应内容作为异常详情写到CSV里
  • 如果不想要聚合平均值,要单个请求的响应时间,改改代码逻辑,直接写每条请求的响应时间就行

内容的提问来源于stack exchange,提问作者Luca

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:43:19