配置分片

此頁面介紹什麼是可能的調整一套房模塊( AndroidTest.xml通過sharding),並獲得在實驗室連續執行過程中的最佳速度性能。我們將嘗試以通用方式描述選項,並說明使用每個選項的理由。

在實驗室中連續運行套件時,套件通常會在多個設備之間進行分片,以減少整體完成時間。線束通常會嘗試平衡每個分片的執行時間以最小化總體完成時間(當最後一個分片完成時);但是由於一些測試的性質,我們並不總是有足夠的內省,需要模塊所有者來調整一些行為。

可分片還是不可分片?

是可能的標記的模塊( AndroidTest.xml )與<option name="not-shardable" value="true" />通知線束,它不應該被分片。

在典型的模塊中,讓線束對您的模塊進行分片(默認行為)是正確的做法。但在某些情況下,您可能希望覆蓋該行為:

  • 當您的模塊設置昂貴時:

對模塊進行分片會導致準備工作(安裝 APK、推送文件等)可能在每個涉及的設備上運行一次。如果您的模塊設置冗長且昂貴,並且與測試的運行時相比不值得複制,您應該將您的模塊標記為不可分片。

  • 當模塊中的測試數量較少時:

對模塊進行分片會導致所有測試用例可能在不同設備上獨立執行。這與第一點有關;如果您的測試數量很少,您可能會在某些分片中進行單個測試或沒有測試,這將使任何準備步驟都非常昂貴。例如,為單個測試用例安裝 APK 通常是不值得的。

儀器測試:最大分片數?

通過儀器測試運行AndroidJUnitTest不暴露於線束多少測試儀器的一部分,直到我們實際安裝和運行的APK。這些操作成本高昂,並且無法在對套件的所有模塊部分進行分片時執行。

該工具可能會過度分片儀器測試並最終得到一些空分片;將儀器測試與六個分片中的五個測試分片會導致五個分片有一個測試,一個分片沒有測試。這些分片中的每一個都需要昂貴的 APK 安裝。

因此,當在儀器測試APK測試的數量很低,標籤與模塊<option name="not-shardable" value="true" />將允許線束知道分片該模塊是不值得的。

AndroidJUnitTest轉輪有一個特殊的選項,允許它來指定碎片其被允許進入碎片的最大數目: <option name="ajur-max-shard" value="5" />

這允許您指定可以對檢測進行分片的最大次數,而不管在調用級別請求的分片數是多少。默認情況下,檢測將被分片為調用所請求的分片數。

例如,如果你的儀器測試APK中只包含兩個測試用例,但你還是要分片的,具有ajur-max-shard的價值2將確保沒有創建空的碎片。