如何在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流水线步骤中主动获取测试运行状态,检测到失败时直接让步骤失败:
先在GitHub仓库的Settings > Secrets and variables > Actions中添加两个密钥:
BROWSERSTACK_USERNAME:你的BrowserStack账号用户名BROWSERSTACK_ACCESS_KEY:你的BrowserStack访问密钥
修改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
相关产品推荐
相关产品推荐

