目前,我的代碼接收測試執行了半個小時,顯然,當我添加新測試時,這個時間會增加。我嘗試通過測試獲得更好的性能,因為在推送之后,我經常忘記由于測試緩慢而我推送了某些東西?,F在我發現我最大的問題是賽程。這是非常具有描述性的黑火簡介:僅加載和卸載夾具就占用了 93% 的時間,但測試本身卻占用了 5% 的時間。我認為我可以對所有測試使用一組固定裝置,并在每次測試后回滾事務,但我發現,隨著大量測試用例的出現,維護此類數據變得越來越困難 - 添加新的測試用例總是打破一些舊的測試。那么,有什么解決方案可以減少燈具消耗的時間嗎?也許有某種方法可以對每組測試使用原始 SQL 轉儲?或者我應該編寫一個巨大的 shell 腳本來將轉儲恢復到數據庫并單獨運行每組測試?
1 回答

RISEBY
TA貢獻1856條經驗 獲得超5個贊
對此沒有簡單的答案。以下是過去對我有用的一些事情。有些可能不適用于您的應用程序,或者可能沒有意義。我希望這對您有用。
減少每次測試必須加載的夾具數量
定義一組可供所有測試使用的通用數據(用戶、產品、應用程序中的任何數據)。它不一定是“一應俱全”的套裝。更多地將其視為共同點。不應在測試中修改這些數據,或者至少不應以破壞測試的方式修改這些數據。在運行測試套件之前加載此裝置。在每個測試中,僅加載該特定測試所需的附加夾具。
替換 Yii 裝置
我對 Yii 不熟悉,但框架固定加載器通常效率不高。也許使用一些自己的工具會更好。
切換到內存數據庫
通常會快一點甚至很多。
復制數據庫
您可以通過加載夾具一次、創建數據庫的副本然后重新加載來減少加載時間。SQL 轉儲是實現此目的的一種方法。使用 SQLite,您可以簡單地創建數據庫文件的備份并在每次測試之前將其復制回來。
如果我沒猜錯的話,那么你就有一組共享相同數據的測試。您可以為每組創建一個套件。添加一個測試監聽器,該監聽器加載固定裝置并在套件運行之前創建副本,并在每次測試之前恢復備份。
對用例進行單元測試
不完全符合您的要求,但這將大大減少運行測試所需的時間。當您對所有用例進行單元測試時,您需要的端到端測試就會少得多。根據您的架構,目前這可能不可行,但開始努力永遠不會太晚。
- 1 回答
- 0 關注
- 105 瀏覽
添加回答
舉報
0/150
提交
取消