Jeśli korpus testowy jest duży lub czas wykonywania testu jest długi, oferujemy możliwość podzielenia testów na kilka urządzeń: dzielenie na fragmenty.
Dzielenie na partycje ma wymagania wstępne, które musi spełniać narzędzie do uruchamiania testów, aby obsługiwać dzielenie na partycje.
Większość głównych programów do uruchamiania testów obsługuje już dzielenie na części, więc nie trzeba wykonywać żadnych dodatkowych działań. Dzielenie na partycje jest już obsługiwane w przypadku testów instrumentacyjnych, testów sterowanych po stronie hosta i GTest.
W Tradefed obsługujemy 2 rodzaje dzielenia na partycje: lokalne i rozproszone. Mają one pewne podobieństwa, dlatego na tej stronie opisujemy wspólne właściwości, a następnie szczegóły każdego z nich.
Właściwości wspólne
Obie formy dzielenia na fragmenty zakładają te same właściwości narzędzi do uruchamiania testów: fragmenty muszą być niezależne i deterministyczne. Pierwszym krokiem w obu przypadkach jest utworzenie pełnej uporządkowanej listy testów, a następnie podzielenie jej na różne grupy/fragmenty.
Główna różnica między formami dzielenia na fragmenty polega na sposobie wykonywania testów. Więcej informacji znajdziesz w sekcjach poniżej.
Lokalne dzielenie
Lokalne dzielenie oznacza, że wszystkie urządzenia biorące udział w wykonywaniu podzielonego wywołania są połączone z tym samym hostem fizycznym.
Realizacja
Dzielenie lokalne wykorzystuje fakt, że wszystkie urządzenia są połączone z tym samym hostem. Tworzy pulę testów, które należy wykonać, a każde urządzenie sprawdza, czy są dostępne testy, gdy jest wolne (czyli po zakończeniu poprzedniego testu). Dzięki temu urządzenia są optymalnie wykorzystywane. Nazywamy to też dynamicznym dzieleniem na partycje.
Opcje
--shard-count XX
Rozproszone dzielenie na fragmenty
Rozproszone dzielenie na fragmenty oznacza, że wszystkie urządzenia biorące udział w wykonywaniu podzielonego wywołania mogą znajdować się w dowolnym miejscu i być połączone z różnymi hostami fizycznymi.
Realizacja
Rozproszone dzielenie na fragmenty następuje podczas tworzenia listy testów, a zawartość każdego fragmentu wykonuje tylko aktualnie żądany fragment. Wszystkie rozproszone fragmenty najpierw tworzą tę samą listę, a potem wykonują wzajemnie wykluczający się podzbiór tej listy, co powoduje wykonanie wszystkich testów.
Główną cechą tego formularza jest to, że fragmenty nie są ze sobą powiązane i mogą ulec awarii niezależnie od siebie.
Główną wadą jest to, że długość fragmentu nie musi być zrównoważona, ponieważ nie możemy z wyprzedzeniem przewidzieć czasu działania każdego testu w każdym fragmencie. Rozkład jest tak skonstruowany, aby w każdym fragmencie znajdowała się w przybliżeniu taka sama liczba przypadków testowych.
Opcje
--shard-count XX --shard-index XX
Dzielenie tokenów
Dzielenie tokenów można stosować tylko w przypadku dzielenia lokalnego. W przypadku podziału na fragmenty innego niż lokalny flaga nie działa. Czasami jedno z urządzeń biorących udział w dzieleniu ma specjalne zasoby, których nie mają inne, np. kartę SIM. Niektóre testy mogą działać tylko wtedy, gdy ten specjalny zasób jest dostępny, a w przeciwnym razie zakończą się niepowodzeniem.
Naszym rozwiązaniem w takich przypadkach jest dzielenie tokenów. Moduły testowe mogą deklarować, jakich specjalnych zasobów potrzebują w swoim pliku AndroidTest.xml
, a Tradefed kieruje testy na urządzenie, które ma te zasoby.
Konfiguracja XML
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
Wartość value
tokena jest zgodna z wartością TokenProperty
w Tradefed i jest powiązana z procedurą obsługi w TokenProviderHelper
.
Dzięki temu moduły testowe można uruchamiać na urządzeniach, które mogą prawidłowo przeprowadzać testy.
Co zrobić, jeśli żadne urządzenie nie może przeprowadzić testu?
Jeśli żadne dostępne urządzenie nie ma zasobu pasującego do modułu testowego, moduł testowy nie przejdzie testu i zostanie pominięty, ponieważ nie można go prawidłowo wykonać.
Jeśli na przykład moduł testowy wymaga karty SIM do uruchomienia, ale żadne urządzenie nie ma karty SIM, moduł testowy zakończy się niepowodzeniem.
Implementacja
Przekaż tę flagę funkcji do głównego wiersza poleceń Tradefed:
--enable-token-sharding