為了在 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
範例:
Multiply: driver_development_test
Multiply: ffx_daemon_target_lib_test
Multiply: virtual-keyboard-test
Multiply: text_manager_integration_test: 10
執行次數
根據預設,基礎架構會使用歷來測試時間長度資料來計算執行次數。您可以選擇執行次數,產生單一乘數測試資料分割,其持續時間與其他資料分割的預期持續時間相近,最多可執行 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。
如果已完成連結的建構作業,您應該會在 passes
、flakes
或 failures
步驟下方看到 multiplied:<shard
name>-<test name>
等步驟。如果尚未完成建構作業,您可以按一下名為 <builder name>-subbuild
的 build
步驟下方的連結,前往子建構作業頁面,您應該會在該頁面中看到類似的 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 測試套件和主機測試可執行檔)。在倍增測試套件中,所有測試案例都會倍增。
無法在測試套件中複製單一測試案例。