測試 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。

如果連結的建構已完成,passesflakesfailures 步驟底下應該會顯示 multiplied:<shard name>-<test name> 之類的步驟。如果建構尚未完成,您可以按一下 build 步驟 <builder name>-subbuild 下方的連結,即可前往子建構建構頁面,當中會顯示類似的 multiplied 步驟。由於註解不會指定要將哪些測試相乘,因此您可以查看建構頁面以確認 (如果乘以多個測試)。

例如:

乘以資料分割的螢幕截圖

最多五項相符的測試

單一調節係數最多只能與五項測試進行比對,以免變更作者不小心乘以大量測試,並對測試基礎架構造成負面影響。

如果 Multiply 陳述式與太多測試相符,而造成 tryjob 失敗情形,只要使用本機或 Gerrit UI 編輯修訂版本訊息,就能讓測試選取器更明確。接著重試 CQ。

CQ 模擬測試通過後變更 Multiply

如果所有 tryjobs 都已通過 CQ 模擬測試,而您在未變更任何程式碼的情況下新增或編輯 Multiply 子句,則在模擬測試後的 24 小時內,後續 CQ+1 或 CQ+2 嘗試將無法重新執行建構工具,也不會遵循更新後的 Multiply 子句。

這是因為 CQ 服務會將修訂訊息更新視為「普通」,並不會對修補程式集上的過去 CQ 嘗試失效。

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

  • 使用「Choose tryjobs」(選擇試用工作) 選單以手動重試部分工作,並等到這些工作通過後再提交。
  • 或是變更非功能的程式碼 (例如對某些程式碼加註) 並上傳新的修補程式集,以使舊的試驗結果失效。接著使用 Multiply 頁尾重試 CQ。

逾時

倍數測試的預設執行作業數量,是根據測試的歷來時間計算得出。如果變更增加倍數測試的時間長度,預設執行次數可能會過高,導致執行測試的工作逾時,且不會回報任何結果。

在這種情況下,您應該手動指定較低的執行計數,藉此覆寫預設執行作業計數,例如:

Multiply: foo_tests: 30

沒有測試案例調節係數

Multiply 僅支援頂層套件的乘法 (Fuchsia 測試套件和主機測試執行檔)。系統會將倍數測試套件中的所有測試案例相乘。

無法乘以測試套件中的單一測試案例。