您的测试仍然使用 Playwright、Selenium 和 pytest。我们不会取代它们。我们让它们满足企业级需求,而您拥有一切:代码、证据和历史记录。

一次测试失败。它在磁盘上留下的一切。

这是真实运行,而非模拟展示:TC92 于 2026-09-30 在 Chromium、Firefox 和 WebKit 中以无头模式运行。它打开 example.com,通过 Learn more 链接进入 IANA,并预期标题为 Example Domain。页面上显示的却是 Example Domains。以下是 Chromium 运行生成的文件、它们的实际大小以及各自的内容。

evidence/bug-reports/chromium/TC92 - Iana heading/2026-09-30_14-34 [BREACHED]

5 个文件
保存在本次运行的文件夹中,另有一条历史记录
531.2 kB
整个文件夹,包含视频
32 个字段
位于 metadata.json 中,供机器读取
9 个章节
位于取证报告 report.md 中

一次失败留下了什么

测试失败时 Evidence Locker 会保留什么?

测试失败后会归档一个文件夹,其中包含取证报告、元数据、原始日志以及失败时的画面截图,如果是真实故障,还会包含视频。 TC92_Iana_heading.js 的第 23 行要求标题为 Example Domain. IANA 的页面显示的却是 Example Domains: 在 10000 ms 内,定位器解析了 23 次,每次读取到的都是复数形式。三个引擎的判定结果均为 BREACHED. 以下是失败时的画面,以及生成的所有文件。

https://www.iana.org/help/example-domains
TC92 失败瞬间的 IANA 页面:标题显示为 Example Domains,而测试预期的是 Example Domain
screenshot.png · 89.8 kB · 最后一帧的视口截图,1280×720:检查运行时用户会看到的画面
Error: expect(locator).toHaveText(expected) failed

Locator:  getByRole('heading', { level: 1 })
Expected: "Example Domain"
Received: "Example Domains"
Timeout:  10000ms

  23 × locator resolved to <h1 id="example-domains">Example Domains</h1>
     - unexpected value "Example Domains"

在 Evidence Locker 中,同一条记录通过五个选项卡展示:

ReportMetadataTelemetryRaw LogAI Analysis

report.md5.3 kB

Markdown 格式的取证报告:无需 Studio 即可阅读。

  1. Incident summary
  2. Root cause analysis
  3. Network telemetry
  4. Failure timeline
  5. Historical stability
  6. Self-healing log
  7. Evidence artifacts
  8. Performance budget
  9. Lazy-loading audit

用途:提交工单:事件摘要列出测试、浏览器、页面和业务影响,根因分析则列出失败的检查、选择器、预期值、实际值和源代码行。

metadata.json2.2 kB

32 个字段,可供机器读取。其中几个字段的原文如下:

"status": "BREACHED",
"pageUrl": "https://www.iana.org/help/example-domains",
"selector": "getByRole('heading', { level: 1 })",
"expectedVal": "\"Example Domain\"",
"receivedVal": "\"Example Domains\"",
"timeoutMs": "10000ms",
"securityIssueCount": 3,
"attempt": { "number": 2, "of": 2 },
"lazy": { "score": 85, "grade": "B", … }

用途:通过脚本筛选失败项,无需 Markdown 解析器。它也是保管链封存的文件:包含 metadata.json 的文件夹即为一条记录。

raw-data.json5.1 kB

原始日志:本次运行中的每一条控制台输出、网络错误、安全问题和页面错误,以及性能采样数据。

"consoleLogs": [],
"networkErrors": [],
"securityIssues": [
  "Missing CSP: https://example.com/",
  "Missing CSP: https://example.com/s.js",
  "Missing CSP: https://iana.org/help/example-domains"
],
"jsErrors": [],
"performance_metrics": { "lcp": 992, … }

用途:查看失败前后页面执行的操作。以 FLAKY 或 AUTO_RECOVER 状态通过时,会保留失败尝试的 raw-data.json,因此即使重试掩盖了失败,日志仍会留存。

Telemetry实测

在测试结束时测量,并与你设定的预算对比。条形图显示测量值占预算的比例。

  • LCP992 / 2500 ms
  • FCP992 / 1800 ms
  • CLS0.0295 / 0.1
  • TTFB727 / 800 ms
  • TBT0 / 200 ms
  • DOM114 / 1500 nodes
  • Heap5 / 50 MB
  • INPnot measured

所有指标均在预算以内,报告同时标出了 TTFB 已接近预算上限。INP 显示为未测量,绝不算作通过:被测页面上没有发生任何点击或输入操作。延迟加载审计得分为 85 分(满分 100 分),等级为 B:有一张图片未设置宽度和高度。

用途:区分页面响应缓慢和断言错误。

video.webm428.8 kB
video.webm 第八秒的一帧:IANA 页面显示着“示例域名”标题,此时检查正在重试
0:08 / 0:16

完整会话,共 16.6 秒:打开 example.com, 点击“了解更多”,然后在 IANA 页面上重试检查。由于运行结果为 BREACHED, 录像得以保留,可在证据库中播放。真正的失败会保留录像:默认保留 BREACHED、BREACHED_FLAKY 和 CHAOS_BREACHED 的录像,在设置中启用后也会保留 TIMEOUT 和 BLOCKED 的录像。CRASHED 和 UNREACHABLE 始终不提供录像,因为录制结果会损坏或为空白。只有 Playwright 网页运行和模拟移动端运行会录制:Android 真机、Selenium 运行和 API 测试均不录制。

用途:逐步查看页面如何运行到失败的检查步骤;上方截图为最后一帧。

AI 分析你的 AI

连接你的 AI 后默认启用。使用默认的本地 Ollama 模型或你选择的其他提供商时,引擎会在报告中添加四个标题:诊断、可能原因、影响和建议措施。如果在 AI 撰写工具中启用了你自己的 AI 命令行工具,则改为在运行后由该工具读取 report.md, 每次运行最多处理五个失败项,并添加第五个标题:

  • Diagnosis
  • 分类 (仅限命令行工具)
  • Probable cause
  • Impact
  • Recommended action

分类只能是 APP_BUG、APP_CHANGE、TEST_AUTHORSHIP、TEST_SETUP 或 INFRA_FLAKY 之一。未连接 AI: 不进行分析,五个文件保持不变。

trace.zip 是第六个文件。默认开启“失败时记录取证追踪”后,BREACHED 文件夹还会保存一份 Playwright 追踪记录(DOM 快照、截图和源代码),可使用 npx playwright show-trace trace.zip 打开。在真实 Android 手机上不会记录此文件。TC92 运行时尚未默认启用追踪,因此其文件夹中只有上述五个文件。

一次失败会归档哪些内容

TC91 在 chromium 上运行,2026-09-30 13:26 TIMEOUT

首页顶部演示中回放的那次运行的实际文件夹,在 Evidence Locker 中打开时如下所示: bug-reports/chromium/TC91 - Example more info/2026-09-30_13-26 [TIMEOUT]. 该测试是特意针对 example.com 的旧链接文本设置的。

https://example.com/
TC91 超时时的 example.com: 测试等待的链接原文为 更多信息..., 现已变为 了解更多
screenshot.png · 12.6 kB · 失败瞬间的准确画面
  • report.md4.9 kB事件摘要、根本原因、网络遥测数据、失败时间线、历史稳定性、自愈日志、证据文件、性能预算和懒加载审计。
  • metadata.json2.3 kB32 个字段,包括选择器、30000ms 超时、稳定性 CRITICAL、连续失败次数、第 2 次尝试 (共 2 次)、隐身模式以及懒加载评分 (100, A)。
  • raw-data.json4.2 kB原始日志:控制台输出、网络错误、安全问题 (此处有 2 项:缺少 CSP)、JS 错误和性能指标。
  • Telemetry在报告中LCP 156 ms · FCP 156 ms · CLS 0.0018 · TTFB 122 ms · TBT 0 ms · 808 个 DOM 节点 · 2 MB 堆内存。未测量 INP: 没有可计时的交互。
  • video.webm真实故障遇到真实故障时会录制视频。像这样的 TIMEOUT 不会保留视频,因为默认不为 TIMEOUT 启用录制,报告中也会说明这一点。
  • AI 分析你的 AI接入您的 AI 后,它会在报告中添加诊断、可能的原因、影响和建议操作;通过您自己的 AI 命令行工具,它还会对故障进行分类。

判定结果

14 种判定结果有哪些,接下来该怎么做?

14 种判定结果中的每一种都会指明该由谁处理:无需处理、测试、应用程序、环境或测试框架。判定结果就在文件夹名称中:TC92 的文件夹名称以 [BREACHED] 结尾。分类器按固定顺序分析失败原因:先检查测试框架,然后依次检查崩溃、阻断、主机无法访问和超时,最后才判定为 BREACHED_FLAKY 或 BREACHED。因此,BREACHED 表示无法用任何环境模式解释的失败。每张卡片都会说明该由谁处理,以及该判定结果会归档哪些内容。

  • SECURE无

    直接通过:没有重试,也没有修复选择器。无需处理。存放在 evidence-passed-test 中,每个测试和浏览器组合保留最新 5 份。

    screenshot.pngmetadata.json

  • CHAOS_RESILIENT无

    在注入故障时仍然通过,说明应用经受住了考验。存放在 chaos-runs 中,与缺陷报告分开,因此混沌测试不会影响稳定性统计。

    screenshot.pngchaos-meta.jsonchaos-report.mdmetadata.jsonvideo.webm

  • AUTO_RECOVER测试

    结果为绿,但并非独立通过:自愈机制替换了失效的选择器。测试中的定位器已经失效,下次 DOM 变化就会让测试套件真正失败。请修复定位器。需要重试时会生成 raw-data.json,其中记录的是失败的那次尝试。

    screenshot.pngmetadata.jsonraw-data.json

  • FLAKY测试或应用

    先失败,随后重试通过,期间没有进行任何修复。这是应用或测试中原因不明的不稳定现象,并不代表问题已修复。先查看失败尝试的 raw-data.json,再查看“历史记录”中的趋势。

    screenshot.pngmetadata.jsonraw-data.json

  • PERFORMANCE_DEGRADEDApp

    断言通过,但页面过慢:超出了 Web Vitals 或懒加载的性能预算。在将检查设为严格模式之前,此结果仅作提示。

    screenshot.pngmetadata.json

  • A11Y_VIOLATIONApp

    断言通过,但无障碍检查未通过。metadata.json 列出了触发的每条 axe-core 规则,以及其影响程度和节点数量。在将检查设为严格模式之前,此结果仅作提示。

    screenshot.pngmetadata.json

  • SECURITY_VIOLATIONApp

    断言通过,但安全响应头检查未通过(例如缺少 CSP)。请修复响应头。在将检查设为严格模式之前,此结果仅作提示。

    screenshot.pngmetadata.json

  • BREACHEDApp

    某条断言失败,且无法用已知的环境或测试框架问题模式解释该错误。请阅读 report.md 中的“预期值”和“实际值”,观看视频,然后将其标记为“真实缺陷”或“误报”,并说明原因。

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webmtrace.zip

  • BREACHED_FLAKY应用或测试

    此前重试过,最终一次尝试仍然失败:失败本身并不稳定。提交缺陷前,请对比各次尝试。默认保留其视频。

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

  • CHAOS_BREACHEDApp

    在注入故障时失败。这是韧性问题,与功能缺陷报告分开保存;报告记录了所施加的故障及其对用户的影响。保留策略绝不会删除失败的运行记录。默认保留其视频。

    screenshot.pngvideo.webmchaos-meta.jsonchaos-report.mdmetadata.json

  • TIMEOUT环境

    未能及时响应,但这不能证明应用存在故障。调整任何参数前,请先在“遥测”中检查页面速度:延长时限并不会掩盖失效的元素,只会让失败来得更晚。默认不保留其视频;可在“设置”的“保留以下情况的失败视频”中开启。

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

  • UNREACHABLE环境

    完全无法连接主机:尚未观察到任何页面,DNS 解析或连接就已失败。请检查 URL、网络和目标的可用性。这不是对应用本身的判定。由于没有加载页面,视频只会是空白,因此不提供视频。

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

  • BLOCKED环境

    网站触发了防护:403、429、拦截页面或机器人验证。如果屏幕上显示了防护措施,metadata.json 会注明其名称。这不是对应用本身的判定,Jira 也绝不会为此类拦截创建工单。默认不保留其视频;可在“设置”的“保留以下情况的失败视频”中开启。

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

  • CRASHED测试框架

    浏览器或进程已终止:页面关闭、DevTools 协议错误或 WebDriver 会话失效。这是基础设施问题,而非应用问题。请检查机器和驱动程序。浏览器崩溃后录制的视频会损坏,因此不提供视频。

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

以下状态不属于这 14 种判定:CONFIG_ERROR(测试框架无法启动测试:导入出错、缺少 .env 值)、SKIPPED 和 INTERRUPTED。它们都不是针对应用的结果,因此不会生成证据文件夹或“历史记录”条目。CONFIG_ERROR 仍会连同提示完整写入 .run-cache/config-errors/ 下的日志,以便修复出错的测试。API 测试有其独立的七种判定:API 测试。

History

历史记录会为每次运行记录什么?

除了生成文件夹,每次运行还会向 history/<browser>/<test>/runs.json 追加一行:默认保存每个浏览器上每项测试最近的 50 次运行. 以下是 TC92 按原样写入的三行记录,每个浏览器一行。三行的 error_signature 相同,表明这是同一个错误,而不是三个。

  1. webkitBREACHED

    status
    breached
    duration_ms
    13570
    error_category
    UI_UNSTABLE_ELEMENT
    error_severity
    MEDIUM
    error_signature
    70f7532d
    perf.lcp
    638 ms
    perf.ttfb
    null
    evidence_ref: bug-reports/webkit/TC92 - Iana heading/2026-09-30_14-33 [BREACHED]
  2. firefoxBREACHED

    status
    breached
    duration_ms
    20013
    error_category
    UI_UNSTABLE_ELEMENT
    error_severity
    MEDIUM
    error_signature
    70f7532d
    perf.lcp
    4353 ms
    perf.ttfb
    3877 ms
    evidence_ref: bug-reports/firefox/TC92 - Iana heading/2026-09-30_14-34 [BREACHED]
  3. chromiumBREACHED

    status
    breached
    duration_ms
    12291
    error_category
    UI_UNSTABLE_ELEMENT
    error_severity
    MEDIUM
    error_signature
    70f7532d
    perf.lcp
    992 ms
    perf.ttfb
    727 ms
    evidence_ref: bug-reports/chromium/TC92 - Iana heading/2026-09-30_14-34 [BREACHED]

浏览器无法测量的值会写为 null, 绝不会写为零:此处 WebKit 未报告 TTFB. 行内时间按写入时的 UTC 时间显示;文件夹名称使用计算机的本地时间,这台计算机为 UTC−5.

一行记录中的所有字段

schema_versiontimestampstatusdetail_statusretry_attemptattemptsrun_idruntimeplatformduration_msbrowserchaosvarianterror_summaryerror_categoryerror_severityerror_signatureperfraw_log_refevidence_ref

perf 包含 LCP、FCP、CLS、TTFB、TBT、INP、长任务、DOM 大小、堆内存、访问过的所有页面以及懒加载评分。 raw_log_ref 和 evidence_ref 指向上面的文件夹。

引擎根据这些记录输出的内容

TC92 chromium BREACHED 13.7s

expect(locator).toHaveText(expected) failed

at TC92_Iana_heading.js:23 waiting for getByRole('heading', { level: 1 })

stability CRITICAL 0% · 0/1 runs · 1 failed in a row

# TC91, 首页上的预设演示:先是 BREACHED, 然后是 TIMEOUT

stability CRITICAL 0% · 0/2 runs · 2 failed in a row

这一行的 duration_ms 值为 12291, 是 Playwright 在两次尝试中的第二次测得的测试本身耗时。

这些记录还用于报告中的历史稳定性部分、历史记录界面的趋势 (出现回退、已恢复、仍未修复、变慢) 以及风险排名;运行不足五次时,不会将任何测试判定为不稳定。

历史记录界面 →

保留证据

Nexus Studio 会保留多少证据,保留多久?

测试通过时保留一张截图及其元数据,失败时保留复现问题所需的全部内容,并优先清理最早的文件。每晚运行的测试套件会填满磁盘。引擎会按测试和浏览器,对其写入的每个文件夹设置容量上限,并将所有证据纳入统一的容量预算,默认为 20 GB, 同时确保磁盘保留 10 GB 可用空间,使磁盘占用达到您选定的大小后不再增长。失败时仍会保留复现所需的内容:错误及其选择器和值、页面 URL、框架、控制台、网络和页面错误记录、运行时和平台,以及运行的上下文,即用于衡量该次运行的基准。容量上限和预算可在设置中的“证据 & 保留”下设置。

  • 一次 BREACHED 失败

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webmtrace.zip

    上述完整文件夹:TC92 在 Chromium 上占用 531.2 kB,其中视频占 428.8 kB。启用追踪时,trace.zip 会额外占用空间。

  • A TIMEOUT

    report.mdmetadata.jsonraw-data.jsonscreenshot.pngvideo.webm

    文件相同,但不含录像,因为默认不录制 TIMEOUT: 首页预设演示中 TC91 的 TIMEOUT 文件共 23.9 kB.

  • 通过

    screenshot.pngmetadata.json

    与缺陷报告分开存放,每个测试和浏览器组合保留最新 5 份。截图用于视觉回归对比。开启“保留 FLAKY / AUTO_RECOVER 通过结果的证据”后,FLAKY 或 AUTO_RECOVER 通过结果也会保留其文件夹,其中包含失败尝试的 raw-data.json。

设置 · 证据 & 保留 · 默认值

  • Bug reports kept per test20NEXUS_BUGREPORT_RETAIN
  • Passing screenshots kept5NEXUS_PASSED_RETAIN
  • Keep evidence of a FLAKY / AUTO_RECOVER passonNEXUS_RECOVERED_RETAIN
  • Raw run history window50 runsNEXUS_HISTORY_RETAIN
  • Smart Monkey sessions kept10NEXUS_MONKEY_RETAIN
  • Run contexts kept (what each run tested against)100NEXUS_RUN_CONTEXT_RETAIN
  • Record failure videoonNEXUS_VIDEO_ENABLED
  • Keep failure video for3 verdictsNEXUS_VIDEO_VERDICTS=BREACHED,BREACHED_FLAKY,CHAOS_BREACHED
  • Record a forensic trace on failureonNEXUS_TRACE_ENABLED
  • Total evidence budget20 GBNEXUS_EVIDENCE_MAX_GB
  • Free disk to keep10 GBNEXUS_MIN_FREE_GB

每次运行后由引擎输出

[CACHE RETENTION] 3 files archived → .run-cache/telemetry/2026-09/run_30-1434.zip

[CACHE RETENTION] .cache purged (freed 8.9 KB)

[CACHE RETENTION] Archive health: 1/2 files · 9.3 KB / 500 MB used

这三行出现在 TC92 运行之后。运行产生的遥测临时文件从不作为证据:它们会打包成 zip, 随后删除未打包的副本,最多保留 2 个 zip, 保留时间不超过 7 天,总大小不超过 500 MB。这三个限制由 .env 中的 NEXUS_CACHE_ZIPS, NEXUS_CACHE_RETENTION_DAYS 和 NEXUS_CACHE_MAX_MB 控制,而不是设置中的字段。

在设置中, 清除缓存会删除工作区的 test-results 和 playwright-report 文件夹,并关闭因运行崩溃或被终止而遗留的浏览器。巡检运行期间不允许执行此操作。

工作区 · 磁盘 · 各文件夹当前的限制

area limit today

Bug reports newest 20 runs per test and browser

Passed tests newest 5 runs per test and browser

API evidence newest 20 passing runs per test; failures kept

Chaos runs newest 20 held runs; runs that broke kept

Smart Monkey newest 10 sessions

Visual regressions newest 10 per test and checkpoint

Run context newest 100 runs

Run history newest 50 runs per test and browser

Chain of custody append-only, never trimmed

Archive no automatic limit

磁盘面板按大小降序列出运行写入的所有文件夹,显示各文件夹的大小,文件数和最早日期,以及总大小和驱动器的可用空间。没有自动限制的文件夹会被标记。仅对可安全清理的内容提供清理操作:运行缓存,超过 14 天的测试文件版本和超过 30 天的高管报告。清理绝不会触及证据或归档。

除数量上限外,所有证据还共享一个空间预算,默认为 20 GB, 同时磁盘需保持 10 GB 可用空间。每次运行结束后,引擎都会检查这两项限制。只要有一项不满足,就会删除最旧的运行记录,优先删除通过的记录,再删除失败的记录,直到两项都满足;每个测试和浏览器组合的最新运行记录始终保留。面板会显示证据占用量与预算、可用空间与下限的对比,以及上次维护释放的空间,并提供立即运行维护按钮。

存储与自动维护 →

证据库 · 保留重要内容,释放其余空间

归档…仅将您勾选的部分复制到查看 → 归档,默认勾选截图和报告。副本与证据文件夹位于同一层级,而不是其中,因此不会被任何保留策略清理,证据库中的运行记录也不会受到影响。

归档页面上的恢复会将记录放回原处,并重新计入统计。如果其文件夹已被清理,归档的部分会写回证据库。判定为误报的记录仍不会计入统计。

释放磁盘空间会将文件夹移至回收站。如果记录已封存,引擎会先写入处置记录,因此 nexus verify 会报告 PURGED, 而不是 TAMPERED。保留策略删除最早的文件夹时也会执行相同操作,台账仍可证明该文件夹的哈希值,删除者和删除时间。封存需主动启用:在首次判定为真实缺陷或误报,或执行 nexus verify --seal 之前,证据库会显示 UNVERIFIED。

看看你自己的失败会留下什么。

在您的设备上免费使用 30 天,畅享全部功能。无需信用卡。