
TestSprite失败包深度解析一个snapshotId如何给AI代理自洽的调试上下文【免费下载链接】testsprite-cliOfficial TestSprite CLI — AI-powered automated testing from your terminal项目地址: https://gitcode.com/gh_mirrors/te/testsprite-cli当你让 AI 编码代理用 TestSprite 跑自动化测试时测试一旦失败代理最需要的不是一句第 3 步挂了而是一个失败包failure bundle——把失败步骤、截图、DOM 快照、测试源码、根因假设和修复建议打包成一次取回、彼此自洽的上下文。TestSprite CLI 的testsprite test failure get正是干这件事的整包所有产物共享同一个snapshotIdCLI 甚至会拒绝把两次不同运行、两个不同代码版本的数据拼在一起让 AI 代理拿到的永远是一次真实运行的完整现场。 为什么 AI 代理需要失败包而不是零散日志AI 代理修 bug 的前提是上下文一致。如果你把本次运行的失败步骤 上一次的代码 三天前的截图喂给它它大概率会推理出一只缝合怪改错文件、修错版本、白烧一轮 run 积分。TestSprite 的思路是把一次失败运行看成一个原子快照一次性交付包里有什么对应文件作用运行结果result.json状态、时间戳、snapshotId/runId/codeVersion等关联字段失败分析failure.json失败类型、根因假设、建议修复目标、逐步证据测试源码code.ext生成代码版本与结果里的codeVersion对齐步骤现场steps/01-screenshot.png、steps/03-snapshot.html、steps/03-evidence.json失败步骤及相邻步骤的截图、DOM 快照、日志/网络/控制台证据录屏可选video.mp4/video.webm完整操作回放身份卡meta.json包级snapshotId、testId、capturedAt等代理第一份要读的文件核心思想一句话所有产物同源同一个snapshotId背书。 snapshotId 一致性闸门6 道校验挡掉缝合包CLI 在写盘前会执行一道完整性闸门实现见 assertContextIntegrity任何一条不满足就报错并拒绝写包而不是尽量修复snapshot_id_mismatch— 包级snapshotId必须等于结果里的snapshotIdtest_id_mismatch—result、code和每个 step 里的testId必须全部一致防止打开 A 测试的 meta改的却是 B 测试的源码这种跨测试污染code_version_mismatch— 结果与代码的codeVersion必须匹配都为空则放行兼容老后端run_id_mismatch— 各步骤的runIdIfAvailable只允许出现一个真实值出现 ≥2 个不同真实 runId 即为跨运行拼接直接失败run_id_missing— 按runId取包的场景test artifact get中meta 必须带 runIdevidence_missing_failed_step— 有证据就必须覆盖失败步骤本身保证代理能直接路由到关键现场。这套校验的错误类型是VALIDATION_ERRORnextAction会直接告诉操作者重试一次——因为快照可能刚好在写入中途被抓取重新取包通常就成功了。这些规则都有对应的行为测试覆盖bundle.test.ts、bundle.commit.test.ts并在契约层用 p4-schema.test.ts、p5-schema.test.ts 固定下来。 原子落盘meta.json 是完成的唯一信号除了数据一致性落盘过程本身也是原子的writeBundle所有文件先写到dir/.tmp/最后统一rename()到目标目录meta.json永远最后落位——目录里出现meta.json⇔ 这个包完整且自洽。代理读包前先检查 meta任何其它文件与 meta 的snapshotId不一致就拒绝消费中途任何下载/写盘失败会留下一个.partial标记文件含requestId、错误摘要、snapshotId退出码非零。契约很简单见到.partial先别消费这个目录下载走流式写入200MB 的视频也不会撑爆内存预签名 URL 有 15 分钟有效期包内引用全部被钉成本地相对路径一小时后再打开也不会遇到死链。 失败包驱动的调试闭环典型的代理自修复循环只有四步testsprite test create --plan-from ./plan.json --run --wait—— 描述行为、跑起来退出码 1 即失败testsprite test failure get test_xxx --out ./.testsprite/failure—— 取回一个自洽失败包代理读包先meta.json再看失败步骤与证据改代码testsprite test rerun test_xxx --wait—— 复跑通过则这次测试沉淀进持久套件。testsprite test failure get test_xxxxxxxx --out ./.testsprite/failure/test_xxxxxxxx # 只要失败步骤 ±1 的邻居省下载体积 testsprite test failure get test_xxxxxxxx --out ./fail --failed-only # 完全离线预演内置示例数据零配置即可学习落盘结构 testsprite test failure get test_xxxxxxxx --dry-run --out ./fail几个实用细节--failed-only把范围收窄到失败步骤 ± 1applyFailedOnly大幅减少上下文体积--dry-run用内置样例数据走完整代码路径离线学习失败包长什么样样例在 samples.ts按 run 取包如果你刚触发了一次运行用testsprite test artifact get run-id更稳——它按runId寻址不会被同一测试随后落下的新失败抢走CLI 还会强制校验meta.runId run-id不匹配直接退出 5。官方代理技能文件里同样把读包设为失败处理的必经环节先检查失败包里的结果、失败步骤、视频与根因假设再判断是不是自己改动导致的skill-template.md并明确提醒根因假设只是建议不要仅凭它自动修复。 延伸阅读完整命令参考DOCUMENTATION.mdtest failure get一节在 第 298 行附近失败包写入器源码src/lib/bundle.ts代理验证循环技能skills/testsprite-verify.skill.md项目主文档README.md一句话总结TestSprite 的失败包把一次失败运行封装成了带snapshotId背书、数据与落盘双重原子的自洽上下文——AI 代理拿到手就能直接推理不需要也不敢自己拼东拼西。对于想给自己的编码代理加验证层的团队这是比把日志丢给模型可靠得多的起点。【免费下载链接】testsprite-cliOfficial TestSprite CLI — AI-powered automated testing from your terminal项目地址: https://gitcode.com/gh_mirrors/te/testsprite-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考