pythagora
Pythagora 是一款专为 Node.js 应用设计的自动化测试生成工具,旨在利用大语言模型(如 GPT-4)帮助开发者无需编写任何代码即可创建单元测试。它主要解决了手动编写测试用例耗时费力、覆盖率不足以及难以发现隐蔽边界条件错误等痛点,让测试工作变得更加高效和全面。
这款工具非常适合希望提升代码质量但受限于时间的 Node.js 开发者,尤其是那些想要快速为现有函数补充测试或扩展测试覆盖率的团队。用户只需在命令行输入简单指令并指定函数名,Pythagora 便能自动完成任务。
其独特的技术亮点在于结合了抽象语法树(AST)解析技术与大模型能力:它不仅分析目标函数,还能智能识别并提取该函数内部调用的所有相关依赖函数,将这些上下文信息一并发送给服务端,从而生成逻辑严密、高度相关的测试用例。在实际案例中,Pythagora 曾成功为知名库 Lodash 生成了超过 1600 个测试,并发现了多个潜在漏洞。需要注意的是,该项目目前标记为已弃用,核心团队正全力开发其继任者 GPT Pilot,但其展现的“全自动测试生成”理念依然具有重要的参考价值。
使用场景
某电商初创团队的后端工程师正在紧急重构 Node.js 订单处理模块,需要在上线前快速补齐核心函数的单元测试以确保稳定性。
没有 pythagora 时
- 开发人员需手动逐行阅读复杂的异步业务逻辑,耗时数小时才能理清所有分支路径和边界条件。
- 编写覆盖正常流程、异常捕获及边缘情况(如库存不足、支付超时)的测试用例极其繁琐,容易遗漏关键场景。
- 由于项目工期紧张,团队往往被迫牺牲测试覆盖率,导致潜在 Bug 流入生产环境,后期修复成本高昂。
- 维护旧代码的测试套件时,每次修改函数签名都需要同步更新大量硬编码的测试数据,效率低下且易出错。
使用 pythagora 后
- 工程师只需运行一条
npx pythagora --unit-tests命令,pythagora 便自动解析 AST 并识别函数依赖,瞬间生成全套测试草案。 - 基于 GPT-4 的强大推理能力,pythagora 智能覆盖了各种边缘案例和异常抛出场景,显著提升了代码覆盖率。
- 团队在几分钟内即可获得高质量的测试文件,将原本需要数天的手工编写工作压缩至即时完成,大幅加速发布流程。
- 当需要扩展测试范围时,利用
--expand-unit-tests参数,pythagora 能自动分析现有套件并补充缺失的断言,确保持续集成的高效性。
pythagora 通过将繁琐的单元测试编写转化为全自动化的 AI 生成过程,让开发团队能在零手写代码的情况下实现企业级的代码质量保障。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
此仓库已弃用 - 我们正在开发 GPT Pilot
Pythagora 致力于让自动化测试
🤖 完全自主 🤖
只需运行一条命令,即可观看 GPT-4 自动生成测试用例
以下内容用于生成单元测试。如需查看关于如何生成集成测试的文档,请点击这里。
Visual Studio Code 扩展
如果您想通过 Visual Studio Code 扩展试用 Pythagora,可以在此处下载。
🏃💨️ 快速入门
要安装 Pythagora,请运行:
npm i pythagora --save-dev
然后,添加您的 API 密钥,您就可以开始生成测试了。之后,只需在您的仓库根目录下运行以下命令:
npx pythagora --unit-tests --func <FUNCTION_NAME>
其中 <FUNCTION_NAME> 是您想要为其生成单元测试的函数名称。请确保该函数已从文件中导出。您可以在下方的“选项”部分查看更多选项,例如为多个文件或文件夹生成测试。
如果您希望扩展当前的测试套件以获得更好的代码覆盖率,可以运行:
npx pythagora --expand-unit-tests --path <PATH_TO_YOUR_TEST_SUITE>
有关扩展现有测试的更多详细信息,请参阅下方的“扩展现有测试”部分。
注意: 在 Windows 系统上,请务必使用 Git Bash 运行所有命令,而不是 PowerShell 或其他类似工具。
🎞 演示
以下是一些可以帮助您入门的演示视频。
🔎 示例
以下是一些我们分叉并使用 Pythagora 生成测试的开源仓库示例,方便您直观地了解其实际效果。
-
- 📝 生成 1604 个测试用例
- 🐞 发现 11 个缺陷(1 个边界条件和 10 个 bug)
- ⏳️ 运行时长 4 小时

-
- 📝 生成 98 个测试用例
- 🐞 发现 2 个缺陷
- ⏳️ 运行时长 30 分钟

🔬 工作原理
当 Pythagora 生成单元测试时,它采用以下流程:
- 找到您想要测试的函数
- 查找该函数内部调用的所有其他函数
- 这一步通过 AST(抽象语法树)解析完成
- 将您想要测试的函数及其相关函数发送到 Pythagora 服务器,由服务器利用 GPT-4 生成单元测试
📈 扩展现有测试
如果您已经为代码库生成了测试,但只是想提高代码覆盖率或覆盖更多边界条件,只需运行:
npx pythagora --expand-unit-tests --path <PATH_TO_YOUR_TEST_SUITE>
运行此命令时,PATH_TO_YOUR_TEST_SUITE 可以是单个测试文件的路径,也可以是文件夹的路径,文件夹内的所有测试文件都将被处理并扩展。
就这样,尽情享受您提升后的代码覆盖率吧!
📖 选项
要为单个函数生成单元测试,请运行:
npx pythagora --unit-tests --func <FUNCTION_NAME>要为特定文件中的单个函数生成单元测试,请运行:
npx pythagora --unit-tests --func <FUNCTION_NAME> --path ./path/to/file.js要为文件中的所有函数生成单元测试,请运行:
npx pythagora --unit-tests --path ./path/to/file.js要为文件夹中所有文件中的所有函数生成单元测试,请运行:
npx pythagora --unit-tests --path ./path/to/folder/
⚙️ 配置
Pythagora 使用 GPT-4 生成测试,因此您需要拥有 OpenAI API 密钥或 Pythagora API 密钥。您可以在此处获取 Pythagora API 密钥,或在此处获取 OpenAI API 密钥。获取密钥后,可通过以下命令将其添加到 Pythagora 中:
npx pythagora --config --pythagora-api-key <API_KEY>
或者
npx pythagora --config --openai-api-key <API_KEY>
▶️ 如何运行单元测试
要运行生成的测试,您可以简单地执行:
npx jest ./pythagora_tests/
或者,如果要运行特定文件或文件夹中的测试,可以执行 npx jest <PATH_TO_FILE_OR_FOLDER>。目前,Pythagora 仅支持生成 Jest 测试,但如果您希望它能够生成其他框架的测试,请通过 hi@pythagora.ai 告知我们。
📌️ 注意事项
Pythagora 生成的最佳单元测试是那些独立的函数(例如工具函数)。基本上,这些就是真正可以进行单元测试的代码部分。比如,请查看这个 Pythagora 文件——它包含了一些非常适合编写单元测试的工具函数。当我们运行
npx pythagora --unit-tests --path ./src/utils/common.js时,它生成了 145 个测试,其中只有 17 个失败。令人惊喜的是,这 17 个失败中,只有 6 个是因为测试本身写得不正确,而另外 11 个则真正发现了代码中的 bug。你可以在这里查看这些测试 这里。我们不会在服务器上存储你的任何代码。然而,代码会被发送到 GPT 和 OpenAI。以下是他们的 隐私政策。
你想要为其生成测试的函数需要从文件中导出。例如,如果你有一个这样的文件:
function mongoObjToJson(originalObj) { ... } module.exports = { mongoObjToJson };那么,要为
mongoObjToJson函数生成单元测试,你可以运行:npx pythagora --unit-tests --func mongoObjToJson
🤔️ 常见问题解答
- 这些测试有多准确?
- Pythagora 生成的最佳单元测试是那些独立的函数。基本上,这些就是真正可以进行单元测试的代码部分。比如,请查看这个 Pythagora 文件——它包含了一些非常适合编写单元测试的工具函数。当我们运行
npx pythagora --unit-tests --path ./src/utils/common.js时,它生成了 145 个测试,其中只有 17 个失败。令人惊喜的是,这 17 个失败中,只有 6 个是因为测试本身写得不正确,而另外 11 个则真正发现了代码中的 bug。你可以在这里查看这些测试 这里。 - 在测试 Pythagora 的过程中,我们有以下几点观察:
- Pythagora 生成的最佳单元测试是那些独立的函数。基本上,这些就是真正可以进行单元测试的代码部分。比如,请查看这个 Pythagora 文件——它包含了一些非常适合编写单元测试的工具函数。当我们运行
- 我是否应该审查生成的测试?
- 当然应该。如上所述,有些测试可能写得不正确,因此在提交之前最好先检查所有测试。尽管如此,我认为这会为你节省大量时间,并帮助你以不同的方式思考代码。
- 测试能帮助我思考代码——我不想自动生成它们
- 这正是 Pythagora 最好的地方——它确实能帮助你思考代码。只不过你不需要花时间去编写测试而已。这一点对我们自己也适用:我们在开发 Pythagora 时,尽可能快速地编码,但在加入单元测试生成功能后,我们意识到有些函数无法生成测试。于是我们重构了代码,使其更加模块化,以便能够生成单元测试。
- Pythagora 是否仅限于特定的编程语言或框架?
- Pythagora 主要为 JavaScript 代码生成单元测试。不过,它设计用于处理用 JavaScript、TypeScript 及类似语言编写的代码。如果你想看到对其他语言或框架的支持,请告知我们:hi@pythagora.ai。
- Pythagora 是否也能生成集成测试?
- 目前,Pythagora 主要专注于生成单元测试。如果要生成集成测试,你可能需要结合集成测试的记录来生成合适的模拟对象。我们正在积极探索在未来扩展其功能的方法。
- Pythagora 是否兼容所有 JavaScript 测试框架?
- 目前,Pythagora 使用 Jest 测试框架生成测试。虽然我们愿意扩展对其他测试框架的兼容性,但 Jest 是目前主要支持的框架。如果你有特定的框架需求,请随时向我们提出建议。
- Pythagora 如何处理敏感或专有代码?
- Pythagora 不会在其服务器上存储你的代码,但它会将代码发送给 GPT 和 OpenAI 来生成测试。在将生成的测试提交到你的代码库之前,务必仔细审查,尤其是当你的代码包含敏感或专有信息时。使用 Pythagora 处理敏感代码时请务必谨慎。
- Pythagora 是否适用于所有类型的项目?
- Pythagora 最适合用于代码结构良好且包含独立函数(如工具函数)的项目。它在为这类代码生成测试方面表现出色。对于更复杂或非独立的函数,可能需要手动审查和修改。
🏁 Alpha 版本
这是 Pythagora 的 Alpha 版本。若想获取关于 Beta 版发布的更新,或就你希望 Pythagora 支持的 技术栈(框架/数据库)提出建议,你可以 👉 在此添加你的邮箱/留言 👈 。
🔗 联系我们
💬 加入我们的 Discord 服务器参与讨论。
📨 通过 在此添加你的邮箱获取新功能和 Beta 版发布的最新消息。
🌟 作为一款开源工具,如果你能为 Pythagora 仓库点个赞,对我们来说将是莫大的鼓励 🌟
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
opencode
OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
