Fragmentacja testowa

W przypadku, gdy korpus testowy jest duży lub czas realizacji wydłuża się, oferujemy możliwość rozdzielenia testów na kilka urządzeń: sharding .

Fragmentowanie ma wymagania wstępne , aby uruchamiający test mógł obsługiwać fragmentowanie.

Większość głównych programów testowych obsługuje już sharding, więc nie jest wymagana żadna dodatkowa praca. Obsługują one już sharding: testy oprzyrządowania, testy sterowane po stronie hosta, GTest.

W Tradefed obsługujemy dwa rodzaje fragmentowania: lokalne i rozproszone. Mają pewne podobieństwa, dlatego na tej stronie opisano wspólne właściwości, a następnie specyfikę każdego z nich.

Wspólne właściwości

Obie formy shardingu przyjmują od biegaczy testów te same właściwości: fragmenty muszą być niezależne i deterministyczne . Pierwszym krokiem w przypadku obu fragmentów jest zbudowanie kompletnej uporządkowanej listy testów, a następnie podzielenie ich na różne grupy/fragmenty.

Główna różnica między formami shardingu polega na sposobie wykonywania testów. Więcej szczegółów w poniższych sekcjach.

Lokalne sharding

Dzielenie lokalne oznacza, że ​​wszystkie urządzenia biorące udział w wykonywaniu wywołania podzielonego na fragmenty są podłączone do tego samego hosta fizycznego.

Wykonanie

Lokalne sharding wykorzystuje fakt, że wszystkie urządzenia są podłączone do tego samego hosta, tworząc pulę testów, które należy wykonać, i przeprowadzając testy odpytywania każdego urządzenia, gdy jest ono wolne (to znaczy wykonuje się je w ramach poprzedniego testu). Skutkuje to zoptymalizowanym wykorzystaniem urządzenia. Nazywamy to również dynamicznym shardingiem .

Opcje

--shard-count XX

Rozproszone sharding

Rozproszony sharding oznacza, że ​​wszystkie urządzenia biorące udział w wykonywaniu wywołania podzielonego na fragmenty mogą znajdować się w dowolnym miejscu i być podłączone do różnych hostów fizycznych.

Wykonanie

Rozproszone fragmentowanie ma miejsce podczas tworzenia listy testów, a zawartość każdego fragmentu wykonuje tylko aktualnie żądany fragment. Zatem wszystkie rozproszone fragmenty tworzą najpierw tę samą listę, a następnie wykonują jej wzajemnie wykluczający się podzbiór, co skutkuje wykonaniem wszystkich testów.

Główną właściwością tej formy jest to, że odłamki są całkowicie nieświadome siebie nawzajem i mogą zawieść niezależnie.

Główną wadą jest to, że długość fragmentu niekoniecznie jest zrównoważona po prostu dlatego, że nie możemy z góry przewidzieć czasu wykonania każdego testu w każdym fragmencie. Rozkład odbywa się w taki sposób, aby w każdym fragmencie znajdowała się w przybliżeniu taka sama liczba przypadków testowych.

Opcje

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

Fragmentowanie tokenu

Fragmentowania tokenu można używać tylko z fragmentowaniem lokalnym. Flaga nie działa w przypadkach użycia fragmentowania nielokalnego. Czasami jedno z urządzeń biorących udział w fragmentowaniu przechowuje specjalne zasoby, których nie mają inne, takie jak karta SIM. Niektóre testy mogą działać tylko wtedy, gdy dostępny jest ten specjalny zasób, i w przeciwnym razie zakończyłyby się niepowodzeniem.

Naszym rozwiązaniem w takich przypadkach jest dzielenie tokenów. Moduły testowe mogą zadeklarować, jakiego specjalnego zasobu potrzebują w pliku AndroidTest.xml , a Tradefed kieruje testy do urządzenia, które ma ten zasób.

Konfiguracja XML

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

value tokena jest zgodna z TokenProperty firmy Tradefed i jest powiązana z procedurą obsługi w TokenProviderHelper .

Pozwala to na uruchamianie modułów testowych na urządzeniach, które mogą poprawnie wykonać testy.

Co się stanie, jeśli żadne urządzenie nie będzie mogło przeprowadzić testu?

Jeśli żadne dostępne urządzenie nie ma zasobów pasujących do modułu testowego, moduł testowy zakończy się niepowodzeniem i zostanie pominięty, ponieważ nie może zostać poprawnie wykonany.

Na przykład, jeśli moduł testowy żąda uruchomienia karty SIM, ale żadne urządzenie nie ma karty SIM, moduł testowy kończy się niepowodzeniem.

Realizacja

Przekaż tę flagę funkcji do głównego wiersza poleceń Tradefed:

--enable-token-sharding