此仓库已废弃 - 我们正在开发 GPT Pilot
Pythagora 的使命是使自动化测试
🤖 完全自主 🤖
只需运行一个命令,即可观看使用 GPT-4 创建的测试
以下详细信息用于生成单元测试。要查看如何生成集成测试的文档,请点击这里。
Visual Studio Code 扩展
如果您想使用 Visual Studio Code 扩展试用 Pythagora,可以在这里下载。
🏃💨️ 快速开始
要安装 Pythagora,请运行:
npm i pythagora --save-dev
然后,添加您的 API 密钥,即可开始生成测试。之后,只需从您的仓库根目录运行以下命令:
npx pythagora --unit-tests --func <函数名>
其中 <函数名>
是您想为其生成单元测试的函数名。只需确保您的函数从文件中导出。您可以在下面的选项部分中查看其他选项,如为多个文件或文件夹生成测试。
如果您希望扩展当前测试套件以获得更好的代码覆盖率,可以运行:
npx pythagora --expand-unit-tests --path <您的测试套件路径>
有关扩展现有测试的更多详细信息,请参见下面的扩展现有测试部分。
**注意:**在 Windows 上,请确保使用 Git Bash
运行所有命令,而不是使用 Power Shell
或类似工具
🎞 演示
以下是一些可以帮助您入门的演示视频。
🔎 示例
以下是我们分叉并使用 Pythagora 创建测试的开源仓库示例,您可以轻松看到它的实际应用。
-
- 📝 生成了 1604 个测试
- 🐞 发现了 11 个错误(1 个边缘情况和 10 个 bug)
- ⏳️ 运行时间 4 小时
-
- 📝 生成了 98 个测试
- 🐞 发现了 2 个错误
- ⏳️ 运行时间 30 分钟
🔬 它是如何工作的?
当 Pythagora 生成单元测试时,它使用以下方法:
- 找到您想测试的函数
- 找到该函数内部调用的所有函数
- 这是通过 AST(抽象语法树)解析完成的
- 将您想测试的函数和所有相关函数发送到 Pythagora 服务器,然后使用 GPT-4 生成单元测试
📈 扩展现有测试
如果您已经为您的代码库生成了测试,但只想提高代码覆盖率或覆盖更多边缘情况,只需运行:
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/
⚙️ 配置
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_密钥>
# ▶️ 如何运行单元测试 要运行生成的测试,只需执行 ```bash npx jest ./pythagora_tests/ ``` 或者要运行特定文件或文件夹的测试,执行 `npx jest <文件或文件夹路径>`。目前,Pythagora 仅支持生成 Jest 测试,如果您希望它生成其他框架的测试,请通过 [hi@pythagora.ai](mailto:hi@pythagora.ai) 告诉我们。
📌️ 注意事项
-
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
🤔️ 常见问题
-
这些测试的准确性如何?
- Pythagora 生成的最佳单元测试是那些独立函数。基本上,是那些实际可以进行单元测试的代码部分。例如,看看这个 Pythagora 文件 - 它包含了非常适合单元测试的辅助函数。当我们运行
npx pythagora --unit-tests --path ./src/utils/common.js
时 - 它生成了 145 个测试,其中只有 17 个失败。最令人惊奇的是,只有 6 个测试因为编写不正确而失败,其他 11 个测试发现了代码本身的 bug。您可以在这里查看这些测试。 - 以下是我们在测试 Pythagora 时的一些观察:
- Pythagora 生成的最佳单元测试是那些独立函数。基本上,是那些实际可以进行单元测试的代码部分。例如,看看这个 Pythagora 文件 - 它包含了非常适合单元测试的辅助函数。当我们运行
-
我应该审查生成的测试吗?
- 绝对应该。如上所述,某些测试可能编写不正确,因此最好在提交之前审查所有测试。尽管如此,我认为这将为您节省大量时间,并帮助您以不同的方式思考您的代码。
- 绝对应该。如上所述,某些测试可能编写不正确,因此最好在提交之前审查所有测试。尽管如此,我认为这将为您节省大量时间,并帮助您以不同的方式思考您的代码。
-
测试帮助我思考我的代码 - 我不想自动生成它们
- 这就是 Pythagora 最好的地方 - 它确实帮助您思考代码。只是,您不需要花时间编写测试。这甚至发生在我们这些创建 Pythagora 的人身上 - 我们尽可能快地编写代码,但当我们添加单元测试生成时,我们意识到它无法为某些函数创建测试。因此,我们重构了代码,使其更加模块化,以便可以为其生成单元测试。
- 这就是 Pythagora 最好的地方 - 它确实帮助您思考代码。只是,您不需要花时间编写测试。这甚至发生在我们这些创建 Pythagora 的人身上 - 我们尽可能快地编写代码,但当我们添加单元测试生成时,我们意识到它无法为某些函数创建测试。因此,我们重构了代码,使其更加模块化,以便可以为其生成单元测试。
-
Pythagora 是否限于特定的编程语言或框架?
- Pythagora 主要为 JavaScript 代码生成单元测试。但是,它设计用于处理用 JavaScript、TypeScript 和类似语言编写的代码。如果您希望看到对其他语言或框架的支持,请通过 hi@pythagora.ai 告诉我们。
- Pythagora 主要为 JavaScript 代码生成单元测试。但是,它设计用于处理用 JavaScript、TypeScript 和类似语言编写的代码。如果您希望看到对其他语言或框架的支持,请通过 hi@pythagora.ai 告诉我们。
-
Pythagora 能否也生成集成测试?
- Pythagora 目前专注于生成单元测试。要生成集成测试,您可能需要结合集成测试的记录来生成适当的模拟。我们正在积极探索未来扩展其功能的选项。
- Pythagora 目前专注于生成单元测试。要生成集成测试,您可能需要结合集成测试的记录来生成适当的模拟。我们正在积极探索未来扩展其功能的选项。
-
Pythagora 是否与所有 JavaScript 测试框架兼容?
- 目前,Pythagora 使用 Jest 测试框架生成测试。虽然我们愿意扩展与其他测试框架的兼容性,但 Jest 是目前主要支持的框架。如果您有特定的框架建议,请随时与我们分享。
- 目前,Pythagora 使用 Jest 测试框架生成测试。虽然我们愿意扩展与其他测试框架的兼容性,但 Jest 是目前主要支持的框架。如果您有特定的框架建议,请随时与我们分享。
-
Pythagora 如何处理敏感或专有代码?
- Pythagora 不会在其服务器上存储您的代码,但它会将代码发送到 GPT 和 OpenAI 进行测试生成。如果您的代码包含敏感或专有信息,在将生成的测试提交到您的仓库之前,必须审查这些测试。在使用 Pythagora 处理敏感代码时要谨慎。
- Pythagora 不会在其服务器上存储您的代码,但它会将代码发送到 GPT 和 OpenAI 进行测试生成。如果您的代码包含敏感或专有信息,在将生成的测试提交到您的仓库之前,必须审查这些测试。在使用 Pythagora 处理敏感代码时要谨慎。
-
Pythagora 是否适用于所有类型的项目?
- Pythagora 最适合结构良好的代码和独立函数(如辅助函数)的项目。它在为这些类型的代码生成测试方面表现出色。对于更复杂或非独立的函数,可能需要手动审查和修改。
🏁 Alpha 版本
这是 Pythagora 的 alpha 版本。要获得 beta 版本的更新或者就您希望 Pythagora 支持的技术(框架/数据库)提出建议,您可以 👉 在此添加您的电子邮件/评论 👈 。
🔗 与我们联系
💬 加入我们的 Discord 服务器参与讨论。
📨 通过在此添加您的电子邮件获取新功能和 beta 版本的更新。
🌟 作为一个开源工具,如果您能为 Pythagora 仓库点星,我们将不胜感激 🌟