首頁 >後端開發 >Golang >如何對多個套件依序執行 Go 測試以避免爭用?

如何對多個套件依序執行 Go 測試以避免爭用?

Patricia Arquette
Patricia Arquette原創
2024-11-04 06:15:29275瀏覽

How to Run Go Tests Sequentially for Multiple Packages to Avoid Contention?

Go:同時執行多個套件的測試:解決爭用

在子目錄下測試多個套件時,使用go test運行單一測試會成功。但是,嘗試使用 go test ./... 同時執行所有測試會導致失敗。此問題源自於存取公共資源(例如共用資料庫)時的潛在爭用。

如果多個測試同時在同一資料庫上執行,則個別測試檔案中使用的全域變數可能會產生爭用。為了防止這種情況,請考慮使用 -parallel 1 標誌。這會強制在每個包中順序執行測試。

儘管使用 -parallel 1,測試仍可能因爭用而失敗。這表明來自不同套件的測試正在同時運行。為了消除套件之間並行的任何可能性,解決方法是使用 bash 腳本或別名手動執行測試。以下命令序列可實現此目的:

find . -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test

此命令列出包含 *.go 檔案的唯一子目錄,並依序對每個子目錄執行 go test。

作為替代方案,可以使用以下 shell 腳本或可以使用alias:

function gotest(){   find  -name '*.go' -printf '%h\n' | sort -u | xargs -n1 -P1 go test; }

透過執行gotest .,可以順序執行目前目錄下的所有測試。

雖然不像go test ./...那麼簡單,但是這個解決方法確保測試跨包順序執行,解決並行測試執行引起的任何爭用問題。

以上是如何對多個套件依序執行 Go 測試以避免爭用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn