pythagora

GitHub
1.8k 115 简单 1 次阅读 2天前Apache-2.0开发框架数据工具插件
AI 解读 由 AI 自动生成,仅供参考

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
GPU

未说明

内存

未说明

依赖
notes该工具是一个基于 Node.js 的命令行工具(非 Python 项目),主要用于生成 JavaScript/TypeScript 的单元测试。在 Windows 系统上必须使用 Git Bash 运行命令,不支持 PowerShell。需要配置 OpenAI API Key 或 Pythagora API Key 才能使用。生成的测试用例基于 Jest 框架。该项目已弃用,作者推荐使用 GPT Pilot。
python未说明
Node.js
npm
Jest
pythagora hero image

快速开始

此仓库已弃用 - 我们正在开发 GPT Pilot

Pythagora Logo

Pythagora 致力于让自动化测试
🤖 完全自主 🤖

只需运行一条命令,即可观看 GPT-4 自动生成测试用例


以下内容用于生成单元测试。如需查看关于如何生成集成测试的文档,请点击这里


Visual Studio Code Logo 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 Alpha Demo

Pythagora 单元测试演示(2 分钟)


🔎 示例

以下是一些我们分叉并使用 Pythagora 生成测试的开源仓库示例,方便您直观地了解其实际效果。

  • Lodash

    • 📝 生成 1604 个测试用例
    • 🐞 发现 11 个缺陷(1 个边界条件和 10 个 bug)
    • ⏳️ 运行时长 4 小时

    lodash pythagora 测试结果

  • node-fs-extra

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

    node-fs-extra pythagora 测试结果


🔬 工作原理

当 Pythagora 生成单元测试时,它采用以下流程:

  1. 找到您想要测试的函数
  2. 查找该函数内部调用的所有其他函数
  • 这一步通过 AST(抽象语法树)解析完成
  1. 将您想要测试的函数及其相关函数发送到 Pythagora 服务器,由服务器利用 GPT-4 生成单元测试
  • Pythagora 服务器也是开源的,可在此处找到
  • 您可以在 Pythagora 服务器上的此文件夹中找到相关提示词

📈 扩展现有测试

如果您已经为代码库生成了测试,但只是想提高代码覆盖率或覆盖更多边界条件,只需运行:

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 的过程中,我们有以下几点观察:
      1. 它非常擅长测试边界情况。对于我们为许多仓库创建的测试,这些测试通过测试边界情况立即发现了 bug。
      2. 它最适合测试独立的工具函数。例如,我们尝试为 Lodash 仓库生成测试,结果生成了 1000 个测试,其中只有 40 个需要进一步审查。对于其他非独立的函数,我们计划结合集成测试的记录来生成合适的模拟对象,这样应该可以扩展 Pythagora 的测试范围。
      3. 它当然并不完美,但生成的测试让我很想保留并提交它们。因此,我鼓励你亲自试一试,看看它对你是否有效。如果你这么做了,请通过 电子邮件Discord 告诉我们。我们非常期待听到你的使用体验。



  • 我是否应该审查生成的测试?
    • 当然应该。如上所述,有些测试可能写得不正确,因此在提交之前最好先检查所有测试。尽管如此,我认为这会为你节省大量时间,并帮助你以不同的方式思考代码。



  • 测试能帮助我思考代码——我不想自动生成它们
    • 这正是 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),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

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 真正成长为懂上

159.6k|★★☆☆☆|今天
开发框架Agent语言模型

opencode

OpenCode 是一款开源的 AI 编程助手(Coding Agent),旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件,而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码,还是排查难以定位的 Bug,OpenCode 都能通过自然语言交互高效完成,显著减少开发者在重复性劳动和上下文切换上的时间消耗。 这款工具专为软件开发者、工程师及技术研究人员设计,特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构,这意味着用户可以审查代码逻辑、自定义行为策略,甚至私有化部署以保障数据安全,彻底打破了传统闭源 AI 助手的“黑盒”限制。 在技术体验上,OpenCode 提供了灵活的终端界面(Terminal UI)和正在测试中的桌面应用程序,支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具,安装便捷,并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客,还是渴望提升产出的独立开发者,OpenCode 都提供了一个透明、可信

144.3k|★☆☆☆☆|昨天
Agent插件

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像