
CrewAI 單元測試從第一個可運行用例到失敗排查【免費下載鏈接】crewAIFramework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks.項目地址: https://gitcode.com/GitHub_Trending/cr/crewAICrewAI 讓多個智能體分工協(xié)作任何一處判斷偏差都可能被整條任務鏈放大。本文帶你走通一次完整的 CrewAI 單元測試閉環(huán)確認環(huán)境、寫出不依賴模型的首個用例、隔離外部調(diào)用、定位失敗原因。先確認測試環(huán)境能跑起來安裝依賴并做基線驗證倉庫根目錄有uv.lock說明依賴由 uv 管理??寺}庫git clone https://gitcode.com/GitHub_Trending/cr/crewAI后執(zhí)行uv sync安裝環(huán)境。別急著看源碼先挑一個輕量用例當基線運行uv run pytest lib/crewai/tests/test_imports.py -q能收集到用例且不報導入錯誤環(huán)境就算就緒??炊夸?conftest.py 的隔離機制根目錄的 conftest.py 注冊了幾個 autouse 夾具每個用例都獲得獨立的臨時存儲目錄寫入CREWAI_STORAGE_DIR環(huán)境變量、清空事件總線狀態(tài)、按順序加載.env.test與本地.env。這意味著用例之間互相不污染你的測試結(jié)果不會因為執(zhí)行順序而改變多智能體測試里偶現(xiàn)失敗的一大來源就被切掉了。寫第一個不依賴模型的用例挑一個確定性的斷言點多智能體測試容易一上來就盯著模型輸出但首個用例應選純邏輯點。lib/crewai/tests/test_task.py 里的 guardrail任務輸出校驗器接收結(jié)果并返回是否通過加修正值二元組參數(shù)檢查就是好例子簽名校驗是確定性的輸入錯、輸出必錯最適合當?shù)谝粋€測試。import pytest from crewai import Task from pydantic import ValidationError def test_bad_guardrail_rejected(): with pytest.raises(ValidationError): Task(description列出5個選題, expected_output要點列表, guardraillambda x, y: (True, x))運行并解讀結(jié)果用-k按名字過濾、-x在首個失敗處停住。這條用例通過說明你已跑完一次最小閉環(huán)構(gòu)造輸入、斷言異常類型、解讀輸出。下一步才考慮需要模型參與的用例。用 cassette 隔離外部模型調(diào)用為什么不能直接打真實接口LLM 響應不穩(wěn)定、消耗費用直接調(diào)用會讓測試忽過忽掛。倉庫的做法是 vcr 錄制真實 HTTP 請求的響應被存成 cassette 文件統(tǒng)一放在 lib/crewai/tests/cassettes/目錄結(jié)構(gòu)鏡像測試文件位置。標了pytest.mark.vcr()的用例運行時直接回放錄好的響應不發(fā)任何真實請求?;胤乓?guī)則與 CI 差異conftest.py里 record_mode 默認是oncecassette 不存在就錄制一次存在就回放而在 CI 環(huán)境檢測到GITHUB_ACTIONS會被強制成none只允許回放。所以本地跑這批 CrewAI mock 測試不需要真實 API key本地能過CI 也能過行為一致。測試失敗時如何定位原因先分清環(huán)境問題和邏輯問題遇到失敗先按三類排查環(huán)境變量缺失看根目錄是否存在.env.test、cassette 缺失新用例第一次運行且本地無錄制權(quán)限、狀態(tài)污染通常被 conftest 的自動夾具擋住出現(xiàn)時檢查是否新加了事件監(jiān)聽。配合-x加上短用例名可以快速二分到具體那條。借助追蹤日志看中間步驟CrewAI 自帶 tracing追蹤機制會記錄每一步的輸入、輸出與耗時。當一個多智能體任務在中間某步失敗時與其反復打印變量不如讀追蹤記錄確認是哪個智能體、哪一次調(diào)用偏離了預期。這套思路同樣適用于線上系統(tǒng)出問題時做 CrewAI 調(diào)試。把 CrewAI pytest 測試接入日常流程只跑改動相關的部分全量套件較慢日常改完代碼先跑受影響的目錄# 只跑任務相關用例失敗即停 uv run pytest lib/crewai/tests/test_task.py -k guardrail -x涉及異步任務改動時再補跑 lib/crewai/tests/task/ 下的對應文件。對齊 CI 的行為.github/workflows/tests.yml 定義了上游的測試流程PR 觸發(fā)、Python 3.10 到 3.13 四個版本乘以 8 個分組的矩陣、cassette 在 CI 上只回放。你本地跑通的標準應當與它一致不依賴錄制權(quán)限、不依賴特定 Python 版本的小技巧。提交前的自檢清單用例能在干凈環(huán)境獨立運行不依賴其他用例的執(zhí)行順序涉及模型調(diào)用的用例走 cassette 回放不需要真實 API key失敗時你能說清楚是環(huán)境問題還是斷言本身失敗只跑過與改動相關的測試文件且知道如何擴展到對應目錄這條新的 CrewAI 單元測試覆蓋了本次改動的核心邏輯而不是只驗證沒報錯【免費下載鏈接】crewAIFramework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks.項目地址: https://gitcode.com/GitHub_Trending/cr/crewAI創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考