Flutter集成测试:Patrol+GitHub Actions+Firebase Test Lab配置求助
解决Flutter集成测试CI流水线(Patrol + Firebase Test Lab)问题
1. 修复Patrol构建测试APK的问题
先清理工作流冗余问题
- 删除
setupjob中重复的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/
- 注意:若使用
productionflavor,构建产物路径会对应变更,需后续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
相关产品推荐
相关产品推荐

