如何基于JMeter汇总报告总错误率计算区间并输出日志?
可行解决方案建议
方案一:JMeter内置JSR223脚本直接处理
在JMeter测试计划中添加JSR223 Listener,使用Groovy脚本直接获取汇总报告的总错误率,完成区间判断并输出日志:
// 获取汇总报告的总错误率(需确保测试计划中有对应名称的Summary Report元件) def summaryReport = ctx.getThreadGroup().getListeners().find { it.getName() == "Summary Report" } def errorPercent = summaryReport.getErrorPercentage() // 区间判断并输出日志 if (errorPercent >= 10 && errorPercent <= 20) { log.info("【错误率告警】当前总错误率为${errorPercent}%,处于10%-20%区间") } else if (errorPercent >= 21 && errorPercent <= 40) { log.info("【错误率告警】当前总错误率为${errorPercent}%,处于21%-40%区间") } else if (errorPercent >= 41 && errorPercent <= 60) { log.info("【错误率告警】当前总错误率为${errorPercent}%,处于41%-60%区间") } else if (errorPercent >= 61) { log.info("【错误率严重告警】当前总错误率为${errorPercent}%,已超过60%") }
注意:如果你的汇总报告元件名称不是"Summary Report",需要替换为实际名称;Groovy脚本性能优于其他脚本语言,建议优先使用。
方案二:解析JMeter生成的CSV报告(Python脚本)
先让JMeter执行测试时生成CSV格式的汇总报告(通过-l test_results.csv参数或在Summary Report中配置保存路径),再用Python脚本解析判断:
import csv # 读取JMeter的CSV报告文件 with open('test_results.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) # 获取最后一行的汇总数据(总错误率在"Error %"列) for row in reader: pass error_percent = float(row['Error %'].replace('%', '')) # 区间判断输出 if 10 <= error_percent <= 20: print(f"[日志] 总错误率{error_percent}%,处于10%-20%区间") elif 21 <= error_percent <= 40: print(f"[日志] 总错误率{error_percent}%,处于21%-40%区间") elif 41 <= error_percent <= 60: print(f"[日志] 总错误率{error_percent}%,处于41%-60%区间") elif error_percent >= 61: print(f"[严重日志] 总错误率{error_percent}%,超过60%阈值")
方案三:Jenkins Pipeline中集成判断
如果是在Jenkins中执行测试,可以直接在Pipeline脚本里解析JMeter报告,完成判断:
pipeline { agent any stages { stage('Run JMeter Test') { steps { sh 'jmeter -n -t test_plan.jmx -l test_results.csv' } } stage('Check Error Rate') { steps { script { // 读取CSV最后一行的错误率,列索引根据实际CSV结构调整 def errorPercent = sh( script: 'tail -1 test_results.csv | awk -F, \'{print $8}\' | sed \'s/%//\'', returnStdout: true ).trim().toFloat() // 判断输出 if (errorPercent >=10 && errorPercent <=20) { echo "【日志】总错误率${errorPercent}%,10%-20%区间" } else if (errorPercent >=21 && errorPercent <=40) { echo "【日志】总错误率${errorPercent}%,21%-40%区间" } else if (errorPercent >=41 && errorPercent <=60) { echo "【日志】总错误率${errorPercent}%,41%-60%区间" } else if (errorPercent >=61) { echo "【严重日志】总错误率${errorPercent}%,超过60%" } } } } } }
注意:上述Pipeline脚本中,
awk -F, '{print $8}'的列索引需要根据你的CSV报告列顺序调整,确保对应到"Error %"列。
内容的提问来源于stack exchange,提问作者Tomas Gotes
相关产品推荐
相关产品推荐

