为什么应用正常,测试却失败了?
网络缓慢、DNS 解析失败、网站返回 403 或 429 或显示机器人验证、浏览器崩溃,都会让端到端测试报红,但这些都不是应用本身的缺陷。Verdict System LLC 的 Nexus Studio 为这些失败分别给出判定:TIMEOUT、UNREACHABLE、BLOCKED 和 CRASHED。它们都不会被报告为应用缺陷。
作者:Verdict System LLC 的 Nexus Studio 团队。2026 年 10 月 7 日。
没有缺陷,测试为什么还会失败?
测试只能报告某件事没有发生。原因可能出在以下四个与代码无关的方面:
- 页面响应缓慢,测试超时;
- 无法访问主机,例如域名无法解析;
- 网站通过 403、429、验证码或机器人验证进行防护,导致请求根本没有到达你的产品;
- 浏览器或进程崩溃。
如果这些情况都只显示为报红,团队就会把它们当成缺陷提交,或者养成只重跑、不分析失败结果的习惯。无论哪种情况,真正的缺陷都会被噪声淹没。
Nexus Studio 如何区分非缺陷导致的失败和真正的缺陷?
测试失败时,引擎会读取本次运行的错误消息和网络日志,并按固定顺序与各组模式进行匹配。首个匹配的模式组决定判定结果。顺序依次为 CONFIG_ERROR、CRASHED、BLOCKED、UNREACHABLE 和 TIMEOUT,最后才是 BREACHED_FLAKY 或 BREACHED。因此,只有环境或测试框架相关模式都无法解释的失败,才会得到意味着需要提交缺陷报告的 BREACHED 判定。这些模式涵盖 Playwright 和 Selenium WebDriver 的错误表述。
TIMEOUT、UNREACHABLE、BLOCKED 和 CRASHED 是什么意思?
- TIMEOUT:测试未能及时获得响应。这既不能证明应用有问题,也不能证明应用正常:本次运行无法得出结论。页面导航已开始,但因页面缓慢而超时,会被判定为 TIMEOUT。
- UNREACHABLE:完全无法访问主机。在观察到任何页面之前,DNS 解析或连接就已失败,例如域名无法解析、连接被拒绝或机器离线。证书错误不属于此类:它属于检测发现的问题。
- BLOCKED:网站通过 403、429、拦截页面或机器人验证进行防护。如果屏幕上出现了防护机制,metadata.json 会注明其名称。真实 Android 手机进入休眠或处于锁定状态时,也会因未满足前提条件而被判定为 BLOCKED。
- CRASHED:浏览器或进程崩溃,例如页面已关闭、DevTools 协议错误或 WebDriver 会话失效。这属于基础设施问题:请检查机器和驱动程序。
判定指南列出了每种判定对应的具体错误模式。
CI 流水线会看到什么?
14 种判定中有七种以退出码 0 退出:SECURE、AUTO_RECOVER、FLAKY、CHAOS_RESILIENT、PERFORMANCE_DEGRADED、A11Y_VIOLATION 和 SECURITY_VIOLATION。其余七种以退出码 1 退出,TIMEOUT、UNREACHABLE、BLOCKED 和 CRASHED 就在其中。因此,由于测试未通过,构建仍会报红,但报告和历史记录会说明具体原因。如果运行根本无法启动,pytest 和 Selenium 运行器会以退出码 2 退出。
每种非缺陷导致的失败会保留哪些证据?
这四种判定都会保留 report.md、metadata.json、raw-data.json 和最终画面的截图。视频保留规则有所不同:
- TIMEOUT 和 BLOCKED:默认不录制视频。可在设置中的“保留以下失败的视频”下开启。
- UNREACHABLE:不提供视频,因为没有页面加载成功,录制结果只会是空白。
- CRASHED:不提供视频,因为浏览器崩溃后录制的视频会损坏。
只有 Playwright 的网页测试和模拟移动设备测试会录制视频。真实 Android 手机测试、Selenium 测试和 API 测试均不会录制。
启用 Jira 后,TIMEOUT 会创建工单,而拦截、崩溃和网站无法访问的情况均不会创建工单。
有哪些局限?
- 分类依据是错误文本。如果你自己编写的消息包含
403、Forbidden或Access Denied,就会被判定为 BLOCKED。自定义断言消息应具体明确,如果判定结果出乎意料,请打开 metadata.json 查看。 - TIMEOUT 不能证明应用正常。如果测试每次运行都超时,就值得检查一下。
- 延长超时时间并不能掩盖元素故障:只会让测试晚些失败。
- 这些判定指出了运行失败的原因。但不会消除原因:被屏蔽的网站仍会被屏蔽,除非你改变访问方式。
在哪里可以看到?
证据页面追踪一次失败的测试,并列出每种判定在磁盘上留下的所有文件。 判定指南说明引擎按什么顺序做出全部 14 种判定。 30 天试用版使用同一引擎运行你自己的测试。