測試 CQ 中的不穩定性

為了在 CQ 中測試不穩定性,基礎架構可以多次執行測試,並在發生單一失敗時,讓整體建構失敗。當基礎架構判斷 (根據建構圖表) 受測試的提交內容只會影響少數測試時,系統就會自動執行此動作。

格式

變更作者可以在提交訊息中加入 Multiply 頁尾,指示基礎架構多次執行特定測試:

Multiply: test_selector

test_selector 可以是測試名稱、測試名稱的子字串,或是與測試名稱相符的 re2 規則運算式

Fuchsia 元件測試會透過套件網址參照:

Multiply: fuchsia-pkg://fuchsia.com/foo_tests#meta/foo_tests.cm

主機測試會透過路徑參照:

Multiply: host_x64/obj/src/bar_tests.sh

系統也接受測試名稱的子字串:

Multiply: foo_tests
Multiply: bar_tests

乘數可合併為單一以半形逗號分隔的行:

Multiply: foo_tests, bar_tests

系統也接受全大寫的 MULTIPLY

使用實際變更的 Multiply 範例:

執行次數

根據預設,基礎架構會使用歷來測試時間長度資料來計算執行次數。您可以選擇執行次數,產生單一乘數測試資料分割,其持續時間與其他資料分割的預期持續時間相近,最多可執行 2000 次測試。執行速度較慢的測試會執行的次數較少,而執行速度較快的測試會執行的次數較多。

有時候您可能需要覆寫預設的執行次數 (例如,因為預設值太高而導致逾時)。在這種情況下,您可以明確指定執行次數。例如:

Multiply: foo_tests: 100

限制

驗證

如果 Multiply 子句有錯字,或是 Multiply 選取器無法在任何建構工具上符合任何測試,則會在無聲音的情況下,無法將任何測試相乘。

因此,請務必手動驗證 Multiply 是否生效。對於 Multiply 生效的每個建構工具,Gerrit 都會在您的變更中新增下列表單的註解:

A builder created multiplier shards. Click the following link for more details:

留言會附上執行多次測試的版本連結 (示例)。

如果沒有顯示這類註解,則語法可能有誤,或是測試無法在任何一般 CQ 建構工具中執行。在這種情況下,您必須將其加入建構圖表,讓其中一個建構工具執行該工作,或者手動選擇執行測試的 tryjob,如果是在選用建構工具中執行,則可執行該 tryjob。

如果已完成連結的建構作業,您應該會在 passesflakesfailures 步驟下方看到 multiplied:<shard name>-<test name> 等步驟。如果尚未完成建構作業,您可以按一下名為 <builder name>-subbuildbuild 步驟下方的連結,前往子建構作業頁面,您應該會在該頁面中看到類似的 multiplied 步驟。由於註解未指定要乘以哪些測試,您可以查看建構頁面來確認 (如果您乘以多個測試)。

例如:

多重分片螢幕截圖

最多五個相符的測試

單一調節係數不得比對超過五項測試,以免變更作者不小心將大量測試乘以調節係數,導致測試基礎架構不堪負荷。

如果 Multiply 陳述式與太多測試相符,導致 tryjob 失敗,只要在本機或 Gerrit UI 中編輯您的提交訊息,即可讓測試選取器更具體。然後重試 CQ。

在 CQ 模擬測試通過後變更 Multiply

如果所有試作業都已通過 CQ 模擬執行,且您在未對程式碼進行任何變更的情況下新增或編輯 Multiply 子句,在模擬執行後的 24 小時內,後續的 CQ+1 或 CQ+2 嘗試將不會重新執行建構工具,且不會採用更新的 Multiply 子句。

這是因為 CQ 服務會將提交訊息更新視為「瑣碎」,且不會使修補程式集合中先前的 CQ 嘗試失效。

如要解決這個問題,您可以採取下列任一做法:

  • 使用「Choose Tryjobs」選單手動重試部分 TryJob,並等待通過後再提交。
  • 或者,您可以嘗試執行所有 tryjob,方法是進行非功能性的程式碼變更 (例如在某些程式碼中新增註解),然後上傳新的修補程式集,以便讓舊的 tryjob 結果失效。然後重試 CQ,並顯示 Multiply 頁尾。

逾時

乘數測試的預設執行次數是根據測試的歷來時間長度。如果變更會增加乘數測試的時間長度,預設執行次數可能會過高,導致執行測試的任務逾時,並不會回報任何結果。

在這種情況下,您應手動指定較低的執行次數,以便覆寫預設執行次數,例如:

Multiply: foo_tests: 30

沒有測試案例調節係數

Multiply 僅支援頂層套件的相乘運算 (Fuchsia 測試套件和主機測試可執行檔)。在倍增測試套件中,所有測試案例都會倍增。

無法在測試套件中複製單一測試案例。