Testowanie podziału na fragmenty

Gdy korpus testowy jest duży lub czas wykonywania się wydłuża, oferujemy możliwość podzielenia testów na kilka urządzeń – fragmentowanie.

Fragmentowanie ma wymagania wstępne dla narzędzia do testowania, aby obsługiwało fragmentowanie.

Większość głównych narzędzi do testowania obsługuje już fragmentowanie, więc nie trzeba wykonywać żadnych dodatkowych czynności. Fragmentowanie jest już obsługiwane w tych narzędziach: testy z instrumentacją, testy sterowane po stronie hosta, GTest.

W Tradefed obsługujemy 2 rodzaje fragmentowania: 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.

Wspólne właściwości

Obie formy fragmentowania zakładają te same właściwości narzędzi do testowania: 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 fragmentowania polega na sposobie wykonywania testów. Więcej informacji znajdziesz w sekcjach poniżej.

Fragmentowanie lokalne

Fragmentowanie lokalne oznacza, że wszystkie urządzenia biorące udział w wykonywaniu podzielonego wywołania są połączone z tym samym hostem fizycznym.

Wykonanie

Fragmentowanie lokalne wykorzystuje fakt, że wszystkie urządzenia są połączone z tym samym hostem, tworząc pulę testów, które mają zostać wykonane, i sprawiając, że każde urządzenie sprawdza, czy są dostępne testy, gdy jest wolne (czyli gdy zakończy poprzedni test). Dzięki temu urządzenia są optymalnie wykorzystywane. Nazywamy to też fragmentowaniem dynamicznym.

Opcje

--shard-count XX

Fragmentowanie rozproszone

Fragmentowanie rozproszone 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.

Wykonanie

Fragmentowanie rozproszone 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 następnie wykonują jej wzajemnie wykluczający się podzbiór, co powoduje wykonanie wszystkich testów.

Główną cechą tej formy jest to, że fragmenty są od siebie całkowicie niezależne i mogą się nie powieść niezależnie od siebie.

Główną wadą jest to, że długość fragmentu nie musi być zrównoważona, ponieważ nie możemy z góry przewidzieć czasu działania każdego testu w każdym fragmencie. Dystrybucja jest tak skonstruowana, aby w każdym fragmencie znajdowała się mniej więcej taka sama liczba przypadków testowych.

Opcje

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

Fragmentowanie tokenowe

Fragmentowanie tokenowe można stosować tylko w przypadku fragmentowania lokalnego. W przypadku fragmentowania nielokalnego flaga jest nieaktywna. Czasami jedno z urządzeń biorących udział w fragmentowaniu ma specjalne zasoby, których nie mają inne urządzenia, np. kartę SIM. Niektóre testy mogą działać tylko wtedy, gdy ten specjalny zasób jest dostępny, a w przeciwnym razie się nie powiodą.

Fragmentowanie tokenowe to nasze rozwiązanie w takich przypadkach. Moduły testowe mogą deklarować, 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 odpowiada TokenProperty w Tradefed i jest powiązany z modułem obsługi w TokenProviderHelper.

Dzięki temu moduły testowe mogą być uruchamiane na urządzeniach, które mogą prawidłowo wykonywać testy.

Co się stanie, jeśli żadne urządzenie nie może uruchomić testu?

Jeśli żadne z dostępnych urządzeń nie ma zasobu pasującego do modułu testowego, moduł testowy nie powiedzie się i zostanie pominięty, ponieważ nie może się prawidłowo wykonać.

Jeśli na przykład moduł testowy wymaga do uruchomienia karty SIM, ale żadne urządzenie nie ma karty SIM, moduł testowy nie powiedzie się.

Implementacja

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

--enable-token-sharding