如何在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计算错误百分比:
- 打开JMeter安装目录下的
user.properties文件,添加配置:sample_variables=status_fail,duration_fail,json_fail - 在之前的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') - 使用汇总报告导出测试结果CSV,之后在Excel中用
COUNTIF函数统计各断言的失败次数,再除以总请求数得到错误百分比。
内容的提问来源于stack exchange,提问作者amar2108
相关产品推荐
相关产品推荐

