pythagora

pythagora

GPT-4驱动的自动化测试生成工具Pythagora

Pythagora是一个基于GPT-4的开源自动化测试工具,专注于生成单元测试。它能快速分析JavaScript和TypeScript代码结构,为独立函数创建全面的测试用例,提高代码覆盖率。Pythagora与Jest框架集成,通过简单的命令行操作生成测试套件。该工具目前处于alpha阶段,主要支持单元测试生成,正在探索集成测试的可能性。

Pythagora单元测试GPT-4自动化测试开源工具Github开源项目
<h1 align="center">此仓库已废弃 - 我们正在开发 <a href="https://github.com/Pythagora-io/gpt-pilot">GPT Pilot</h1> <p align=center> <picture> <source media="(prefers-color-scheme: dark)" srcset="https://yellow-cdn.veclightyear.com/2b54e442/8923404b-fd60-418a-aa4e-6dbdeb86fde7.png"> <img height="200px" alt="Pythagora 标志" src="https://yellow-cdn.veclightyear.com/2b54e442/8923404b-fd60-418a-aa4e-6dbdeb86fde7.png"> </picture> </p> <h2 align="center">Pythagora 的使命是使自动化测试<br>🤖 完全自主 🤖</h2> <h3 align="center">只需运行一个命令,即可观看使用 GPT-4 创建的测试</h3> <br>

以下详细信息用于生成单元测试。要查看如何生成集成测试的文档,请点击这里

<br>

<img src="https://yellow-cdn.veclightyear.com/2b54e442/5fc4d028-7efe-4552-b40c-ebca171870d3.png" alt="Visual Studio Code 标志" width="24" height="24"> Visual Studio Code 扩展

如果您想使用 Visual Studio Code 扩展试用 Pythagora,可以在<a href="https://marketplace.visualstudio.com/items?itemName=PythagoraTechnologies.pythagora-vscode-extension">这里</a>下载。

🏃💨️ 快速开始

要安装 Pythagora,请运行:

npm i pythagora --save-dev

然后,添加您的 API 密钥,即可开始生成测试。之后,只需从您的仓库根目录运行以下命令:

npx pythagora --unit-tests --func <函数名>

其中 <函数名> 是您想为其生成单元测试的函数名。只需确保您的函数从文件中导出。您可以在下面的选项部分中查看其他选项,如为多个文件或文件夹生成测试。

<br><br> 如果您希望扩展当前测试套件以获得更好的代码覆盖率,可以运行:

npx pythagora --expand-unit-tests --path <您的测试套件路径>

有关扩展现有测试的更多详细信息,请参见下面的扩展现有测试部分

<br><br>

**注意:**在 Windows 上,请确保使用 Git Bash 运行所有命令,而不是使用 Power Shell 或类似工具

<br>

🎞 演示

以下是一些可以帮助您入门的演示视频。

<div align="center"> <a href="https://youtu.be/NNd08XgFFw4"><img src="https://yellow-cdn.veclightyear.com/2b54e442/b29954f7-6e40-4582-a4f2-d348d4ffed87.gif" alt="Pythagora Alpha 演示"></a> </div> <p align=center> <a target="_blank" href="https://youtu.be/NNd08XgFFw4">Pythagora 单元测试演示(2 分钟)</a> </p> <br>

🔎 示例

以下是我们分叉并使用 Pythagora 创建测试的开源仓库示例,您可以轻松看到它的实际应用。

  • Lodash

    • 📝 生成了 1604 个测试
    • 🐞 发现了 11 个错误(1 个边缘情况和 10 个 bug)
    • ⏳️ 运行时间 4 小时

    lodash pythagora 测试结果

  • node-fs-extra

    • 📝 生成了 98 个测试
    • 🐞 发现了 2 个错误
    • ⏳️ 运行时间 30 分钟

    node-fs-extra pythagora 测试结果

<br>

🔬 它是如何工作的?

当 Pythagora 生成单元测试时,它使用以下方法:

  1. 找到您想测试的函数
  2. 找到该函数内部调用的所有函数
  • 这是通过 AST(抽象语法树)解析完成的
  1. 将您想测试的函数和所有相关函数发送到 Pythagora 服务器,然后使用 GPT-4 生成单元测试
<br>

📈 扩展现有测试

如果您已经为您的代码库生成了测试,但只想提高代码覆盖率或覆盖更多边缘情况,只需运行:

npx pythagora --expand-unit-tests --path <您的测试套件路径>

运行命令时,您的测试套件路径 可以是单个测试文件的路径,也可以是文件夹的路径,该文件夹内的所有测试文件都将被处理和扩展。

就这样,尽情享受您的新代码覆盖率吧!

📖 选项

  • 要为单个函数生成单元测试,请运行:

    npx pythagora --unit-tests --func <函数名>
  • 要为特定文件中的单个函数生成单元测试,请运行:

    npx pythagora --unit-tests --func <函数名> --path ./path/to/file.js
  • 要为文件中的所有函数生成单元测试,请运行:

    npx pythagora --unit-tests --path ./path/to/file.js
  • 要为文件夹中所有文件的所有函数生成单元测试,请运行:

    npx pythagora --unit-tests --path ./path/to/folder/
<br>

⚙️ 配置

Pythagora 使用 GPT-4 生成测试,因此您需要拥有 OpenAI API 密钥或 Pythagora API 密钥。您可以在这里获取 Pythagora API 密钥或在这里获取 OpenAI API 密钥。获得密钥后,使用以下命令将其添加到 Pythagora:

npx pythagora --config --pythagora-api-key <API_密钥>

npx pythagora --config --openai-api-key <API_密钥>
<br> # ▶️ 如何运行单元测试 要运行生成的测试,只需执行 ```bash npx jest ./pythagora_tests/ ``` 或者要运行特定文件或文件夹的测试,执行 `npx jest <文件或文件夹路径>`。目前,Pythagora 仅支持生成 Jest 测试,如果您希望它生成其他框架的测试,请通过 [hi@pythagora.ai](mailto:hi@pythagora.ai) 告诉我们。 <br>

📌️ 注意事项

  • Pythagora 生成的最佳单元测试是那些独立函数(如辅助函数)。基本上,是那些实际可以进行单元测试的代码部分。例如,看看这个 Pythagora 文件 - 它包含了非常适合单元测试的辅助函数。当我们运行 npx pythagora --unit-tests --path ./src/utils/common.js 时 - 它生成了 145 个测试,其中只有 17 个失败。最令人惊奇的是,只有 6 个测试因为编写不正确而失败,其他 11 个测试发现了代码本身的 bug。您可以在这里查看这些测试。

  • 我们不会在我们的服务器上存储您的任何代码。但是,代码会被发送到 GPT,因此也会发送到 OpenAI。这是他们的隐私政策

  • 您想要为其生成测试的函数需要从文件中导出。例如,如果您有这样的文件:

    function mongoObjToJson(originalObj) { ... } module.exports = { mongoObjToJson };

    那么,要为 mongoObjToJson 函数生成单元测试,您可以运行:

    npx pythagora --unit-tests --func mongoObjToJson
<br>

🤔️ 常见问题

  • 这些测试的准确性如何?

    • Pythagora 生成的最佳单元测试是那些独立函数。基本上,是那些实际可以进行单元测试的代码部分。例如,看看这个 Pythagora 文件 - 它包含了非常适合单元测试的辅助函数。当我们运行 npx pythagora --unit-tests --path ./src/utils/common.js 时 - 它生成了 145 个测试,其中只有 17 个失败。最令人惊奇的是,只有 6 个测试因为编写不正确而失败,其他 11 个测试发现了代码本身的 bug。您可以在这里查看这些测试。
    • 以下是我们在测试 Pythagora 时的一些观察:
      1. 它在测试边缘情况方面做得很好。对于我们创建测试的许多仓库,测试通过测试边缘情况立即发现了 bug。
      2. 它最适合测试独立的辅助函数。例如,我们尝试为 Lodash 仓库生成测试,它创建了 1000 个测试,其中只有 40 个需要额外审查。对于其他非独立函数,我们计划结合集成测试的记录来生成适当的模拟,这应该扩展 Pythagora 的测试范围。
      3. 它绝对不是完美的,但它创建的测试我想保留并提交。因此,我鼓励您尝试一下,看看它对您的效果如何。如果您这样做了,请通过电子邮件Discord 告诉我们。我们非常期待听到您的体验。 <br><br>
  • 我应该审查生成的测试吗?

    • 绝对应该。如上所述,某些测试可能编写不正确,因此最好在提交之前审查所有测试。尽管如此,我认为这将为您节省大量时间,并帮助您以不同的方式思考您的代码。 <br><br>
  • 测试帮助我思考我的代码 - 我不想自动生成它们

    • 这就是 Pythagora 最好的地方 - 它确实帮助您思考代码。只是,您不需要花时间编写测试。这甚至发生在我们这些创建 Pythagora 的人身上 - 我们尽可能快地编写代码,但当我们添加单元测试生成时,我们意识到它无法为某些函数创建测试。因此,我们重构了代码,使其更加模块化,以便可以为其生成单元测试。 <br><br>
  • Pythagora 是否限于特定的编程语言或框架?

    • Pythagora 主要为 JavaScript 代码生成单元测试。但是,它设计用于处理用 JavaScript、TypeScript 和类似语言编写的代码。如果您希望看到对其他语言或框架的支持,请通过 hi@pythagora.ai 告诉我们。 <br><br>
  • Pythagora 能否也生成集成测试?

    • Pythagora 目前专注于生成单元测试。要生成集成测试,您可能需要结合集成测试的记录来生成适当的模拟。我们正在积极探索未来扩展其功能的选项。 <br><br>
  • Pythagora 是否与所有 JavaScript 测试框架兼容?

    • 目前,Pythagora 使用 Jest 测试框架生成测试。虽然我们愿意扩展与其他测试框架的兼容性,但 Jest 是目前主要支持的框架。如果您有特定的框架建议,请随时与我们分享。 <br><br>
  • Pythagora 如何处理敏感或专有代码?

    • Pythagora 不会在其服务器上存储您的代码,但它会将代码发送到 GPT 和 OpenAI 进行测试生成。如果您的代码包含敏感或专有信息,在将生成的测试提交到您的仓库之前,必须审查这些测试。在使用 Pythagora 处理敏感代码时要谨慎。 <br><br>
  • Pythagora 是否适用于所有类型的项目?

    • Pythagora 最适合结构良好的代码和独立函数(如辅助函数)的项目。它在为这些类型的代码生成测试方面表现出色。对于更复杂或非独立的函数,可能需要手动审查和修改。

🏁 Alpha 版本

这是 Pythagora 的 alpha 版本。要获得 beta 版本的更新或者<b>就您希望 Pythagora 支持的技术(框架/数据库)提出建议</b>,您可以 👉 <a href="http://eepurl.com/ikg_nT" target="_blank">在此添加您的电子邮件/评论</a> 👈 。 <br>

🔗 与我们联系

💬 加入<a href="https://discord.gg/npC5TAfj6e" target="_blank">我们的 Discord 服务器</a>参与讨论。 <br><br> 📨 通过<a href="http://eepurl.com/ikg_nT" target="_blank">在此添加您的电子邮件</a>获取新功能和 beta 版本的更新。 <br><br> 🌟 作为一个开源工具,如果您能为 Pythagora 仓库点星,我们将不胜感激 🌟 <br><br> <br><br>

<br><br>

编辑推荐精选

暂无图片
Open-R1

Open-R1

一个完全开源重现 DeepSeek - R1 的项目

Open R1 是一个致力于完全开源重现 DeepSeek - R1 的项目。项目提供了训练、评估模型以及生成合成数据的脚本,支持多种训练方法和评估基准测试。用户可以通过简单的命令运行各个步骤,同时还提供了在 Slurm 集群上运行作业的脚本。项目还发布了多个数据集,为模型训练提供了丰富的数据资源,适合对模型训练和评估感兴趣的开发者和研究人员。

OpenManus

OpenManus

一个具备多种工具和代理功能,可用于解决复杂任务规划、网络搜索、浏览器操作等的项目。

OpenManus 是一个功能强大的开源项目,提供了丰富的工具和代理机制。包含规划工具、多种搜索引擎、浏览器操作工具等,能帮助开发者高效解决复杂任务的规划、网络信息搜索以及浏览器自动化操作等问题。支持多种语言,拥有清晰的文档和代码结构,易于集成和扩展,适用于各类需要自动化任务处理的场景。

MarkItDown

MarkItDown

一个支持多种格式转换的工具库

MarkItDown 是一个强大的 Python 工具库,专注于文档格式转换。它能够处理多种类型的文件,如 HTML、Wikipedia 页面以及 Bing 搜索结果页等,将其转换为 Markdown 格式。该项目支持插件扩展,提供了清晰的接口和丰富的功能,为开发者和文档处理人员提供了便捷、高效的文档转换解决方案,能有效提升文档处理效率,是文档转换领域的优秀选择。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
OmniParser

OmniParser

帮助AI理解电脑屏幕 纯视觉GUI元素的自动化解析方案

开源工具通过计算机视觉技术实现图形界面元素的智能识别与结构化处理,支持自动化测试脚本生成和辅助功能开发。项目采用模块化设计,提供API接口与多种输出格式,适用于跨平台应用场景。核心算法优化了元素定位精度,在动态界面和复杂布局场景下保持稳定解析能力。

OmniParser界面解析交互区域检测Github开源项目
Grok3

Grok3

埃隆·马斯克旗下的人工智能公司 xAI 推出的第三代大规模语言模型

Grok3 是由埃隆·马斯克旗下的人工智能公司 xAI 推出的第三代大规模语言模型,常被马斯克称为“地球上最聪明的 AI”。它不仅是在前代产品 Grok 1 和 Grok 2 基础上的一次飞跃,还在多个关键技术上实现了创新突破。

腾讯元宝

腾讯元宝

腾讯自研的混元大模型AI助手

腾讯元宝是腾讯基于自研的混元大模型推出的一款多功能AI应用,旨在通过人工智能技术提升用户在写作、绘画、翻译、编程、搜索、阅读总结等多个领域的工作与生活效率。

AI助手AI对话AI工具腾讯元宝智能体热门 AI 办公助手
Windsurf Wave 3

Windsurf Wave 3

Windsurf Editor推出第三次重大更新Wave 3

新增模型上下文协议支持与智能编辑功能。本次更新包含五项核心改进:支持接入MCP协议扩展工具生态,Tab键智能跳转提升编码效率,Turbo模式实现自动化终端操作,图片拖拽功能优化多模态交互,以及面向付费用户的个性化图标定制。系统同步集成DeepSeek、Gemini等新模型,并通过信用点数机制实现差异化的资源调配。

AI IDE
Cursor

Cursor

增强编程效率的AI代码编辑器

Cursor作为AI驱动的代码编辑工具,助力开发者效率大幅度提升。该工具简化了扩展、主题和键位配置的导入,可靠的隐私保护措施保证代码安全,深受全球开发者信赖。此外,Cursor持续推出更新,不断优化功能和用户体验。

AI开发辅助编程AI工具CursorAI代码编辑器
Manus

Manus

全面超越基准的 AI Agent助手

Manus 是一款通用人工智能代理平台,能够将您的创意和想法迅速转化为实际成果。无论是定制旅行规划、深入的数据分析,还是教育支持与商业决策,Manus 都能高效整合信息,提供精准解决方案。它以直观的交互体验和领先的技术,为用户开启了一个智慧驱动、轻松高效的新时代,让每个灵感都能得到完美落地。

下拉加载更多