Pisanie kodu uruchomienia testów Tradefed

Na tej stronie dowiesz się, jak napisać nowy przebieg testowy w ramach Tradefed.

Tło

Jeśli ciekawi Cię miejsce testów w architekturze Tradefed, zobacz Struktura biegacza do testów.

Nie jest to wymogiem wstępnym napisaniem nowego testu. mogą być zapisane osobno.

Wymagane minimum: wdrożenie interfejsu

Aby zostać uczestnikiem testów Tradefed, należy wdrożyć Interfejs IRemoteTest a dokładniej metodę run(TestInformation testInfo, ITestInvocationListener listener).

Jest to metoda wywoływana przez wiązkę podczas korzystania z mechanizmu uruchamiania testów, podobny do środowiska wykonawczego Java.

Każda część tej metody jest uważana za część uruchomienia uruchamiania testów.

Raportuj wyniki z testera

Metoda run w interfejsie podstawowym daje dostęp do obiektu odbiornika wpisz ITestInvocationListener. Ten obiekt jest kluczem do uporządkowanych raportów z testera do kablem.

Raportując uporządkowane wyniki, osoba wykonująca test ma te właściwości:

  • Sporządź listę wszystkich przeprowadzonych testów, czasu ich trwania oraz ewentualnych zaliczone pojedynczo, nie powiodło się lub miały inne stany.
  • Uwzględniaj w raportach dane związane z testami (w odpowiednich przypadkach), np. wskaźników związanych z instalacją.
  • Dopasowanie do większości narzędzi infrastruktury, np. wyświetlania wyników dane itd.
  • Zwykle łatwiej jest debugować, ponieważ dostępny jest bardziej szczegółowy ślad

Pamiętaj, że raportowanie uporządkowanych wyników jest opcjonalne. biegacz, chce tylko ocenić stan całego przebiegu jako ZAKOŃCZONO lub NIE ZAKOŃCZONO bez żadnych szczegółów dotyczących faktycznego wykonania.

Poniższe zdarzenia mogą być wywoływane dla detektora, aby powiadamiać o użyciu bieżący postęp wykonań:

  • testRunStarted: powiadamia o początkach grupy przypadków testowych, które są powiązane ze sobą.
    • testStarted: powiadamia o rozpoczęciu przypadku testowego.
    • testFailed/testignored: powiadamiaj o zmianie stanu przypadku testowego w toku. Uwzględniany jest przypadek testowy bez żadnej zmiany stanu zaliczono.
    • testEnded: powiadamia o końcu przypadku testowego.
  • testRunFailed: powiadom, że ogólny stan grupy przypadków testowych kończy się niepowodzeniem. Test może być zaliczony lub niezaliczony. niezależnie od wyników przypadków testowych, w zależności od tego, oczekiwanego wykonania. na przykład plik binarny uruchamiający kilka przypadków testowych, może zgłaszać wszystkie przypadki testowe, które zakończyły się powodzeniem, ale z kodem wyjścia błędu (dla każdego z powodów: wyciek plików itp.).
  • testRunEnded: powiadamiaj koniec grupy przypadków testowych.

Utrzymanie i zapewnienie odpowiedniej kolejności wywołań zwrotnych to odpowiedzialnością uruchamiającą proces testowania, na przykład za zapewnienie, Funkcja testRunEnded jest wywoływana w przypadku wyjątku za pomocą klauzuli finally.

Wywołania zwrotne przypadków testowych (testStarted, testEnded itp.) są opcjonalne. Test może odbyć się bez żadnych przypadków testowych.

Być może z pewnością zauważysz, że inspiracją do tej struktury wydarzeń typową strukturę JUnit. Dzięki temu deweloperzy mają do dyspozycji podstawowe informacje, mają zazwyczaj wiedzę na ten temat.

Raportuj logi z testera

Jeśli tworzysz własne zajęcia testowe lub biegacza Tradefed, wdrożysz Test pilotażowy IRemoteTest i uzyskaj ITestInvocationListener za pomocą metody run(). Ten detektor umożliwia rejestrowanie plików w następujący sposób:

    listener.testLog(String dataName, LogDataType type_of_data, InputStreamSource data);

Testowanie na urządzeniu

Minimalny interfejs powyżej pozwala na przeprowadzanie bardzo prostych testów, które są wydzielone i nie wymagają żadnych konkretnych zasobów, np. testów jednostkowych w języku Java.

Autorzy tekstów, którzy chcą przejść do kolejnego etapu testowania urządzeń, muszą mieć tych interfejsów:

  • IDeviceTest umożliwia odbieranie obiektu ITestDevice, który reprezentuje urządzenie testu i udostępnia interfejs API do interakcji z nim.
  • IBuildReceiver umożliwia testowi pobranie obiektu IBuildInfo utworzonego w krok dostawcy kompilacji który zawiera wszystkie informacje i artefakty związane z konfiguracją testu.

Uczestnicy testu są zwykle zainteresowani tymi interfejsami, aby uzyskać artefaktów związanych z wykonaniem, na przykład dodatkowych plików, oraz testowane urządzenie, które będzie celem działania w trakcie wykonywania.

Testowanie na wielu urządzeniach

Tradefed umożliwia jednoczesne przeprowadzanie testów na wielu urządzeniach. To jest przydatne przy testowaniu komponentów, które wymagają interakcji zewnętrznej, np. parowanie telefonu i zegarka.

Aby napisać aplikację biegową do obsługi wielu urządzeń, aby wdrożyć IMultiDeviceTest co pozwoli otrzymać mapę z ITestDevice do IBuildInfo, która zawiera pełną listę reprezentacji urządzeń i powiązanych z nimi informacji o kompilacji.

Metoda ustawiająca z interfejsu będzie zawsze wywoływana przed metodą run, więc można bezpiecznie przyjąć, że struktura będzie dostępna po wywołaniu funkcji run.

Testy znające swoją konfigurację

Niektóre implementacje uruchamiania testów mogą potrzebować informacji o ogólnej konfiguracji do prawidłowego działania, np. metadanych wywołania, co było wcześniej uruchamiane przez target_preparer itd.

Aby to osiągnąć, uruchamiający testy może uzyskać dostęp do obiektu IConfiguration którego częścią i w którym jest wykonywany. Zobacz obiekt konfiguracji aby dowiedzieć się więcej.

W przypadku implementacji mechanizmu uruchamiania testów musisz zastosować IConfigurationReceiver aby otrzymać obiekt IConfiguration.

Elastyczny biegacz testowy

Mogą to zrobić w elastyczny sposób, jeśli mają szczegółową kontrolę nad nimi, np. osoba przeprowadzająca testy JUnit może pojedynczo i wykonuj każdy test jednostkowy.

Dzięki temu szersze pasy i infrastruktura mogą wykorzystać tę dokładną kontrolę. i uruchamiać częściowe uruchamianie testu przy użyciu filtrowania.

Obsługa filtrowania jest opisana w Interfejs ITestFilterReceiver, który umożliwia otrzymywanie zestawów filtrów include i exclude do testów które powinny lub nie powinny działać.

Zgodnie z naszą konwencją przeprowadzany jest test, który pasuje do co najmniej jednego uwzględniaj filtry ORAZ nie pasuje do żadnego z filtrów wykluczania. Jeśli nie, uwzględniaj określone filtry, należy uruchamiać wszystkie testy, o ile nie pasują do żadnego filtry wykluczania.