# iOS 批量化测试 ## 批量测试流程 ```mermaid graph TD A["加载 CSV 应用列表"] --> B["启动基础设施
tunnel+转发+WDA+代理"] B --> C["遍历应用"] C --> D["安装应用获取 bundle_id"] D -->|失败| E["记录 SKIPPED, continue"] D -->|成功| F["启动抓包(可选)"] F --> G["执行 DroidBot 测试"] G --> H["记录结果到统计"] H --> I["停止抓包"] I --> J["实时保存 CSV"] J --> C E --> J C -->|全部完成| K["打印摘要 + 清理资源"] ``` ## WDA 卡死检测与异步恢复 ```mermaid flowchart TD A[WDA 操作失败] --> B{连续失败 ≥ 3次?} B -->|否| C[继续下一步操作] B -->|是| D[触发异步恢复] D --> E[后台线程: stop_wda → start_wda] E --> F[_wait_wda_ready 自动等待恢复] F --> G{WDA 恢复?} G -->|是| H[测试继续] G -->|否| I{恢复次数 ≥ 3?} I -->|否| D I -->|是| J[抛出 WDAStuckError, 记录失败] ``` ## 测试架构流程图 ```mermaid flowchart TD A[ios_test.py main] --> B{批量/单个模式?} B -->|batch| C[load_apps_from_csv] B -->|single| D[单个 bundle_id] C --> E[遍历 app 列表] E --> F D --> F F[setup_infrastructure] --> G[install_app_and_get_bundle_id] G --> H["阶段1: AppleID + GuiAgent
处理权限/登录"] H --> I["阶段2: FastbotAgentController.run()
Fastbot + 异步检测"] I --> J{PageStuckDetector
检测到卡住?} J -->|是| K[暂停 Fastbot] K --> L["调用 GuiAgent
判断并处理"] L --> M[恢复 Fastbot] M --> J J -->|否| N{Fastbot 结束
或超时?} N -->|否| J N -->|是| O[收集结果 TaskResult] O --> P[保存统计/摘要] ```