Files
Yb-QaAutomationHub/tests/cross_end
xst f75a6f5ec9 feat(cross_end): add driver-to-settlement E2E test with SQL retry
- Add DriverFreightFlowPage (Android): 28-step flow covering accept/load/unload
- Add FreightAccountingPage (Web): accounting/audit/finance-payment/shipper-payment
- Add db_helper: update_risk_control_status via pymysql
- Fix ensure_logged_in: coordinate tap on 'mine' tab + login check
- Add test_driver_to_settlement.py: full cross-end E2E with SQL retry

Co-authored-by: xst <xst@ntocc.com>
2026-07-22 17:18:52 +08:00
..

跨端 E2E 测试 — 货运全流程

概述

tests/cross_end/ 目录包含跨越多个端(管理端 Web + 司机安卓 APP)的端到端自动化测试, 验证从"发布货源"到"平台打款"的完整业务闭环

  [管理端 Web]                    [司机安卓 APP]
       │                                │
  ① 发布货源 ──────────────────────────→│
       │                          ② 接单 │
       │                          ③ 装货 │
       │                          ④ 卸货 │
       │←────────────────────────────── │
  ⑤ 核算运单                            │
  ⑥ 核算审核                            │
  ⑦ 货主打款                            │
  ⑧ 平台打款给司机                      │

前置条件

管理端

# 1. 保存管理员登录态 (仅需一次)
python tests/web/admin/save_auth.py --role super_admin --browser chromium

司机安卓 APP

条件 说明
Appium Server 启动: appium (默认 http://localhost:4723)
Android 模拟器/真机 已启动并通过 adb devices 确认
司机 APP 已安装,包名 com.arpa.ynchenggangdriver
登录态 在设备上手动登录一次 (后续 noReset=true 自动复用)

Python 依赖

pip install playwright appium-python-client
playwright install chromium

运行

# 运行跨端测试
pytest tests/cross_end/ -m cross_end -v -s

# 仅收集测试(不执行,验证 fixture 链正确)
pytest tests/cross_end/ --collect-only

# 排除跨端测试(常规运行不影响)
pytest tests/ -m "not cross_end"

测试文件结构

tests/cross_end/
├── conftest.py                           # 双 driver fixture (admin_page + app_driver)
├── pages/
│   ├── admin/
│   │   ├── freight_source_page.py        # 发布货源 Page Object
│   │   ├── waybill_management_page.py    # 运单核算 + 审核 Page Object
│   │   └── settlement_page.py           # 货主打款 + 平台打款 Page Object
│   └── app/
│       ├── driver_home_page.py           # 司机首页 (复用现有)
│       ├── driver_order_list_page.py     # 订单列表 + 接单 Page Object
│       └── driver_transport_page.py     # 装货 + 卸货 Page Object
├── tests/
│   └── test_freight_full_flow.py        # 主测试: 8 步全流程
└── README.md

选择器 ⚠️ 标记

所有新 Page Object 中的定位器 (CSS 选择器 / accessibility_id) 都标有 # ⚠️, 因为无法从代码静态分析中确定实际 DOM 结构或 APP 元素 ID。

替换步骤:

Web 管理端选择器

  1. 启动管理端并登录
  2. 打开浏览器 DevTools (F12)
  3. 逐个导航到对应页面(货源管理、运单管理、承运结算)
  4. 检查每个表单输入框的 placeholder、按钮的 text、弹窗的 CSS class
  5. 替换 Page Object 中对应的 # ⚠️ 选择器

APP 端 accessibility_id

  1. 启动 Appium Desktop 并连接到设备
  2. 使用 Inspector 功能捕获屏幕元素
  3. 找到每个按钮/输入框的 accessibility-idresource-id
  4. 替换 Page Object 中对应的 # ⚠️ 选择器

配置

所有环境配置从 tests/config/test_config.yaml 读取,跨端测试使用的 section:

Section 用途
admin 管理端 base_url, viewport, timeout, 登录态路径
driver_android Appium host, device_name, app_package, no_reset
accounts.super_admin 管理员手机号/密码
accounts.driver 司机手机号/密码

不需要新增配置项。

故障排查

现象 可能原因 解决方案
pytest.skip: Playwright 未安装 环境缺少 playwright pip install playwright && playwright install chromium
pytest.skip: Appium-Python-Client 未安装 环境缺少 appium pip install appium-python-client
登录态已过期 storage_state 过期 python tests/web/admin/save_auth.py --role super_admin
APP 在登录页 noReset 未生效或首次运行 在设备上手动登录一次
无法连接到 Appium server Appium 未启动 终端执行 appium
AdbError / 设备未找到 模拟器未启动 adb devices 确认设备在线
订单在 APP 中找不到 订单同步延迟 在 Page Object 中增加 retry 轮询逻辑
# ⚠️ 选择器错误 未更新实际选择器 按照上方步骤替换选择器

已知限制

  • 仅 chromium: 管理端不跑 browser matrix,固定使用 chromium
  • 仅 Android: APP 端目前固定为 driver_android,不跑 iOS
  • 创建真实数据: 测试会在环境中创建真实订单,需定期清理或使用测试环境
  • 无 API 清理: 测试失败后不会自动取消/删除订单,需手动处理
  • 同时需要两个环境: 管理端 + Appium + Android 设备必须同时可用,缺一则 skip