Konfigurowanie podziału na fragmenty

Na tej stronie opisujemy, co można dostosować w module pakietu (AndroidTest.xml) za pomocą dzielenia na fragmenty, aby uzyskać najlepszą wydajność podczas ciągłego wykonywania w laboratorium. Postaramy się opisać opcje w sposób ogólny, podając uzasadnienie użycia każdej z nich.

Podczas ciągłego uruchamiania zestawu testów w laboratorium jest on zwykle dzielony na kilka urządzeń, aby skrócić ogólny czas realizacji. Platforma zwykle próbuje zrównoważyć czas wykonywania każdego fragmentu, aby zminimalizować ogólny czas zakończenia (gdy zakończy się ostatni fragment). Jednak ze względu na charakter niektórych testów nie zawsze mamy wystarczającą możliwość wglądu w dane i musimy poprosić właściciela modułu o dostosowanie niektórych zachowań.

Możliwość podziału na partycje czy nie?

Moduł można oznaczyć tagiem (AndroidTest.xml) z wartością <option name="not-shardable" value="true" />, aby poinformować platformę testową, że nie należy go dzielić na fragmenty.

W typowym module pozwolenie na podział modułu przez narzędzie (domyślne zachowanie) jest właściwym rozwiązaniem. W niektórych przypadkach możesz jednak chcieć zastąpić to zachowanie:

  • Gdy konfiguracja modułu jest kosztowna:

Podział modułu na fragmenty powoduje, że przygotowanie (instalacja pliku APK, przesłanie pliku itp.) może być przeprowadzane raz na każde urządzenie. Jeśli konfiguracja modułu jest długa i kosztowna, a jej powielanie nie jest warte czasu trwania testu, oznacz moduł jako niepodzielny.

  • Gdy liczba testów w module jest mała:

Podział modułu powoduje, że wszystkie przypadki testowe mogą być wykonywane niezależnie na różnych urządzeniach. Jest to związane z pierwszym punktem. Jeśli liczba testów jest mała, w niektórych fragmentach może się okazać, że jest tylko jeden test lub nie ma go wcale, co sprawi, że każdy etap przygotowania będzie dość kosztowny. Na przykład instalowanie pliku APK w przypadku pojedynczego testu zwykle nie jest opłacalne.

Testy z instrumentacją: maksymalna liczba fragmentów?

Test z instrumentacją uruchamiany za pomocą AndroidJUnitTest nie ujawnia platformie testowej, ile testów jest częścią instrumentacji, dopóki nie zainstalujemy i nie uruchomimy pliku APK. Te operacje są kosztowne i nie można ich wykonać w momencie dzielenia na partycje w przypadku wszystkich modułów wchodzących w skład pakietu.

Platforma może podzielić test instrumentacji na zbyt wiele fragmentów, co spowoduje powstanie pustych fragmentów. Podział testu instrumentacji z 5 testami na 6 fragmentów spowoduje powstanie 5 fragmentów z 1 testem i 1 fragmentu bez testów. Każdy z tych fragmentów wymagałby kosztownej instalacji pliku APK.

Jeśli liczba testów w pliku APK testu z instrumentacją jest mała, oznaczenie modułu symbolem <option name="not-shardable" value="true" /> pozwoli platformie testowej określić, że dzielenie tego modułu na części nie jest opłacalne.

AndroidJUnitTest Runner ma specjalną opcję, która pozwala określić maksymalną liczbę fragmentów, na które może podzielić zadanie:<option name="ajur-max-shard" value="5" />

Pozwala to określić maksymalną liczbę podziałów instrumentacji niezależnie od liczby podziałów żądanych na poziomie wywołania. Domyślnie instrumentacja jest dzielona na liczbę fragmentów żądaną w przypadku wywołania.

Jeśli na przykład plik APK testu z instrumentacją zawiera tylko 2 przypadki testowe, ale nadal chcesz go podzielić, wartość ajur-max-shard równa 2 zapewni, że nie utworzysz pustych fragmentów.