Go Wiki:測試失敗

如果您發現 Go 專案中的測試失敗,您應該怎麼做?

測試目標

撰寫(並執行)Go 套件測試的目標是了解該套件及其依賴項的行為。

Go 套件的測試失敗可能會提供以下資訊給我們:

某些情況下,測試失敗的原因可能不明確:這可能是由上述兩個以上條件所造成的。就像在科學實驗中重覆實驗一樣,允許測試多次失敗有時可以從特定的失敗模式提供更多資訊。

然而,如果測試失敗且未提供任何新資訊,表示該測試並未發揮其用途。

尋找測試失敗

測試故障通常會從下列管道發現

測試故障分級

一旦我們發現故障,我們需要進行分級。分級的目標是識別

  1. 故障資訊是否為新資訊?
  2. 誰最適合分析故障中的新資訊?

識別新資訊

公開問題中搜尋故障中的關鍵細節開始,例如失敗測試的名稱和/或錯誤文字的其他獨特片段 (例如錯誤代碼)。

如果您找到現有問題,請先查看問題討論,以了解是否已修復故障以及您的故障資訊是否有提供相關新資訊。如果是,請就此提供意見,內容包含

理想情況下,請附上或連結至完整的測試記錄 (可能會放在 <details> 區塊中)。

如果您沒有找到現有問題,請建立一個新問題。

建立問題

貼上 足夠 的測試記錄,讓後續報告者能夠搜尋到這個問題,包括測試名稱及其記錄輸出的任何獨特部分。(如果是冗長的測試記錄—例如包含大量 goroutine 傾印—請考慮張貼較短的摘要和/或將完整的失敗訊息包裝在 <details> 區塊中。)

您可以使用 fetchlogsgreplogs 工具,在建置儀錶板中搜尋類似的故障

# download recent logs
fetchlogs -n 1024 -repo all
# search logs for some regexp describing the failure message
greplogs -l -e $FAILURE_REGEXP

如果故障看似特定於某個套件,請參閱 https://dev.golang.org/owners 以尋找該套件的維護人員,並在問題中提及他們。(如果未列出套件的任何維護人員,請在 https://cs.opensource.google/go 檢查套件的近期歷史記錄,或者升級到可以幫助識別相關維護人員的人員,並考慮用您所瞭解的來更新 維護人員表格!)

如果故障看似特定於 GOOSGOARCH 標籤,請在問題中標註相對應的 GOOS 和/或 GOARCH 標籤,並在問題中提及 @golang/port-maintainers 的相關子團隊。

如果故障看似至少影響一個 第一類埠,請將問題新增到目前的發行里程碑並標註 release-blocker。否則,將問題新增到 待處理 里程碑。

如果故障看似特定於組建模組(例如網路連線問題,或需要系統更新的平台錯誤),請參閱 x/build/dashboard/builders.go 以尋找該組建模組的維護人員,並在問題中提及他們。(對於未列出明確維護人員的組建模組,請改為提及 @golang/release 團隊。)

解決測試故障

針對測試故障提交問題後,相關套件、埠和/或組建模組維護人員應檢查從測試故障中收集到的資訊,並決定如何透過下列任一方法來 解決 該問題:

當維護人員決定降低測試故障的優先順序時,他們會決定 測試的額外失敗不會提供有用的新資訊。在這個時候,測試不再履行其目的,維護人員應抑制故障,通常是透過呼叫 testenv.SkipFlakyt.Skipf

略過測試故障

當我們新增一個呼叫至 testenv.SkipFlaky 時,我們的目標在於移除無法提供新資訊的失敗模式,同時盡可能地保留測試的價值。

將建置元件或埠標示為異常

平台錯誤或核心套件(例如 osnetruntime)中的錯誤可能會影響許多測試,導致無法略過失敗,或在編譯或連結期間顯示為失敗。如果發生此類錯誤,選項會更受限:如果我們無法回復變更、修正或解決根本原因,也不需收集更多資訊,我們只能透過將整個建置元件或平台標示為異常來降低失敗優先順序。

若要將建置元件標示為異常,請編輯其在 x/build/dashboard/builders.go 的組態,以新增 KnownIssue 欄位的議題;請注意,具已知議題的建置元件通常會在控制面板分類期間被略過。

針對 一等埠 的異常建置元件應該將其已知議題標示為 release-blocker,並暫停決定修正建置元件或中斷支援受影響的平台版本。

如果次要埠的所有建置元件都異常,則埠本身可能會被視為異常。 討論 #53060 旨在解決如何處理異常次要埠問題。


本內容是 Go Wiki 的一部分。