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

如何在JMeter中按断言类型拆分导出CSV的错误百分比?

可以实现,具体方案如下

步骤1:为每个断言设置唯一名称

给三个断言分别命名,确保能明确区分彼此:

  • 状态码200断言
  • 响应时长≤3秒断言
  • JSONPath结果为OK断言

步骤2:用JSR223后置处理器捕获断言失败状态

在HTTP请求节点下添加JSR223后置处理器,选择Groovy作为脚本语言,编写代码统计各断言的失败次数:

// 捕获状态码断言结果
def statusAssert = ctx.getPreviousResult().getAssertionResults().find { it.getName() == '状态码200断言' }
if (statusAssert && statusAssert.isFailure()) {
    vars.put('status_fail', (vars.get('status_fail') ?: '0') as int + 1 as String)
}

// 捕获响应时长断言结果
def durationAssert = ctx.getPreviousResult().getAssertionResults().find { it.getName() == '响应时长≤3秒断言' }
if (durationAssert && durationAssert.isFailure()) {
    vars.put('duration_fail', (vars.get('duration_fail') ?: '0') as int + 1 as String)
}

// 捕获JSONPath断言结果
def jsonAssert = ctx.getPreviousResult().getAssertionResults().find { it.getName() == 'JSONPath结果为OK断言' }
if (jsonAssert && jsonAssert.isFailure()) {
    vars.put('json_fail', (vars.get('json_fail') ?: '0') as int + 1 as String)
}

// 统计总请求数
vars.put('total_req', (vars.get('total_req') ?: '0') as int + 1 as String)

步骤3:生成按断言拆分的错误百分比CSV

在测试计划级别添加JSR223监听器,设置作用域为"Test Plan",编写代码在测试全部结束后计算错误百分比并写入CSV文件:

// 仅在测试完全结束时执行统计
if (ctx.getThreadGroup().isDone()) {
    def total = vars.get('total_req') as int
    def statusFail = vars.get('status_fail') as int ?: 0
    def durationFail = vars.get('duration_fail') as int ?: 0
    def jsonFail = vars.get('json_fail') as int ?: 0

    // 计算错误百分比(保留两位小数)
    def statusErrorPct = total > 0 ? String.format('%.2f', (statusFail / total) * 100) : '0.00'
    def durationErrorPct = total > 0 ? String.format('%.2f', (durationFail / total) * 100) : '0.00'
    def jsonErrorPct = total > 0 ? String.format('%.2f', (jsonFail / total) * 100) : '0.00'

    // 写入CSV文件
    def csvFile = new File('assertion_error_stats.csv')
    def writer = csvFile.newWriter(false)
    writer.writeLine("总请求数,状态码断言错误百分比(%),响应时长断言错误百分比(%),JSONPath断言错误百分比(%)")
    writer.writeLine("${total},${statusErrorPct},${durationErrorPct},${jsonErrorPct}")
    writer.close()
}

替代方案:通过样本变量导出后计算

如果不想编写统计脚本,也可以通过配置样本变量导出原始失败状态,后续用Excel计算错误百分比:

  1. 打开JMeter安装目录下的user.properties文件,添加配置:
    sample_variables=status_fail,duration_fail,json_fail
    
  2. 在之前的JSR223后置处理器中补充变量赋值逻辑:
    vars.put('status_fail', statusAssert?.isFailure() ? '1' : '0')
    vars.put('duration_fail', durationAssert?.isFailure() ? '1' : '0')
    vars.put('json_fail', jsonAssert?.isFailure() ? '1' : '0')
    
  3. 使用汇总报告导出测试结果CSV,之后在Excel中用COUNTIF函数统计各断言的失败次数,再除以总请求数得到错误百分比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 04:52:07