測試資料分割

當測試語料庫很大或執行時間變長時,我們提供了將測試拆分到多個設備上的可能性:分片

分片有測試運行器支援分片的先決條件

大多數主要測試運行程式已經支援分片,因此不需要額外的工作。這些已經支援分片:儀器測試、主機端驅動測試、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