Fragmentacja testowa

Jeśli korpus testów jest duży lub czas wykonywania jest długi, możesz podzielić testy na kilka urządzeń: partycjonowanie.

Aby testowanie z użyciem fragmentacji było możliwe, wymagania wstępne dla narzędzia do testowania muszą być spełnione.

Większość głównych narzędzi do testowania obsługuje już dzielenie na części, więc nie trzeba nic więcej robić. Te rozwiązania obsługują już dzielenie: testy instrumentacji, testy po stronie hosta, GTest.

W Tradefed obsługujemy 2 typy dzielenia: lokalne i rozproszone. Mają one pewne podobieństwa, dlatego na tej stronie opisaliśmy wspólne właściwości, a potem szczegółowe informacje o każdej z nich.

Właściwości wspólne

Obie formy dzielenia na części zakładają te same właściwości w przypadku testów: części muszą być niezależnedeterministyczne. Pierwszym krokiem w obu fragmentach jest utworzenie pełnej, uporządkowanej listy testów, a następnie podzielenie ich na różne grupy lub fragmenty.

Główna różnica między formami dzielenia polega na sposobie wykonywania testów. Więcej informacji znajdziesz w sekcjach poniżej.

Lokalny podział na fragmenty

Szczepowanie lokalne oznacza, że wszystkie urządzenia zaangażowane w wykonanie wywołania cząstkowego są połączone z tym samym hostem fizycznym.

Realizacja

Lokalne dzielenie na fragmenty wykorzystuje wszystkie urządzenia połączone z tym samym hostem, tworząc pulę testów, które należy wykonać, i za pomocą każdego urządzenia przeprowadzając testy, gdy jest ono dostępne (czyli gdy nie jest już wykonywany poprzedni test). Pozwala to zoptymalizować wykorzystanie urządzenia. Jest to tzw. fragmentowanie dynamiczne.

Opcje

--shard-count XX

Rozproszony podział na fragmenty

Rozproszony podział na fragmenty oznacza, że wszystkie urządzenia biorące udział w wykonywaniu wywołania podzielonego na fragmenty mogą znajdować się w dowolnym miejscu i być połączone z różnymi fizycznymi hostami.

Realizacja

Rozproszony podział na fragmenty następuje po utworzeniu listy testów, a treści każdego z nich są wykonywane tylko w przypadku aktualnie żądanego fragmentu. Dlatego wszystkie rozproszone fragmenty najpierw tworzą tę samą listę, a potem wykonują jej wzajemnie wykluczające się fragmenty, co powoduje wykonywanie wszystkich testów.

Główną właściwością tego formularza są fragmenty, które nie są sobie wzajemnie i mogą ulegać awarii niezależnie od siebie.

Główną wadą jest to, że długość fragmentu nie jest zrównoważona, ponieważ nie możemy przewidzieć z wyprzedzeniem czasu trwania każdego testu w każdym fragmencie. Rozkład jest tak dobrany, aby w każdym fragmencie znajdowała się mniej więcej taka sama liczba przypadków testowych.

Opcje

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

Fragmentacja tokena

Dzielenie tokenów można stosować tylko w przypadku dzielenia na segmenty lokalne. Ten parametr nie działa w przypadku nielokalnego dzielenia na fragmenty. Czasami jedno z urządzeń objętych fragmentacją zawiera specjalne zasoby, których inne nie dysponują, np. kartę SIM. Niektóre testy mogą działać tylko wtedy, gdy dany specjalny zasób jest dostępny, a w przeciwnym razie zakończy się niepowodzeniem.

Dzielenie tokenów to nasze rozwiązanie na takie przypadki użycia. Moduły testów mogą deklarować, jakiego specjalnego zasobu potrzebują w swoim AndroidTest.xml, a Tradefed kieruje testy na urządzenie, które ma ten zasób.

Konfiguracja XML

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

value tokenu jest zgodny z TokenProperty w Tradefed i jest powiązany z obsługą w TokenProviderHelper.

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

Co zrobić, jeśli nie można przeprowadzić testu na żadnym urządzeniu?

Jeśli żadne dostępne urządzenia nie mają zasobu pasującego do modułu testowego, moduł testowy nie zadziała i zostanie pominięty, ponieważ nie może zostać prawidłowo wykonany.

Jeśli na przykład moduł testowy wymaga użycia karty SIM, ale żadne urządzenie nie ma takiej karty, moduł testowy nie zostanie uruchomiony.

Implementacja

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

--enable-token-sharding