Gatling分布式压测失败断言的Slack/Teams通知方案咨询
开源版Gatling 3.9.5分布式测试断言失败告警实现方案
方案一:解析Gatling官方报告触发告警
Gatling 3.x默认会生成JSON格式的统计报告(位于results/<run-id>/jsons目录),可基于此实现断言失败检测与告警,完全依赖官方标准输出,无自定义监听器的兼容性问题:
执行reportsOnly生成完整统计数据
运行gatling.sh -r <run-id> -ro(Java版对应gatling.bat或自定义启动命令),确保生成JSON格式的统计文件,该文件包含所有请求的断言结果、失败率等核心指标。编写断言失败检测脚本
用Shell/Python解析JSON统计文件,提取断言失败相关指标。例如Shell脚本片段:# 读取JSON中的断言失败计数 FAILURE_COUNT=$(jq '.assertions[] | select(.failureCount > 0) | .failureCount' results/<run-id>/jsons/stats.json) if [ -n "$FAILURE_COUNT" ] && [ "$FAILURE_COUNT" -gt 0 ]; then # 触发Slack通知示例 curl -X POST -H "Content-Type: application/json" \ -d '{"text": "Gatling负载测试断言失败,失败次数:'"$FAILURE_COUNT"',运行ID:<run-id>"}' \ https://hooks.slack.com/services/XXX/XXX/XXX fiK8s环境适配
- 两个测试Job共享同一个PVC,确保第一步生成的日志/统计文件能被第二步访问。
- 在第二步Job的容器启动命令中,先执行
reportsOnly生成报告,再运行上述检测脚本。
方案二:测试代码内嵌入断言失败收集逻辑
直接在Gatling测试场景中捕获断言失败事件,落地后触发告警,无需依赖报告生成环节:
在Scenario中添加断言失败处理
使用Gatling官方APIdoIfFailure捕获断言失败,将失败信息写入共享存储的日志文件:import io.gatling.javaapi.core.*; import io.gatling.javaapi.http.*; import java.io.FileWriter; import java.io.IOException; public class TestSimulation extends Simulation { private static final String FAILURE_LOG = "/shared-volume/failures.log"; HttpProtocolBuilder http = Http.http.baseUrl("https://your-target-api.com"); ScenarioBuilder scn = scenario("TestScenario") .exec( http("request-1") .get("/endpoint") .check(status().is(200)) .doIfFailure(session -> { try (FileWriter writer = new FileWriter(FAILURE_LOG, true)) { writer.write("Request failed at: " + session.startTimestamp() + ", URL: /endpoint\n"); } catch (IOException e) { e.printStackTrace(); } return session; }) ); { setUp(scn.injectOpen(rampUsers(100).during(60))).protocols(http); } }K8s环境下的告警触发
- 第一步
no-reports运行时,挂载PVC到/shared-volume,确保所有分布式节点的失败日志写入同一文件。 - 第二步任务(或单独加一个告警Job)检查
failures.log是否存在内容,若存在则调用Slack/Teams Webhook发送通知。
- 第一步
关键注意事项
- 分布式场景下,必须确保所有节点的结果文件写入共享存储(PVC),避免遗漏任一节点的断言失败数据。
- Slack/Teams Webhook地址需提前在对应平台创建,确保权限正常。
- 可将告警脚本封装为K8s Job的Init Container或Sidecar,与测试任务解耦。
内容的提问来源于stack exchange,提问作者RookieDev
相关产品推荐
相关产品推荐

