Cloudflare-testing :把测试规范写进了给 AI 的说明书

在 Smithery 上翻 skill 市场的时候,我注意到一个叫 testing 的东西,作者是 cloudflare。它的描述只有一句话:写或跑测试时使用,覆盖单元测试与端到端测试的决策、测试文件位置、mock 模式,以及项目特定的测试约定。平淡得像内部 wiki 的一行目录,但正是这种平淡引起了我的兴趣。

多数上架的 skill 都恨不得把自己包装成通用神器,这个却带着一个醒目的标签:project。也就是说,它明确声明自己只对一个项目有效,离开那个仓库就是废纸。这种”自限范围”的姿态,在营销驱动的 skill 生态里相当少见。

Cloudflare-testing :把测试规范写进了给 AI 的说明书

这篇拆解会带你走一遍这个 skill 的完整内容,从它所在的 Cloudflare Sandbox SDK 仓库开始,到两层测试体系的具体命令与 mock 策略,再到它把”已知缺陷”写进文档这件事背后想明白的东西。读完你会理解,一个项目级测试 skill 为什么比十个通用测试 prompt 更有价值。

先交代一下来源。这个 skill 没有独立仓库,它躺在 github.com/cloudflare/sandbox-sdk 的 .agents/skills/testing 目录下,随着沙箱 SDK 一起维护。这意味着我们看到的不是精心包装的营销文档,而是 Cloudflare 工程师平时真会读、真会照着执行的工作手册。

环境准备

Sandbox SDK 是 Cloudflare 的边缘沙箱项目,用一句话说,它让你在 Workers 上跑不可信的代码,能执行命令、读写文件,也能开后台进程、暴露服务。典型用途是 AI 代码执行和 CI/CD。整个仓库是 monorepo,测试约定横跨 SDK 包和容器包两个层面,这是理解 testing skill 所有细节的前提。

安装方式走的是 skills 命令行工具,一条命令就能把仓库里的 skill 拉进当前环境。因为 skill 目录里只有一份 SKILL.md,没有任何依赖,所以安装过程干净利落,不会污染你的依赖树。

Cloudflare-testing :把测试规范写进了给 AI 的说明书

装好之后怎么触发它?靠的是 SKILL.md 头部 description 里的语义匹配。当 AI 识别到当前任务涉及”写测试、跑测试、判断该用单测还是 E2E”时,它才把这份指令加载进上下文。这种渐进式披露机制,让一个仓库可以塞进几十个 skill 而不撑爆上下文窗口。

验证环境就绪有个很朴素的判断标准:你能在仓库里找到 .agents/skills/testing/SKILL.md 这个文件,就说明 skill 已经可用。剩下的工作全部发生在你写测试的那一刻,而不是安装时。

操作流程

真正打开这份 SKILL.md,第一感觉是它的克制。没有长篇大论讲测试理论,开篇就划清了边界:本 skill 只覆盖项目特定的测试约定,TDD 方法论请去找 superpowers 的 test-driven-development skill。职责分层干净利落,这是项目级 skill 最核心的姿态。

正文主体是两层测试体系。单元测试负责隔离逻辑、客户端行为、服务方法和工具函数,位置在 packages/sandbox/tests 和 packages/sandbox-container/tests。有意思的是两层跑在不同的运行时上,SDK 测试走 Workers 运行时,靠的是 @cloudflare/vitest-pool-workers,容器测试则跑在 Bun 上。

npm test                              # 全部单元测试
npm test -w @cloudflare/sandbox       # 只跑 SDK 的测试
npm test -w @repo/sandbox-container   # 只跑容器包的测试

mock 策略同样分得清楚。SDK 测试用模拟容器,不需要真的启动 Docker;容器测试则 mock 外部依赖,比如文件系统和进程;日志用 @repo/shared 里的 createNoOpLogger 处理。这套设计的潜台词是:单元测试要快到可以高频执行,任何重依赖都是敌人。

E2E 测试是另一个世界。它测试完整的请求流程、容器集成和真实 Docker 行为,位置在 tests/e2e,运行在真实的 Cloudflare Workers 加 Docker 容器上。命令也区分了 vitest 和浏览器两轨,Playwright 负责浏览器部分。

npm run test:e2e                  # 全部 E2E(vitest + 浏览器)
npm run test:e2e:vitest -- -- tests/e2e/process-lifecycle-workflow.test.ts  # 单个文件
npm run test:e2e:vitest -- -- tests/e2e/git-clone-workflow.test.ts -t 'test name'  # 单个用例
npm run test:e2e:browser          # 只跑浏览器测试

E2E 有一个值得单独说的性能设计:所有测试共享同一个容器,但每个用例通过 createTestSession 拿到唯一会话做隔离,再靠线程池并行跑。共享容器保性能,唯一会话保隔离,两者不冲突,配置落在根目录的 vitest.e2e.config.ts。

关键设计

把这份 SKILL.md 当作一个设计文本来读,能看到三层递进的意图。第一层是位置即规范,测试文件放哪、命令怎么写、配置在哪,全部用确定性的路径写死。第二层是判断力下放,它给 AI 一张”什么场景用什么测试”的决策表,而不是让 AI 每次自己拍脑袋。第三层是边界声明,明确不做什么,把方法论类问题转介出去。

Cloudflare-testing :把测试规范写进了给 AI 的说明书

最让我意外的是它把已知缺陷直接写进了文档:SDK 单元测试退出时可能挂起,原因是 vitest-pool-workers 的 workerd 关停问题,但测试本身通过失败判断不受影响,只是看起来卡住。在大多数组织里,这种瑕疵会被藏在 issue 里或者干脆不提,Cloudflare 却把它写进给 AI 看的指令。

从设计意图推断,写这段是为了防误判。AI 跑完测试看到进程不退,如果没有上下文,很可能判定为失败开始折腾,反而浪费时间。把缺陷写清楚,等于提前给 AI 打了预防针:看到这个现象别慌,这是已知问题。

共享一个容器的设计也不是没有代价。测试隔离依赖会话机制而非容器隔离,一旦 createTestSession 的实现有 bug,所有测试会连锁受影响。这是明确的性能与隔离权衡,文档选择了前者,用唯一会话把风险兜住,思路是对的。

使用场景

skill 里最实用的一张表,是”什么场景用哪种测试”的决策表。判断标准不是代码量也不是文件位置,而是被测对象触碰了什么。纯逻辑层的事归单元测试;只要涉及真实文件系统、进程生命周期或端口暴露,或者碰了 Git 操作,就归 E2E。

场景 测试类型
客户端方法逻辑 单元测试
服务业务逻辑 单元测试
请求/响应处理 单元测试
完整命令执行流程 E2E
真实文件系统操作 E2E
进程生命周期(启停、信号) E2E
端口暴露与预览 URL E2E
Git 操作 E2E

这张表对 AI 的价值在于把判断成本从”每次推理”降到了”查表”。上下文里有一张明确的映射,AI 就不会在单测和 E2E 之间反复摇摆,也不会因为看不到真实 Docker 就把该测的流程跳过。

日常开发节奏也被规范成了三步:改了代码先跑 npm run check 抓类型错误,再跑 npm test 确认单元测试,动了核心功能才上 npm run test:e2e。这是一个从快到慢、从便宜到昂贵的分级验证模型,AI 照着执行不会一上来就开重型测试。

边界同样画得清楚。如果任务是”从零设计测试方案、遵循 TDD 节奏”,这个 skill 会主动把自己排除,指引到专门的方法论 skill。知道什么不答,比什么都答更显专业,这一点在通用大模型身上恰恰是最稀缺的。

洞察与反思

通读下来,我最大的感受是:这个 skill 的价值不在内容本身,而在它示范了项目级 skill 的正确写法。通用测试知识是公开的,任何模型都知道什么叫单元测试。真正不可替代的,是那些只有进了这个仓库才能知道的东西:mock 什么、跑什么命令、哪里会挂。

对比常见的通用测试 skill,差异立竿见影。通用 prompt 教你”写清晰的测试、覆盖边界情况”,这些话放在任何项目都成立,但没有任何项目真的需要。而这份 SKILL.md 每一句都绑定具体路径和命令,AI 照着执行不会猜错,这是垂直深度的胜利。

Cloudflare-testing :把测试规范写进了给 AI 的说明书

还有一个容易被忽略的细节:E2E 测试永远跑在最新构建上,不用手动 rebuild,靠的是 monorepo 的构建系统自动处理依赖。这意味着 AI 写的测试不会因为构建产物过期而误报,这种工程细节写进 skill 里,比任何方法论都实在。

当然它也有明显的局限。整个 skill 和 sandbox-sdk 仓库强绑定,路径、包名、命令全是硬编码,离开这个仓库立刻失效。它示范的模式可以借鉴,内容本身却不可迁移。想给别的项目写类似的 skill,你得自己把这份工作重做一遍。

资源地址

资源 链接
Smithery 页面 https://smithery.ai/skills/cloudflare/testing
源码仓库 https://github.com/cloudflare/sandbox-sdk
skill 源码 https://github.com/cloudflare/sandbox-sdk/blob/main/.agents/skills/testing/SKILL.md
官方文档 https://developers.cloudflare.com/sandbox/

总结

回头看这个 skill,它真正的启示是:给 AI 写说明书,和给新人工程师写 onboarding 文档是同一件事。你要告诉它的不是”测试很重要”,而是这个仓库的测试在哪、怎么跑,哪里会踩坑,出了问题别慌。Cloudflare 把 21 次安装之外的所有心思,都花在了把隐性知识显性化上。

对你而言,值得带走的是这套写法。如果你在维护一个有明确测试约定的仓库,照这个模式写一份项目级测试 skill:目录结构、命令清单、mock 策略和已知缺陷,四样齐全就能让 AI 干活像个老手。不要贪多,别想着通用。

下一步可以去看 superpowers 系列的方法论 skill,它们和这种项目级 skill 是互补关系,一个负责”怎么测”,一个负责”测什么”。把这两层拼起来,才是完整的测试智能体能力拼图。

skills资源开源项目

Book-to-skill:把一本 400 页的技术书,编译成 Agent 按需加载的技能

2026-8-19 12:42:28

行业动态

Open Claw 劈出的第三条路

2026-3-16 8:26:01

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧