測試分割

如果測試集合很大或執行時間變長,我們可能會將測試分割至多部裝置:分割

分割作業有先決條件,測試執行程式才能支援分割作業。

大多數的主要測試執行程式都支援分割作業,因此不需要額外處理。這些功能已支援分割:檢測設備測試、主機端驅動測試、GTest。

Tradefed 支援兩種切割方式:本機和分散式。它們之間有一些相似之處,因此本頁會說明常見的屬性,然後再說明各屬性的具體內容。

常見屬性

兩種切割形式都會假設測試執行程式具有相同的屬性:切割片段必須是「獨立」和「確定性」。兩種分割作業的第一步驟,都是建立完整的測試順序清單,然後將其分割為不同的群組/分割區。

分割表單的主要差異在於執行測試的方式。詳情請參閱以下各節。

本機區塊劃分

「本機區塊劃分」是指執行區塊劃分呼叫時,所有相關裝置都連線至同一個實體主機。

執行

本機區隔功能會利用連線至相同主機的所有裝置,建立需要執行的測試集區,並在每部裝置空閒時 (也就是完成先前測試) 進行輪詢測試。這樣可提升裝置使用率。我們也稱之為動態分割

選項

--shard-count XX

分散式分割

「分散式區塊劃分」是指執行區塊劃分叫用作業的所有裝置都可以位於任何位置,並連線至不同的實體主機。

執行

分散式區塊處理會在建構測試清單時發生,且每個區塊的內容只會執行目前要求的區塊。因此,所有分散式區塊一開始都會建立相同的清單,然後執行其中的互斥子集,進而執行所有測試。

此表單的主要屬性是,每個分片都完全不瞭解彼此,且可能會個別失敗。

主要缺點是,我們無法預先預測每個區塊中每個測試的執行時間,因此區塊長度不一定平衡。分發方式是讓每個分割區大致有相同數量的測試案例。

選項

--shard-count XX --shard-index XX

符記分割

符記區塊只能搭配本機區塊使用。在非本機區塊處理用途中,此旗標無法運作。有時,分割作業涉及的裝置之一會保留其他裝置沒有的特殊資源,例如 SIM 卡。部分測試可能只有在該特殊資源可用時才會運作,否則會失敗。

符記分割是我們針對這類用途的解決方案。測試模組可以在 AndroidTest.xml 中宣告所需的特殊資源,Tradefed 就會將測試重新導向至具有該資源的裝置。

XML 設定

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

權杖的 value 與 Tradefed 的 TokenProperty 相符,並與 TokenProviderHelper 中的處理程序建立關聯。

這樣一來,您就能針對可正確執行測試的裝置執行測試模組。

如果沒有任何裝置可以執行測試,該怎麼辦?

如果沒有任何可用的裝置具有與測試模組相符的資源,則測試模組會因無法正常執行而失敗並略過。

舉例來說,如果測試模組要求使用 SIM 卡執行,但沒有任何裝置有 SIM 卡,則測試模組會失敗。

實作

將這項功能旗標傳遞至主要 Tradefed 指令列:

--enable-token-sharding