事件驱动测试自动化

将任何事件转化为自动化质量保障

现代软件系统不是孤立运行的——它们需要响应部署、告警、事件和外部服务变更。您的测试策略也应如此。事件驱动测试自动化将您的QA流程从手动把关转变为智能响应系统,在正确的时间触发正确的测试。

Testany 通过三个集成组件提供完整的事件驱动测试生态系统:

组件方向用途
门卫Webhook 接入接收外部事件,自动触发测试
计划定时调度基于时间的周期性测试执行
Webhook DispatchWebhook 发出将测试结果发送到下游系统

本指南将向您展示如何组合这些组件,构建完全自动化的测试工作流,响应真实世界的事件——无需人工干预。

适合阅读本指南的人员:

  • 将测试集成到 CI/CD 流水线的 DevOps 工程师
  • 设计自动化测试策略的 QA 负责人
  • 构建事件驱动质量系统的平台架构师
  • 实施事件驱动诊断的运维团队

Testany 事件驱动生态系统

理解三大支柱

Testany 的事件驱动架构建立在三个相互补充的组件之上,它们协同工作以创建完整的自动化循环:

1. 门卫(Webhook 接入)

门卫接收来自外部系统的 Webhook 并触发测试流水线执行。当您的 CI/CD 系统部署代码、监控系统检测到异常、或第三方服务报告问题时,门卫会自动启动相应的测试。

主要功能:

  • 接收来自任何支持 HTTP 的系统的 Webhook
  • 触发预定义的测试流水线
  • 处理来自 CI/CD、监控、第三方服务状态页等的事件

2. 计划(定时执行)

计划提供基于时间的测试调度,用于周期性质量检查。用于夜间回归套件、每小时健康检查或每周安全扫描——这些测试应按可预测的节奏运行,不受外部事件影响。

主要功能:

  • Cron 风格调度(每小时、每天、每周、自定义)
  • 每个计划可包含多个测试流水线
  • 一致的执行时间,便于合规和审计

3. Webhook Dispatch(Webhook 发出)

Webhook Dispatch在执行完成后将测试结果发送到下游系统。将结果路由到 Slack 进行团队通知、Jira 创建工单、PagerDuty 进行升级,或任何接受 Webhook 的系统。

主要功能:

  • 可按计划或门卫配置
  • 结构化 JSON 载荷,包含完整执行详情
  • 支持任何兼容 Webhook 的端点

架构概览

下图展示了这些组件如何协同工作:

事件驱动测试架构

事件流程:

  1. 事件源 → 外部系统产生事件(部署、告警、命令、状态变更)
  2. 门卫 → 接收 Webhook 并触发相应的测试流水线
  3. 计划 → 或者,定时计划按定义的间隔触发测试
  4. 测试引擎执行配置的测试流水线
  5. Webhook Dispatch → 将结果发送到下游通知和工单系统

完整事件生命周期

Testany 中的每次测试执行都遵循以下生命周期:

  1. 事件接收门卫接收传入的 Webhook 或计划在预定时间触发
  2. 验证:验证触发器并匹配到配置的测试流水线
  3. 管道触发:匹配的管道进入执行队列
  4. 测试执行测试用例在配置的运行时上运行
  5. 结果处理:编译执行结果并确定状态
  6. 结果分发:配置的 Webhook 接收执行载荷
  7. 下游操作:外部系统处理结果(通知、工单、升级)

Testany 与传统 CI/CD 测试的对比

范式转变

传统 CI/CD 测试遵循"构建后测试"模式:代码提交、构建、然后按顺序测试。虽然对代码变更验证有效,但这种方法有局限性:

  • 触发源有限:测试仅在代码提交时运行
  • 无运维集成:监控告警不会触发诊断测试
  • 结果孤立:测试结果仅停留在 CI 仪表板中
  • 人工事件响应:生产问题需要人工干预才能启动测试

Testany 实现了事件驱动持续测试:测试响应任何系统事件,而不仅仅是代码变更。您的监控告警可以触发诊断测试,第三方依赖状态变更可以触发集成验证,未来还将支持 ChatOps 命令启动测试。

功能对比

能力传统 CI/CDTestany 事件驱动
触发源仅代码提交任何 Webhook 事件
监控集成需要单独工具链通过门卫原生支持
事件响应人工启动测试自动触发诊断
ChatOps依赖插件,配置复杂可通过门卫 Webhook 集成(原生支持规划中)
定时测试Cron 作业,与 CI 分离集成的计划功能
结果分发仅 CI 仪表板任何 Webhook 端点
第三方依赖无标准方法Statuspage Webhook 集成

何时使用各种方法

使用 CI/CD 测试:

  • 构建验证
  • 与代码变更相关的单元和集成测试
  • 合并前质量门禁

使用 Testany 事件驱动测试:

  • 部署后冒烟测试
  • 生产健康监控
  • 告警触发的诊断
  • 定时回归和合规测试
  • 第三方依赖验证
  • 按需 ChatOps 测试(需自行集成,原生支持规划中)

这两种方法是互补的。许多团队使用 CI/CD 进行部署前测试,使用 Testany 进行生产阶段和运维测试。


选择触发策略

决策框架

使用此决策树选择正确的触发机制:

触发策略决策树

何时使用计划(定时):

  • 测试应按一致的间隔运行
  • 没有外部事件启动需求
  • 合规或审计要求定期测试
  • 您需要可预测的执行时间用于报告

何时使用门卫(事件驱动):

  • 测试应响应外部系统事件
  • 时机取决于事件发生的时间
  • 您需要在变更后获得即时反馈
  • 测试作为诊断或验证工具

场景选择矩阵

场景计划门卫原因
夜间回归套件可预测的调度,全面覆盖
部署后冒烟测试每次部署后即时验证
每小时生产健康检查固定间隔的持续监控
告警触发的诊断响应监控异常
ChatOps 按需测试通过 Slack/Teams 命令团队发起(需自行集成,原生支持规划中)
每周安全合规扫描具有一致时间的审计跟踪
第三方服务状态变更依赖变更时验证集成
发布前回归发布窗口前的定时门禁

组合触发器

许多测试策略结合两种方法:

  • 每日计划用于全面回归 + **门卫**用于部署验证
  • 每小时计划用于健康检查 + 门卫用于事件诊断
  • 每周计划用于安全扫描 + 门卫用于漏洞告警

端到端工作流场景

本节介绍五个完整的工作流,展示 Testany 的事件驱动能力。每个工作流包含架构图和配置示例。

场景 1:CI/CD 流水线集成

用例:在代码部署到测试环境或生产环境后,自动触发冒烟测试。

流程:代码推送 → CI/CD 部署 → 门卫 Webhook → Testany 测试 → Webhook Dispatch → 团队通知

CI/CD 集成工作流

触发即忘模式

触发即忘模式是最简单的集成方式:CI/CD 流水线触发测试后立即继续执行,不等待测试结果。测试结果通过 Webhook Dispatch 异步通知团队。

Jenkins 实现:

使用 HTTP Request 插件

Groovy
pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                sh 'deploy.sh'
            }
        }
        stage('Trigger Testany Tests') {
            steps {
                httpRequest(
                    // 国际版: https://<tenant_name>.testany.io/api/v2/gatekeeper/webhook/...
                    // 中国版: https://<tenant_name>.testany.com.cn/api/v2/gatekeeper/webhook/...
                    url: 'https://<YOUR_TENANT>.testany.io/api/v2/gatekeeper/webhook/YOUR_GATEKEEPER_TOKEN',
                    httpMode: 'POST',
                    contentType: 'APPLICATION_JSON',
                    requestBody: '{"source": "jenkins", "environment": "staging"}'
                )
            }
        }
    }
}

GitHub Actions 实现:

YAML
name: Deploy and Test
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Deploy to staging
        run: ./deploy.sh

      - name: Trigger Testany smoke tests
        # 国际版 URL: https://<tenant_name>.testany.io/...
        # 中国版 URL: https://<tenant_name>.testany.com.cn/...
        run: |
          curl -X POST "${{ secrets.TESTANY_BASE_URL }}/api/v2/gatekeeper/webhook/${{ secrets.TESTANY_GATEKEEPER_TOKEN }}" \
               -H "Content-Type: application/json" \
               -d '{"source": "github-actions", "environment": "staging", "commit": "${{ github.sha }}"}'

Webhook Dispatch配置:

在门卫上配置 Webhook Dispatch,以便在测试完成时通知 Slack 团队。有关设置详情,请参阅管理 Testany 通知

其他 CI/CD 平台:

  • GitLab CI:在 .gitlab-ci.yml 中使用 curl
  • Azure DevOps:使用 InvokeRESTAPI 任务
  • CircleCI:在 run 步骤中使用 curl

CI/CD 质量门禁模式

上述示例使用"触发即忘"的方式——流水线触发测试后继续执行,无需等待结果。对于质量门禁场景,流水线需要阻塞直到测试通过/失败,请使用 Testany 的 Webhook 回调机制。

工作原理:

  1. CI/CD 流水线通过门卫触发测试
  2. 流水线在指定端点等待回调
  3. 测试完成时,Testany 的 Webhook Dispatch将结果发送到该端点
  4. 流水线根据测试结果决定继续或失败

Jenkins 实现(Webhook 回调):

Groovy
pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                sh 'deploy.sh'
            }
        }
        stage('Trigger Testany Tests with Quality Gate') {
            steps {
                script {
                    // 使用 Jenkins 的 Webhook 触发器创建唯一的回调 URL
                    def callbackUrl = "${env.JENKINS_URL}generic-webhook-trigger/invoke?token=${env.BUILD_TAG}"

                    // 触发 Testany,在载荷中包含回调 URL
                    httpRequest(
                        url: 'https://<YOUR_TENANT>.testany.io/api/v2/gatekeeper/webhook/YOUR_GATEKEEPER_TOKEN',
                        httpMode: 'POST',
                        contentType: 'APPLICATION_JSON',
                        requestBody: """{"source": "jenkins", "environment": "staging", "callback_id": "${env.BUILD_TAG}"}"""
                    )
                }
            }
        }
        stage('Wait for Test Results') {
            steps {
                // 等待 Testany 的 Webhook 回调
                // 配置 Testany Webhook Dispatch回调到 Jenkins
                timeout(time: 30, unit: 'MINUTES') {
                    waitForWebhook(hookUrl: 'testany-result-hook')
                }
            }
        }
        stage('Evaluate Quality Gate') {
            steps {
                script {
                    // 解析 Webhook 载荷以确定通过/失败
                    // status: 1 = 通过, 2 = 失败, 3 = 阻塞
                    def testStatus = readJSON(text: env.WEBHOOK_PAYLOAD).status
                    if (testStatus != 1) {
                        error("质量门禁失败: 测试状态 = ${testStatus}")
                    }
                    echo "质量门禁通过!"
                }
            }
        }
    }
}

GitHub Actions 实现(Webhook 回调):

对于 GitHub Actions,使用 repository_dispatch 事件和回调端点的组合:

YAML
name: Deploy with Quality Gate
on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Deploy to staging
        run: ./deploy.sh

      - name: Trigger Testany smoke tests
        run: |
          curl -X POST "${{ secrets.TESTANY_BASE_URL }}/api/v2/gatekeeper/webhook/${{ secrets.TESTANY_GATEKEEPER_TOKEN }}" \
               -H "Content-Type: application/json" \
               -d '{"source": "github-actions", "environment": "staging", "run_id": "${{ github.run_id }}"}'

      - name: Wait for test results
        id: wait-for-results
        uses: peter-evans/wait-for-check@v3
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          sha: ${{ github.sha }}
          check-name: 'testany-quality-gate'
          timeout: 1800  # 30 分钟

      - name: Quality Gate Decision
        run: |
          if [ "${{ steps.wait-for-results.outputs.conclusion }}" != "success" ]; then
            echo "质量门禁失败!"
            exit 1
          fi
          echo "质量门禁通过!"

质量门禁的 Webhook Dispatch配置:

配置门卫的 Webhook Dispatch以回调到您的 CI/CD 系统:

  1. 导航到门卫的结果通知部分
  2. 添加指向 CI/CD 回调端点的 Webhook Dispatch:
    • Jenkins:使用 Generic Webhook Trigger 插件 URL
    • GitHub Actions:使用 GitHub App Webhook 或 repository_dispatch 端点
    • GitLab CI:使用流水线触发器 token URL
  3. Webhook 载荷包含 status 字段(1=通过,2=失败,3=阻塞)

载荷状态值:

状态含义质量门禁操作
1通过继续流水线
2失败阻断/失败流水线
3阻塞阻断/失败流水线

有关完整载荷结构,请参阅理解通知 Webhook 的载荷

📝

Testany 使用 Webhook 回调实现同步等待。没有用于查询执行状态的轮询 API——您的 CI/CD 系统必须等待 Webhook 回调,而不是反复检查结果。


场景 2:监控系统集成

用例:当监控检测到异常(错误率上升、延迟增加)时,自动触发诊断测试以帮助快速定位问题。

流程:监控告警 → 门卫 Webhook → 诊断测试 → Webhook Dispatch → 事件管理

监控集成工作流

Splunk 实现:

  1. 在 Splunk 中创建检测异常条件的业务查询。

    Splunk 查询

  2. 将搜索保存为具有适当触发条件的告警。

    Splunk 告警

  3. 配置告警操作使用 Webhook,粘贴您的 Testany 门卫 URL。

    Splunk Webhook

  4. 保存并启用告警。

Webhook Dispatch配置:

配置 Webhook Dispatch将测试结果发送到 PagerDuty 或您的事件管理系统。当测试识别出根本原因时,响应者可立即获得诊断信息。

其他监控平台:


场景 3:定时回归与升级

用例:按每日计划运行全面回归测试,在失败时自动升级。

流程:计划调度 → 回归套件 → Webhook Dispatch → [邮件 + Jira + Slack]

定时回归工作流

实现:

  1. 创建计划,设置每日调度(例如 UTC 02:00)

  2. **添加回归测试流水线**到计划

  3. 配置多个 Webhook Dispatch端点:

    • Slack:团队通知频道,即时可见
    • Jira:为失败自动创建缺陷工单(使用 Jira 的 Webhook 到工单自动化)
    • 邮件:发送摘要给相关方

计划配置:

导航到计划 → 创建计划并配置:

  • 调度:每日 UTC 02:00
  • 管道:选择您的回归测试流水线
  • 通知:为每个目标配置 Webhook Dispatch

有关详细设置说明,请参阅管理测试计划

Webhook 载荷处理:

您的下游系统可以解析 Webhook 载荷以采取适当操作。例如,Jira 自动化规则可以:

  • 如果 status === 2(失败)则创建缺陷
  • 在描述中包含失败的测试用例名称
  • 分配给管道所有者

有关载荷结构详情,请参阅理解通知 Webhook 的载荷


场景 4:ChatOps 驱动的测试(规划中)

ℹ️

此功能目前处于规划阶段。如果您对此功能感兴趣,请联系我们的产品团队提交需求。

愿景:允许团队成员通过 Slack/Teams 命令触发测试,无需登录 Testany。

预期流程:Slack 命令 → 门卫 Webhook → API 测试 → Webhook Dispatch → Slack 结果

当前替代方案

在 ChatOps 原生集成推出之前,您可以通过以下方式实现类似效果:

  1. 使用 Slack Workflow Builder + Webhook

    • 创建 Slack Workflow,配置触发器(如 emoji 反应或快捷方式)
    • 在 Workflow 中添加"发送 Webhook"步骤,调用 Testany 门卫 URL
    • 这样团队成员可以通过简单操作触发测试
  2. 使用外部自动化工具

    • 通过 Zapier、Make (Integromat) 或 n8n 连接 Slack 与 Testany
    • 配置触发条件和 Webhook 调用
  3. 自定义 Bot

    • 开发自定义 Slack/Teams Bot,监听特定命令
    • Bot 收到命令后调用 Testany 门卫 Webhook

场景 5:第三方依赖监控

用例:当第三方服务(支付网关、短信提供商、云存储)出现问题时,自动运行集成测试以评估对您系统的影响。

流程:Statuspage 告警 → 门卫 Webhook → 集成测试 → Webhook Dispatch → Teams 通知

依赖监控工作流

Statuspage 实现:

  1. 创建门卫,配置与第三方服务相关的集成测试流水线

  2. 登录服务的 Statuspage(例如 Stripe Status

  3. 添加 Webhook 订阅者:

    • 进入 SubscribersWebhook SubscribersAdd Subscriber
    • Endpoint URL:粘贴您的门卫 Webhook URL
    • Components:选择要监控的组件
  4. 配置 Webhook Dispatch通过 Microsoft Teams 通知您的团队

常见的第三方服务 Statuspage:

主动影响评估:

当 Stripe 报告性能下降时,您的支付集成测试会自动运行。您的团队可以在客户报告问题之前了解您的系统是否受到影响。


实施指南

设置门卫

  1. 导航到您的工作区 → **门卫**部分
  2. 点击创建门卫并提供名称
  3. 复制生成的 Webhook URL
  4. 添加要触发的测试流水线
  5. 配置 Webhook Dispatch用于结果通知
  6. 记录触发条件供团队参考

有关详细设置说明,请参阅管理测试门卫

配置计划

  1. 导航到您的工作区计划部分
  2. 点击添加计划并提供名称
  3. 配置调度(时间、重复模式)
  4. 选择要执行测试流水线
  5. 配置 Webhook Dispatch用于结果通知
  6. 查看即将执行的时间以验证调度

有关详细设置说明,请参阅管理测试计划

设置 Webhook Dispatch

计划和门卫都支持 Webhook Dispatch配置:

  1. 打开您的计划或门卫详情页面
  2. 导航到结果通知部分
  3. 点击 Webhook Dispatch标签
  4. 点击 + 添加新的 Webhook
  5. 提供:
    • 应用名称(例如 "Slack"、"Jira")
    • 用于识别的 Webhook 名称
    • 从目标系统获取的 Webhook URL
  6. 保存配置

有关详细设置说明,请参阅管理 Testany 通知

有关载荷结构详情,请参阅理解通知 Webhook 的载荷


高级模式

级联测试链

通过使用一个触发器的 Webhook Dispatch激活另一个门卫,连接多个测试阶段:

示例:部署 → 冒烟 → 完整回归

  1. 门卫 A:接收部署 Webhook,运行冒烟测试
  2. Webhook Dispatch A:成功时调用门卫 B
  3. 门卫 B:运行完整回归套件
  4. Webhook Dispatch B:通知团队最终结果

此模式支持渐进式测试,昂贵的回归套件仅在冒烟测试通过后运行。

多环境测试

为不同环境配置多个门卫

  • 门卫-测试环境:触发测试环境测试,使用测试环境凭证
  • 门卫-生产环境:触发生产环境测试,使用生产环境凭证

您的 CI/CD 流水线根据部署目标调用相应的门卫。

条件通知路由

战略性地使用 Webhook Dispatch

  • 所有结果:发送到日志/审计系统
  • 仅失败:发送到 PagerDuty/事件管理
  • 仅成功:发送到部署自动化以继续下一阶段

在 Webhook Dispatch设置中按接收者配置通知偏好。


最佳实践

门卫命名规范

使用描述性名称,指示触发源和测试目的:

  • cicd-staging-smoke - 由 CI/CD 触发的测试环境冒烟测试
  • monitor-api-diagnostic - 由监控触发的 API 诊断
  • statuspage-payment-check - 由第三方状态页触发的支付检查

计划调度策略

  • 非高峰时段:在低流量时段安排资源密集型测试
  • 时区:在为人工审查安排时考虑团队位置
  • 错开执行:避免同时安排多个重型计划
  • 缓冲时间:在计划之间留出足够的完成时间

Webhook 可靠性

  • 验证 URL:在生产使用前测试 Webhook 端点
  • 监控投递:检查 Webhook Dispatch日志是否有失败
  • 实现重试:Testany 对失败的 Webhook 重试 3 次
  • 处理超时:Webhook 在 15 秒后超时——确保端点快速响应

文档和维护

  • 记录触发条件:记录每个门卫由什么事件触发
  • 定期审查:每季度审计计划和门卫
  • 更新管道:保持触发的管道与当前测试需求一致
  • 归档未使用的:删除不再需要的门卫/计划

故障排除

常见问题

问题可能原因解决方案
门卫未触发Webhook URL 无效验证 URL 是否正确复制
防火墙阻止检查网络规则是否允许 Testany IP
计划未执行调度错误验证时区和 cron 表达式
Webhook Dispatch失败端点 URL 无效使用手动 POST 请求测试 URL
端点超时确保端点在 15 秒内响应
SSL 证书问题验证证书链是否有效

调试步骤

  1. 检查门卫/计划日志:在 Testany 中查看执行历史
  2. 手动测试 Webhook:使用 curl 验证端点连通性
  3. 审查载荷格式:确保下游系统正确解析 JSON
  4. 检查权限:验证门卫/计划所有者具有所需访问权限

快速参考

关键 URL

资源URL 模式
门卫 Webhook(国际版)https://<tenant_name>.testany.io/api/v2/gatekeeper/webhook/{TOKEN}
门卫 Webhook(中国版)https://<tenant_name>.testany.com.cn/api/v2/gatekeeper/webhook/{TOKEN}
📝

请将 <tenant_name> 替换为您的租户名称,{TOKEN} 替换为门卫 Webhook Token(hook token),不是门卫密钥。

相关文档

总结

Testany 的事件驱动测试生态系统结合了**门卫**(Webhook 接入)、计划(定时)和 Webhook Dispatch(Webhook 发出),创建完全自动化的测试工作流。这种方法将测试从手动把关转变为智能系统:

  • 响应真实世界的事件,而不仅仅是代码变更
  • 与您现有的 DevOps 工具链集成
  • 将结果分发到任何下游系统
  • 无需人工干预持续运行

从单个集成开始——CI/CD 部署后测试通常是最简单的第一步——随着您看到自动化、响应式质量保障的好处,逐步扩展您的事件驱动测试策略。

还有疑问?

我们的团队随时为您服务。欢迎联系我们,我们会尽快回复。