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

基于Patrol的Flutter三端外卖订单全流程端到端集成测试方案咨询

基于Patrol的三端外卖全流程端到端集成测试方案

一、环境与依赖配置

先确保三个Flutter应用都完成Patrol基础集成:

  • 在每个App的pubspec.yaml中添加依赖:
    dev_dependencies:
      patrol: ^3.0.0
      flutter_test:
        sdk: flutter
    
  • 配置测试入口:
    • Android:在android/app/src/androidTest/java/com/your/package/下创建MainActivityTest.java,初始化Patrol测试环境。
    • iOS:在ios/RunnerTests/RunnerTests.m中配置Patrol测试入口。
  • 确保测试设备(模拟器/真机)已开启开发者模式,且三个App已安装到测试设备(或测试时自动安装)。

二、测试架构设计

采用模块化流程拆分思路,把全流程拆为独立操作模块,便于复用和维护:

  • 商品创建模块(先锋端)
  • 订单下单模块(顾客端)
  • 先锋端接单模块
  • 司机端配送完成模块
  • 多端状态校验模块

所有模块通过Patrol的PatrolTester统一控制,实现跨App流程串联。

三、全流程测试代码示例

创建integration_test/full_order_flow_test.dart文件,编写完整测试用例:

import 'package:patrol/patrol.dart';
import 'package:flutter_test/flutter_test.dart';

void main() {
  patrolTest(
    '完整外卖订单交付全流程测试',
    ($) async {
      // -------------------------- 步骤1:先锋端创建商品 --------------------------
      await $.launchApp(appId: 'com.your.pioneer.app');
      // 点击创建商品入口
      await $.tap(find.byKey(const Key('create_product_btn')));
      // 输入商品信息
      await $.enterText(find.byKey(const Key('product_name_input')), '测试汉堡');
      await $.enterText(find.byKey(const Key('product_price_input')), '29.9');
      await $.tap(find.byKey(const Key('save_product_btn')));
      // 等待商品同步完成
      await $.waitFor(find.text('商品创建成功'));

      // -------------------------- 步骤2:顾客端下单 --------------------------
      await $.launchApp(appId: 'com.your.customer.app');
      // 搜索目标商品并加入购物车
      await $.enterText(find.byKey(const Key('search_input')), '测试汉堡');
      await $.tap(find.byKey(const Key('add_to_cart_btn')));
      // 提交订单并模拟支付成功
      await $.tap(find.byKey(const Key('checkout_btn')));
      await $.tap(find.byKey(const Key('test_pay_btn')));
      await $.waitFor(find.text('订单提交成功'));

      // -------------------------- 步骤3:先锋端接单 --------------------------
      await $.switchToApp(appId: 'com.your.pioneer.app');
      // 刷新订单列表并接单
      await $.tap(find.byKey(const Key('refresh_orders_btn')));
      await $.tap(find.byKey(const Key('accept_order_btn')));
      await $.waitFor(find.text('订单已确认'));

      // -------------------------- 步骤4:司机端配送完成 --------------------------
      await $.launchApp(appId: 'com.your.driver.app');
      // 刷新待接单列表并接单
      await $.tap(find.byKey(const Key('refresh_orders_btn')));
      await $.tap(find.byKey(const Key('accept_delivery_btn')));
      // 模拟配送流程:到达商家 -> 取货 -> 送达
      await $.tap(find.byKey(const Key('arrive_store_btn')));
      await $.tap(find.byKey(const Key('pickup_order_btn')));
      await $.tap(find.byKey(const Key('deliver_order_btn')));
      await $.waitFor(find.text('订单已完成'));

      // -------------------------- 步骤5:多端状态校验 --------------------------
      // 校验顾客端订单状态
      await $.switchToApp(appId: 'com.your.customer.app');
      await $.tap(find.byKey(const Key('my_orders_btn')));
      expect(find.text('已完成'), findsOneWidget);

      // 校验先锋端订单状态
      await $.switchToApp(appId: 'com.your.pioneer.app');
      await $.tap(find.byKey(const Key('completed_orders_btn')));
      expect(find.text('已完成'), findsOneWidget);

      // 校验司机端订单状态
      await $.switchToApp(appId: 'com.your.driver.app');
      await $.tap(find.byKey(const Key('completed_deliveries_btn')));
      expect(find.text('已完成'), findsOneWidget);
    },
  );
}

四、关键细节处理

  • 多App管理:通过$.launchApp(appId: 'xxx')启动指定App,$.switchToApp(appId: 'xxx')在已启动App间切换,需确保每个App的包名(Android)/Bundle ID(iOS)准确。
  • 测试数据隔离:每次测试前调用后端测试接口重置数据(如清空商品、订单表),或使用本地数据库的测试实例,避免脏数据干扰。
  • 异步操作处理:用$.waitFor()等待页面加载、数据同步,针对耗时操作可设置超时时间(如timeout: const Duration(seconds: 10))。
  • 第三方服务模拟:支付、定位等第三方服务用测试桩替代,比如在测试环境直接触发支付成功回调,或设置模拟坐标。

五、测试执行与CI集成

  • 本地执行:在项目根目录运行命令:
    patrol test --target integration_test/full_order_flow_test.dart --device <设备ID>
    
  • CI/CD集成:将测试脚本加入GitHub Actions/GitLab CI流程,配置模拟器/真机环境,自动执行测试并生成报告,可使用leancodepl/patrol官方Action简化配置。

六、维护建议

  • 将重复操作封装为工具函数(如createProduct(PatrolTester $)、placeOrder(PatrolTester $)),减少代码冗余。
  • 定期更新Patrol版本,适配Flutter新版本特性。
  • 扩展异常流程测试用例(如下单后取消、配送超时等),覆盖更多场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:57:25