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 usłudze 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żne i deterministyczne. Pierwszym krokiem w przypadku obu rodzajów podziału jest utworzenie pełnej uporządkowanej listy testów, a następnie podzielenie ich na różne grupy lub segmenty.
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 wykonywany poprzedni test). Dzięki temu urządzenie będzie działać wydajniej. Nazywamy to też dynamicznym dzieleniem.
Opcje
--shard-count XX
Rozproszony podział na fragmenty
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 zawartość każdego fragmentu jest wykonywana 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 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
Dzielenie tokenów
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ń biorących udział w dziedziczeniu zawiera 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. W przeciwnym razie testy się nie ukończą.
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 żadne urządzenie nie może przeprowadzić testu?
Jeśli żadne z dostępnych urządzeń nie ma zasobu pasującego do modułu testowego, moduł testowy nie przechodzi i zostaje pominięty, ponieważ nie może zostać wykonany prawidłowo.
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