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上的工作。