測試資料分割

如果測試語料庫較大或執行時間過長,我們提供將測試分割成多部裝置的功能,即「資料分割」

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

大多數的主要測試執行器皆已支援資料分割,因此無須進行額外工作。上述項目已支援資料分割,包括檢測設備測試、主機端驅動測試、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