TestPilot 是开源的吗?一文分清 584 个同名项目与那个没开源的商业版

搜「TestPilot」,你会撞上一个非常混乱的局面:GitHub 上共有 584 个名字里带 testpilot 的仓库,从浏览器实验平台、企业软件测试机器人,一直到 Comma AI 自动驾驶的模拟分支,全都叫这个名字。而其中最有名的那个 —— GitHub Next 出品的 AI 单元测试生成器 —— 已经是归档状态。

所以这个问题得拆成两问:TestPilot 开源吗?以及,你说的是哪一个 TestPilot?本文按 GitHub 官方接口与项目官方页核实,把主流的几个一次分清。

先给结论:是开源的,而且是最宽松的 MIT

最有代表性的那个,是 GitHub Next(GitHub 官方的前沿探索团队)做的 TestPilot,仓库地址 githubnext/testpilot。它的官方项目页在「阶段」一栏明确标注为 Open Sourced,发布时间写作 2022 年 10 月;仓库采用 MIT 许可,作者是 Max Schäfer、Sarah Nadi、Frank Tip。

但有三件事必须同时说清楚,否则容易白高兴一场:

  • 它已归档。仓库的 archived 标记为真,最后一次代码推送停在 2025 年 2 月 3 日。归档意味着只读,不再维护、不接新的 issue 和 PR。
  • 它自我定位是「早期探索」。README 原话是,TestPilot 是 LLM 用于测试生成的一次早期探索,开放源码是为了研究和探索;日常使用,Copilot Chat 里的测试生成功能效果会更好。官方自己劝退,这很罕见也很坦诚。
  • 它的 package.json 版本号是 0.0.1。不是「1.0 之前的预览版」,是从未打算发正式版的研究原型。而且它只以源码仓库和预构建压缩包的形式提供,并没有发布到 npm 官方仓库。

截至发稿,它拿到约 564 颗 Star、55 次 fork,主要语言是 TypeScript。

它到底做什么:不用任何样例,也不做微调

TestPilot 的目标很具体 —— 给 JavaScript / TypeScript 的 npm 包自动生成单元测试。

它的做法可以概括成一条闭环:拿定一个待测函数 f,把 f 的签名、函数体,以及从项目文档里自动挖出来的用法示例,一起塞进一个测试骨架的提示词里发给大模型;模型返回的内容被解析、翻译成可运行的测试;可选项是跑一次,如果失败,就把失败信息和报错内容回喂给模型,让它自己改一版。

真正让它区别于同期方案的是这句:它不需要额外的训练、不需要强化学习,也不需要任何「函数 + 对应测试」的成对样例。这个特性在当时的主流思路里是反着来的 —— 那会儿大家忙着做微调或 few-shot,用现成测试样例教会模型「测试长什么样」。TestPilot 选了另一条路:只把待测代码和文档给模型,让它现场推理。

论文里的一手数字:覆盖率和「不像抄的」

配套论文《An Empirical Evaluation of Using Large Language Models for Automated Unit Test Generation》(arXiv:2302.06527,2023 年 2 月首次提交,2023 年 12 月更新到第 4 版)给出了实测量化结果。评估规模是 25 个 npm 包、共 1,684 个 API 函数,用的模型是 gpt-3.5-turbo:

  • 中位语句覆盖率 70.2%,分支覆盖率 52.8%。
  • 对比同期的反馈式 JavaScript 测试生成技术 Nessie:语句 51.3%、分支 25.6% —— 差距相当明显。
  • 换模型会掉但不会崩:OpenAI 较早的 code-cushman-002 拿到 68.2%,开源模型 StarCoder 拿到 54.0%。论文的结论是,效果受模型规模和训练集影响,但不根本依赖某个特定模型。
  • 还有一个有意思的指标:92.8% 的生成测试与已有测试的相似度不超过 50%(按归一化编辑距离衡量),且没有一个是逐字复制。这直接回应了「AI 生成测试是不是在抄现成测试」的质疑。

官方项目页另给了一组单包示例,可以看清波动范围:zip-a-folder 88.0%、simple-statistics 80.1%、image-downloader 75.8%、bluebird 68.2%、js-sdsl 36.5%。最低那个只有三成多 —— 这类工具的表现跟包本身的文档质量强相关,文档里示例写得越清楚,生成的测试越准。

续作 TestPilot 2:换了模型接口,也没再做起来

原版 TestPilot 依赖的是 Codex 风格的补全接口。这类接口后来基本退市了,原版于是在实际环境里越来越不好跑通。于是东北大学(Northeastern University)的研究者做了 neu-se/testpilot2,也就是 TestPilot 2。

它同样是 MIT 许可、同样只做 JavaScript / TypeScript 的 npm 包、同样走「不需要额外训练、不需要样例」的路线,核心改动只有一条:从补全模型改成对话模型。README 里给的示例接口已经换成了 Perplexity 的 chat completions 地址。

不过它的热度也不高:约 38 颗 Star,2024 年 6 月建库,最后一次推送停在 2024 年 7 月。换句话说,这条「GitHub Next 系」的 TestPilot 血脉,目前都处于不活跃状态。

同名辨析:这些「TestPilot」互相毫无关系

按 Star 数排序,当前 GitHub 上几个主要同名项目是这样的:

  • githubnext/testpilot(约 564★,MIT,已归档)—— 本文主角,AI 生成 JS/TS 单元测试。
  • mozilla/testpilot(约 250★,已归档)—— Mozilla 的 Firefox 实验平台,用来灰度测试新产品概念并收集反馈,2015 年建库。跟 AI 测试生成完全无关。
  • walker0012025/API-TestPilot(约 66★,Apache-2.0)—— 国产项目,定位是「AI 驱动的高效接口测试用例生成模型」,做的是 API 测试用例,不是单元测试。
  • ROCTUP/1c-testpilot(约 52★,AGPL-3.0)—— 给 1C 企业软件做测试的 MCP 服务器,生态相当垂直,2026 年 9 月才建库,仍在更新。
  • fugazi/testpilot-ai(约 14★,MIT)—— 分析 Web 应用并生成 Playwright 测试套件。
  • H0nGzA1/testpilot(约 14★,MIT)—— 浏览器 agent 执行自然语言测试用例的端到端测试平台。

如果继续往下翻,还会遇到叫 TestPilot 的 Chrome / Firefox 表单填充插件、iOS 与 macOS 的单元测试框架(通过 CocoaPods 分发)、Flutter 测试框架,以及一个基于 Comma AI OpenPilot 的同步仿真分支。除了名字,它们之间没有任何关联。

Jetify TestPilot 提醒:别下错,这个没开源

这里有个特别容易踩的坑。搜「TestPilot AI 测试」,搜索结果里曝光度很高的还有一个 Jetify TestPilot —— 它在 2025 年 1 月发布,自称「AI QA 工程师」,能从一个网址出发自动访问你的应用、生成并执行测试计划、每天出 bug 报告,官网还列了 60%~70% 的人工测试覆盖宣称。

但它不是开源项目。我们查了 Jetify 的 GitHub 组织(jetify-com)全部 17 个公开仓库,没有任何一个仓库名里含 pilot。Jetify 确实开源了不少东西(Devbox、typeid、tyson 等),但 TestPilot 不在其中 —— 它是商业产品,分档收费、有免费试用。产品页在 jetify.com,跟 GitHub Next 那个是完全不同的两个东西。

所以这里要划一条清晰的线:想找开源方案,去 GitHub 上的 githubnext/testpilot 或 neu-se/testpilot2;看到 jetify.com 上那个,是商业服务,不需要 clone 什么。

想跑一下原版,怎么做

如果你确实想动手跑一遍 GitHub Next 那版(请注意它已归档,且需要自行准备模型接口):

  1. 克隆并构建。在仓库根目录执行 npm run build。这一步会先跑 npm i 装依赖,再用 tsc 分别编译 src/ 和 benchmark/ 两个目录。想边改边编可以用 npm run build:watch。
  2. 配置模型接口。需要设置两个环境变量:TESTPILOT_LLM_API_ENDPOINT 指向你的 LLM 补全接口地址,TESTPILOT_LLM_AUTH_HEADERS 是一个 JSON 字符串,放认证请求头。注意原版的口径是补全风格接口,官方示例给的是 OpenAI 的 code-cushman 系列地址。
  3. 跑评测。命令是 node benchmark/run.js --outputDir <报告目录> --package <你的包目录>,它会对该包导出的所有函数生成测试、逐个验证,并把结果写进报告目录。前提是该包的依赖已经装好、构建步骤已经跑过;TestPilot 还依赖 mocha,如果被测包本身没依赖它,需要单独装上。
  4. 没有 API 也能跑。它支持「复现模式」,通过 --api 和 --responses 两个参数复用上一次运行留下的接口请求与模型响应,不联网也能重放一遍,适合做研究和对照实验。

几个必须先知道的边界

  • 只支持 JavaScript / TypeScript 的 npm 包,其他语言没有覆盖。
  • 结果不确定。README 直接写明:同一个包、同一台机器跑多次,你会得到不同结果。为此 benchmark 才需要提供请求与响应的回放机制。
  • 接口形态可能已经过时。原版依赖 Codex 风格补全接口,这在今天已经不好找 —— 这正是 TestPilot 2 转向对话模型的原因。真要用,建议直接看 TestPilot 2。
  • 论文数字不等于今天的水平。70.2% 这个中位语句覆盖率,是 2023 年用 gpt-3.5-turbo 在 25 个包上测出来的历史结果,不要拿它来对标今天任何一款工具。
  • 归档意味着不会修。遇到问题不会有官方响应,也别指望合并 PR。

一句话总结

TestPilot 是开源的(MIT),但你要清楚自己找的是哪一个:GitHub Next 那版是研究原型、已经归档,官方自己推荐日常改用 Copilot Chat;延续它思路的 TestPilot 2 换了对话模型接口,同样 MIT,但也不活跃;而曝光度很高的 Jetify TestPilot 是商业产品,并未开源。搜这个名字之前,先确认主体,比看懂代码更重要。

本文事实来源为 GitHub 官方 API(仓库元数据、文件树、package.json)、GitHub Next 项目官方页、arXiv 论文原文与 Jetify 官方文档;Star 数等指标为发稿时快照,会随时间变化,具体以官方页面为准。

腾讯云精选福利

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注