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

Flutter集成测试:Patrol+GitHub Actions+Firebase Test Lab配置求助

解决Flutter集成测试CI流水线(Patrol + Firebase Test Lab)问题

1. 修复Patrol构建测试APK的问题

先清理工作流冗余问题

  • 删除setup job中重复的Install Google Cloud SDK步骤;补全或删除空的Set Git user info步骤(补全示例:git config --global user.name "GitHub Actions" && git config --global user.email "actions@github.com")。
  • 确保Patrol CLI版本与项目依赖的patrol包版本一致,避免版本兼容问题;将Patrol的可执行路径加入环境变量,防止命令找不到。

修正Patrol构建流程

- name: Install Patrol
  run: flutter pub global activate patrol --version 2.3.0 # 替换为项目pubspec.yaml中指定的patrol版本
- name: Add Patrol to PATH
  run: echo "$HOME/.pub-cache/bin" >> $GITHUB_PATH
- name: Check Patrol Configuration
  run: patrol doctor
- name: Build Android App and Test APK with Patrol
  run: patrol build android -t integration_test/example_test.dart --flavor production --debug
- name: Verify Build Outputs
  run: |
    ls -la build/app/outputs/apk/production/
    ls -la build/app/outputs/apk/production/androidTest/
  • 注意:若使用production flavor,构建产物路径会对应变更,需后续Firebase命令中使用正确的APK路径,而非默认的debug路径。

2. Firebase Test Lab运行测试的最优配置

Android端优化

  • 修正APK路径:使用Patrol构建的对应flavor产物,替换原Firebase命令中的路径为build/app/outputs/apk/production/production-debug.apk和build/app/outputs/apk/production/androidTest/production-debug-androidTest.apk。
  • 调整测试参数:移除--use-orchestrator(Patrol不兼容该参数),添加--direct-instrumentation和启动等待环境变量:
gcloud firebase test android run \
  --type instrumentation \
  --app build/app/outputs/apk/production/production-debug.apk \
  --test build/app/outputs/apk/production/androidTest/production-debug-androidTest.apk \
  --device model="pixel6", version="33", locale=en, orientation=portrait \
  --timeout 15m \
  --results-bucket="patrol_runs" \
  --direct-instrumentation \
  --environment-variables clearPackageData=true,PATROL_WAIT=2000

iOS端优化

  • 动态获取测试文件路径,避免硬编码版本号导致失效:
- name: Package iOS Tests
  run: |
    XCTESTRUN_FILE=$(find build/ios_integ/Build/Products -name "*.xctestrun" | head -1)
    pushd $(dirname "$XCTESTRUN_FILE")
    zip -r ios_tests.zip "$(basename "$XCTESTRUN_FILE")"
    popd
  • 选择主流iOS设备和版本,比如model=iphone14, version=17.0,提升测试兼容性。

3. Flutter CI/CD流水线最佳实践

  • 缓存依赖加速构建:添加缓存步骤减少重复安装时间
    # Flutter pub缓存
    - name: Cache Flutter Dependencies
      uses: actions/cache@v3
      with:
        path: |
          ~/.pub-cache
          .dart_tool
        key: ${{ runner.os }}-flutter-${{ hashFiles('pubspec.lock') }}
        restore-keys: |
          ${{ runner.os }}-flutter-
    # Android Gradle缓存
    - name: Cache Gradle Resources
      uses: actions/cache@v3
      with:
        path: |
          ~/.gradle/wrapper
          ~/.gradle/caches
        key: ${{ runner.os }}-gradle-${{ hashFiles('android/gradle/wrapper/gradle-wrapper.properties', 'android/build.gradle') }}
    
  • 拆分职责并行执行:将部署步骤拆分为单独job,依赖Android/iOS测试通过后再执行;Android和iOS测试保持并行,缩短总耗时。
  • 安全处理敏感信息:仅获取流水线必需的GCP Secrets,避免批量导出所有密钥;用::add-mask::对每个真实敏感值进行掩码,而非固定字符串。
  • 固定工具版本:使用google-github-actions/setup-gcloud@v1代替手动安装GCloud SDK,固定Flutter、Patrol等工具版本,避免自动更新引发的兼容性问题。
  • 快速失败反馈:设置continue-on-error: false,确保步骤失败立即终止;启用GitHub测试报告功能,将Firebase测试结果同步至GitHub,方便快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:07:06