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>

编辑推荐精选

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

下拉加载更多