Jeśli korpus testowy jest duży lub czas wykonywania jest długi, oferujemy możliwość podziału testów na kilka urządzeń: fragmentacja.
Fragmentacja ma wymagania wstępne dla biegu testowego na potrzeby obsługi fragmentacji.
Większość głównych uczestników testu już obsługuje fragmentację, więc nie ma dodatkowych co jest wymagane. Obsługują już one fragmentację: testy z instrumentacją, testów po stronie hosta, GTest.
W ramach Tradefed obsługujemy 2 rodzaje fragmentacji: lokalne i rozproszone. Łączy je podobieństwo między nimi, więc na tej stronie opisujemy wspólne właściwości i elementy, potem poznać specyfikę każdego z nich.
Właściwości wspólne
Obie formy fragmentacji przyjmują te same właściwości co uczestnicy testu: fragmenty muszą być niezależne i deterministyczne. Pierwszym krokiem w obu przypadkach jest utworzenie pełnej uporządkowanej listy testów, a potem podzielenie ich na różne grupy.
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 segmenty
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 wykonywany poprzedni test). Dzięki temu urządzenie będzie działać wydajniej. Nazywamy to też dynamicznym dzieleniem na części.
Opcje
--shard-count XX
Fragmentacja rozproszona
Dystrybutowane dzielenie 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. W związku z tym wszystkie rozproszone fragmenty najpierw tworzą tę samą listę, a potem wykonują jej podzbiór, co powoduje wykonanie wszystkich testów.
Główną cechą tej formy jest to, że fragmenty nie są ze sobą w żaden sposób powiązane i mogą działać niezależnie.
Główną wadą jest to, że długość fragmentu nie musi być zrównoważona po prostu ponieważ nie możemy przewidzieć z wyprzedzeniem czasu działania każdego testu w każdym fragmencie. Rozkład obejmuje mniej więcej taką samą liczbę przypadków testowych we wszystkich fragmentach.
Opcje
--shard-count XX --shard-index XX
Fragmentacja tokenów
Dzielenie tokenów można stosować tylko w przypadku dzielenia na segmenty lokalne. Ten parametr nie działa w przypadku przypadków użycia z nielokalnym dzieleniem na fragmenty. Czasami jedno z urządzeń udział w fragmentacji gromadzi specjalne zasoby, których inni nie mają, takie jak karta SIM Niektóre testy mogą działać tylko wtedy, gdy dostępne są te specjalne zasoby. w przeciwnym razie nie uda się.
Dzielenie tokenów to nasze rozwiązanie na takie przypadki użycia. Moduły testowe mogą:
zadeklarować w AndroidTest.xml
, jakich specjalnych zasobów potrzebuje,
Tradefed kieruje testy do urządzenia z zasobem.
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 żadne urządzenie nie może przeprowadzić testu?
Jeśli żadne dostępne urządzenia nie mają zasobu pasującego do modułu testowego, Moduł testowy zakończył się niepowodzeniem i został pominięty, bo 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