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

Gatling分布式压测失败断言的Slack/Teams通知方案咨询

开源版Gatling 3.9.5分布式测试断言失败告警实现方案

方案一:解析Gatling官方报告触发告警

Gatling 3.x默认会生成JSON格式的统计报告(位于results/<run-id>/jsons目录),可基于此实现断言失败检测与告警,完全依赖官方标准输出,无自定义监听器的兼容性问题:

  1. 执行reportsOnly生成完整统计数据
    运行gatling.sh -r <run-id> -ro(Java版对应gatling.bat或自定义启动命令),确保生成JSON格式的统计文件,该文件包含所有请求的断言结果、失败率等核心指标。

  2. 编写断言失败检测脚本
    用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
    fi
    
  3. K8s环境适配

    • 两个测试Job共享同一个PVC,确保第一步生成的日志/统计文件能被第二步访问。
    • 在第二步Job的容器启动命令中,先执行reportsOnly生成报告,再运行上述检测脚本。

方案二:测试代码内嵌入断言失败收集逻辑

直接在Gatling测试场景中捕获断言失败事件,落地后触发告警,无需依赖报告生成环节:

  1. 在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);
        }
    }
    
  2. K8s环境下的告警触发

    • 第一步no-reports运行时,挂载PVC到/shared-volume,确保所有分布式节点的失败日志写入同一文件。
    • 第二步任务(或单独加一个告警Job)检查failures.log是否存在内容,若存在则调用Slack/Teams Webhook发送通知。

关键注意事项

  • 分布式场景下,必须确保所有节点的结果文件写入共享存储(PVC),避免遗漏任一节点的断言失败数据。
  • Slack/Teams Webhook地址需提前在对应平台创建,确保权限正常。
  • 可将告警脚本封装为K8s Job的Init Container或Sidecar,与测试任务解耦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:12:49