JMeter开启Generate parent sampler后事务控制器报错如何在Grafana展示
解决JMeter父事务控制器同步子请求错误并展示到Grafana的方案
1. 配置JMeter端同步子请求错误到父事务控制器
在你勾选了「Generate parent sampler」的事务控制器下,直接新增一个JSR223 PostProcessor,语言选择Groovy,填入以下代码:
// 获取当前父事务采样器实例 def parentSampler = ctx.getCurrentSampler() // 获取该事务下所有子请求的执行结果 def subSamplers = ctx.getPreviousResults() def errorMsg = new StringBuilder() def hasSubError = false subSamplers.each { subRes -> if (!subRes.isSuccessful()) { hasSubError = true // 可按需拼接需要的错误字段,比如请求URL、响应体内容等 errorMsg.append("子请求[${subRes.getSampleLabel()}]报错:响应码=${subRes.getResponseCode()}, 错误信息=${subRes.getResponseMessage()}; ") // 若只需保留第一个报错子请求的信息,解开下面一行注释即可 // break } } if (hasSubError) { // 将拼接后的错误信息赋值给父事务的响应消息字段 parentSampler.setResponseMessage(errorMsg.toString()) parentSampler.setSuccessful(false) // 如需将错误信息同步到父事务的响应体,解开下面一行注释 // parentSampler.setResponseData(errorMsg.toString(), "UTF-8") }
注意事项:
- 该后置处理器必须直接放在事务控制器的子级,不能放在任意子请求的下级,才能捕获到所有子请求的执行结果
- 必须选择Groovy作为执行语言,避免BeanShell的性能问题影响压测结果
- 配置完成后可以先用查看结果树验证:触发子请求报错后,父事务控制器的响应消息字段会显示拼接后的子请求错误信息,不再显示None或采样器数量
2. 配置后端监听器上报事务错误信息到存储介质
通常压测对接Grafana会用InfluxDB作为中间存储,按以下要求配置JMeter的Backend Listener:
- 若使用官方默认的
InfluxDBBackendListenerClient,确保参数sendAllSamples设为true、summaryOnly设为false,否则不会上报父事务采样器的responseMessage等详细字段 - 若使用自定义后端监听器,确认已将父采样器的
responseMessage、responseCode字段纳入上报字段列表
3. Grafana面板配置展示错误信息
- 编辑你用来展示压测错误的面板,查询语句新增对
responseMessage、responseCode字段的提取 - 以InfluxDB数据源为例,查询失败事务错误信息的参考语句:
SELECT "transaction", "responseCode", "responseMessage", "time" FROM "jmeter" WHERE "error" = 'true' AND "samplerType" = 'transaction' AND $timeFilter ORDER BY time DESC
- 可新增表格类型面板,将上述查询结果映射为「事务名称」「响应码」「错误信息」「发生时间」列,即可直观展示所有失败事务的具体报错原因
内容的提问来源于stack exchange,提问作者Raghav
相关产品推荐
相关产品推荐

