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

如何在BrowserStack UI测试失败时终止GitHub流水线及Gradle任务

实现BrowserStack测试失败时终止GitHub流水线

方法一:通过Gradle任务强制终止并返回失败状态

修改对应模块的build.gradle文件,为executeDebugTestsOnBrowserstack任务添加后置逻辑,解析本地生成的测试报告,当检测到失败用例时主动抛出异常,让Gradle任务返回非零退出码,触发GitHub流水线失败:

tasks.named('executeDebugTestsOnBrowserstack') {
    doLast {
        // 测试报告路径,根据你的项目结构/构建配置调整
        def testReportDir = file("$buildDir/reports/androidTests/connected/flavors/debug")
        def failedCount = 0

        // 遍历所有XML格式的测试报告文件
        testReportDir.eachFileRecurse(groovy.io.FileType.FILES) { file ->
            if (file.name.endsWith('.xml')) {
                def reportXml = new XmlSlurper().parse(file)
                failedCount += reportXml.testsuite.failures.toInteger() + reportXml.testsuite.errors.toInteger()
            }
        }

        if (failedCount > 0) {
            throw new GradleException("BrowserStack UI测试失败,共 $failedCount 个失败/错误用例")
        }
    }
}

配置完成后,只要测试有失败,Gradle任务就会终止并返回失败状态,GitHub流水线会自动识别并终止流程。

方法二:在GitHub Actions中主动检查BrowserStack测试结果

通过BrowserStack的App Automate API在GitHub流水线步骤中主动获取测试运行状态,检测到失败时直接让步骤失败:

  1. 先在GitHub仓库的Settings > Secrets and variables > Actions中添加两个密钥:

    • BROWSERSTACK_USERNAME:你的BrowserStack账号用户名
    • BROWSERSTACK_ACCESS_KEY:你的BrowserStack访问密钥
  2. 修改GitHub Actions工作流文件(例如.github/workflows/browserstack-test.yml),添加结果检查步骤:

jobs:
  run-browserstack-tests:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取代码
        uses: actions/checkout@v4

      - name: 配置JDK 17
        uses: actions/setup-java@v4
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: 运行BrowserStack UI测试
        run: ./gradlew executeDebugTestsOnBrowserstack
        env:
          BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
          BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}

      - name: 检查BrowserStack测试结果
        run: |
          # 获取最新一次测试构建ID
          BUILD_ID=$(curl -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
            "https://api.browserstack.com/app-automate/espresso/v2/builds" | jq -r '.[0].id')

          # 获取该构建的详细测试结果
          BUILD_RESULTS=$(curl -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
            "https://api.browserstack.com/app-automate/espresso/v2/builds/$BUILD_ID")

          # 提取失败用例数量
          FAILED_NUM=$(echo "$BUILD_RESULTS" | jq -r '.status.failures')

          if [ "$FAILED_NUM" -gt 0 ]; then
            echo "::error::BrowserStack测试失败,共 $FAILED_NUM 个失败用例"
            exit 1
          fi
        shell: bash

两种方法对比

  • 方法一无需额外API调用,直接基于本地测试报告处理,适合简单场景;
  • 方法二直接从BrowserStack云端获取数据,能获取更完整的测试信息,适合需要详细日志或跨环境同步的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:01:39