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

Bitbucket Pipeline配置Flutter集成测试及运行失败排查

Bitbucket Pipeline执行Flutter集成测试失败问题

问题描述

本地启动模拟器执行flutter drive --driver=test_driver/integration_test.dart --target=test_driver/run_all_test.dart时,Flutter集成测试可正常运行,但在Bitbucket Pipeline中执行相同命令却报错,尝试添加build apk步骤后问题仍未解决。

相关配置与代码

bitbucket-pipelines.yaml配置

definitions:
  services:
    docker:
      memory: 4096
  steps:
  - step: &generate_code
      name: 'generate_code'
      script:
        - flutter clean
        - flutter pub get
        - flutter pub run build_runner build
        - bash <(curl -s https://raw.githubusercontent.com/objectbox/objectbox-dart/main/install.sh)
        - flutter test
        - git clone git@bitbucket.org:connfair/${CI_PROJECT_NAMESPACE}.git .signing
        - flutter drive \
          --driver=test_driver/integration_test.dart \
          --target=test_driver/run_all_test.dart
      artifacts:
        - lib/**.g.dart
        - lib/**.i18n.dart

项目文件夹结构

项目文件夹结构

test_driver/integration_test.dart代码

Future<void> main() => integrationDriver();

test_driver/run_all_test.dart代码

void main() {
  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
  initAppWithMockConfig(config: MockConfig1());
  loginFailureTest();
  loginSuccessTest();
  eventSearchTest(); 
  eventStatisticsAuthorizationTest();
  ticketScannerAuthorizationTest();
}

示例测试代码

void eventSearchTest() {
  testWidgets("选择事件搜索代理中的事件后,事件名称会在事件仪表板和应用栏中各显示一次。",
          (WidgetTester tester) async {

        await tester.pumpWidget(
          wrapWithUser(wrapWithProviders(wrapWithApp(MainframeContent()))),
        );
        await tester.pumpAndSettle();

        await selectEventFromDashboard(tester, getValidEventId());

        expect(find.text(getValidEventName()), findsWidgets);
      });
}

报错信息

报错截图

解决方案

核心问题是Bitbucket Pipeline的默认环境没有运行Flutter集成测试所需的Android模拟器或设备,以下是具体修复步骤:

  • 切换到带Flutter和Android环境的镜像
    把Pipeline的运行镜像换成预装有Flutter、Android SDK及相关组件的镜像,比如cirrusci/flutter:latest。修改bitbucket-pipelines.yaml的step配置,添加image字段:

    - step: &generate_code
        name: 'generate_code'
        image: cirrusci/flutter:latest
        script:
          # 原有脚本内容
    
  • 在Pipeline中启动Android模拟器
    在执行flutter drive前添加启动模拟器的脚本步骤:

    # 安装Android系统镜像
    - sdkmanager "system-images;android-33;google_apis;x86_64"
    # 创建AVD模拟器
    - echo "no" | avdmanager create avd -n test_avd -k "system-images;android-33;google_apis;x86_64"
    # 后台启动模拟器(无音频、无窗口)
    - emulator -avd test_avd -no-audio -no-window &
    # 等待模拟器完全启动完成
    - adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;'
    
  • 指定模拟器执行测试
    修改flutter drive命令,指定使用刚启动的模拟器(默认端口为emulator-5554):

    - flutter drive \
      --driver=test_driver/integration_test.dart \
      --target=test_driver/run_all_test.dart \
      -d emulator-5554
    
  • 调整内存配置
    模拟器启动需要足够内存,建议把Docker服务的内存配置调高到8192MB,同时启动模拟器时可指定内存参数:

    - emulator -avd test_avd -no-audio -no-window -memory 2048 &
    
  • 确保Android组件完整
    可在脚本中添加步骤,安装必要的Android组件:

    - sdkmanager --install "platform-tools" "platforms;android-33" "build-tools;33.0.2"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:35:18