外观
异步 UI 测试为什么时好时坏?怎样减少偶发失败?
标准回答
异步操作的完成时间不固定,测试不能靠“睡两秒大概够了”。要等待一个可以观察的完成条件,控制外部依赖,并确保每次测试从已知状态开始。
- Espresso 能同步一部分界面工作,自定义异步任务可能需要 IdlingResource 等配合。
- 每个测试独立准备账号、数据库与权限状态,结束时释放订阅和资源。
- 失败时保留截图、日志、设备版本与步骤,区分产品缺陷、环境问题与测试本身问题。
通俗例子
点击登录后接口有时 300 毫秒、有时 3 秒。固定 sleep(1000) 会偶发失败。用可控服务器或 Fake 固定响应,用适当的同步机制等待加载结束,再检查页面结果。
深入解释
**为什么 sleep 不可靠:**测试等一秒,不代表后台任务一定在这一秒内完成;机器忙或网络慢时可能超时,任务已完成时又白白多等。应该等待可观察的目标状态。
**IdlingResource 帮在哪里:**它向 Espresso 描述自定义异步工作是否空闲,让框架知道何时适合继续界面操作。忙闲状态仍需正确更新,不是加了名字就能自动感知所有任务。
易混淆点
把超时无限加大只会让失败变慢;它没有修复竞态或未正确等待的根因。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
job-A11