TestPilot是一种使用大语言模型(LLM)自动生成用JavaScript/Typescript编写的NPM软件包的单元测试的工具。
请注意,TestPiLot代表了使用LLM进行测试生成的早期探索,并且已在开源中提供作为研究和探索的基础。对于日常使用,Copilot聊天中的测试生成功能可能会产生更好的结果。
TESTPILOT通过用f的骨架提示LLM来生成针对给定功能f的测试,包括有关F中嵌入的f中的f中的信息,例如其签名, f的foss of f of f of Project文档。然后将模型的响应解析并转换为可运行的单元测试。可选地,运行测试,如果失败,则再次提示模型,并提供有关失败测试的其他信息,从而有机会完善测试。
与其他基于LLM的测试生成的系统不同,TestPilot不需要任何其他培训或强化学习,也不需要功能及其相关测试的示例。
有关Arxiv和Ieexplore的详细描述testpilot的研究论文。
通常,为了运行testpilot,您需要访问具有完整API的法典风格的LLM。将TESTPILOT_LLM_API_ENDPOINT环境变量设置为要使用的LLM API端点的URL,并将TESTPILOT_LLM_AUTH_HEADERS为包含您需要使用API进行身份验证的标头的JSON对象。
这些变量的典型值可能是:
TESTPILOT_LLM_API_ENDPOINT='https://api.openai.com/v1/engines/code-cushman-001/completions'TESTPILOT_LLM_AUTH_HEADERS='{"Authorization": "Bearer <your API key>", "OpenAI-Organization": "<your organization ID>"}'但是,请注意,您可以在复制模式下运行testpilot,而无需访问LLM API,其中从先前运行的输出中获取模型响应;有关详细信息,请参见下文。
您可以从预先构建的软件包或来源安装TestPilot。
TestPilot是预先建造的NPM软件包,尽管目前尚未发布到NPM注册表。您可以从存储库中下载Tarball,并以通常的方式安装。请注意,此分布仅包含TestPilot的核心部分,而不包含基准测试线束。
src/ Directory包含用于TestPilot的源代码,该代码用打字稿编写,并将其编译到dist/ Directory中。测试正在test/ ; benchmark/目录包含用于多个NPM软件包运行testpilot的基准线束; ql/包含用于分析结果的CodeQl查询。
在此存储库的结帐的根目录中,运行npm build以安装依赖关系并构建软件包。
您也可以使用npm run build:watch以自动构建代码时自动构建。但是请注意,这不会自动安装依赖项,也不会构建基准测试线束。
使用npm run test来运行测试。为了方便起见,这还将安装依赖项并运行构建。
如果您从源安装TestPilot,则可以使用基准线束在多个软件包上运行testpilot并分析结果。如果您从预构建的软件包中安装TestPilot,目前尚不可用。
基本用法如下:
node benchmark/run.js --outputDir < report_dir > --package < package_dir >这将生成针对软件包在<package_dir>中导出的所有功能的测试,验证它们,并将结果写入<report_dir> 。
请注意,这假设已安装了软件包依赖项并且已经运行了任何构建步骤(例如,使用npm i和npm run build )。 TestPilot还依赖于mocha ,因此,如果正在测试的软件包尚未取决于它,则必须单独安装它,例如使用命令npm i --no-save mocha 。
run-experiment.yml工作流对github动作进行了实验,以您可以下载的工件生成最终报告。 results-all工件都包含所有软件包的结果,而其他工件包含每个软件包的各个结果。
TestPilot的结果是非确定性的,因此,即使您多次从同一台计算机上的同一软件包运行它,您也会获得不同的结果。但是,基准测试线束记录了足够的数据,以便在许多情况下可以重播基准测试。
为此,请使用--api和--responses选项重复使用以前的运行中的API列表和响应:
node benchmark/run.js --outputDir < report_dir > --package < package_dir > --api < api.json > --responses < prompts.json >请注意,默认情况下,如果在响应文件中找不到任何提示,则将失败。如果TestPilot正在完善失败的测试,则通常会发生这种情况,因为在这种情况下,该模型的提示取决于确切的故障消息,该消息可以是特定于系统的(例如,包含本地文件系统路径)或依赖Node.js版本或其他因素。
为了解决这些限制,您可以通过将它们视为从模型中获得的响应来传递--strictResponses false flag handle tress缺少提示。通常,这不会产生与初始运行相同的结果,但在许多情况下就足够了。
ql/queries中的CodeQL查询可用于分析运行实验的结果。有关如何设置CodeQl并运行查询的说明,请参见ql/CodeQL.md 。
该项目是根据MIT开源许可证的条款获得许可的。请参阅MIT以获取完整条款。
TestPilot是一个研究原型,不受正式支持。但是,如果您有疑问或反馈,请提出问题,我们将尽力做出回应。
我们感谢Aryaz Eghbali(@aryaze)在最初版本的TestPilot上的工作。