Przeprowadzanie testów (Atest)

Atest to narzędzie wiersza poleceń, które umożliwia użytkownikom kompilowanie, instalowanie i uruchamianie testów Androida lokalnie, znacznie przyspieszając ponowne uruchamianie testów bez konieczności znajomości opcji wiersza poleceń Trade Federation test harness. Na tej stronie wyjaśniamy, jak używać Atest do przeprowadzania testów aplikacji na Androida.

Ogólne informacje o pisaniu testów na Androida znajdziesz w artykule Testowanie na platformie Android.

Informacje o ogólnej strukturze interfejsu Atest znajdziesz w przewodniku dla programistów Atest.

Informacje o uruchamianiu testów w plikach TEST_MAPPING za pomocą Atest znajdziesz w artykule Przeprowadzanie testów w plikach TEST_MAPPING.

Aby dodać funkcję do Atest, postępuj zgodnie z przepływem pracy programisty Atest.

Konfigurowanie środowiska

Aby skonfigurować środowisko Atest, wykonaj instrukcje podane w artykułach Konfigurowanie środowiska, Wybieranie celuTworzenie kodu.

Podstawowe wykorzystanie

Polecenia Atest mają taką postać:

atest test-to-run [optional-arguments]

Opcjonalne argumenty

W tabeli poniżej znajdziesz najczęściej używane argumenty. Pełną listę znajdziesz na stronie atest --help.

Option Długa opcja Opis
-b --build Tworzy środowiska docelowe testowe. (domyślna)
-i --install Instaluje artefakty testowe na urządzeniu. (domyślna)
-t --test Przeprowadza testy. (domyślna)
-s --serial Uruchamia testy na określonym urządzeniu. W danym momencie można testować tylko jedno urządzenie.
-d --disable-teardown Wyłącza testowanie i czyszczenie.
--dry-run Testowanie Atest bez faktycznego kompilowania, instalowania i uruchamiania testów.
-m --rebuild-module-info Wymusza ponowne utworzenie pliku module-info.json.
-w --wait-for-debugger Przed wykonaniem czeka na zakończenie debugowania.
-v --verbose Wyświetla logowanie na poziomie DEBUG.
--iterations Zapętla testy aż do osiągnięcia maksymalnej liczby iteracji. (domyślnie 10)
--rerun-until-failure [COUNT=10] Ponownie uruchamia wszystkie testy, aż wystąpi błąd lub osiągnie maksymalną liczbę iteracji. (domyślnie 10)
--retry-any-failure [COUNT=10] Ponownie uruchamia nieudane testy do momentu zaliczenia lub osiągnięcia maksymalnej liczby iteracji. (domyślnie 10)
--start-avd Automatycznie tworzy urządzenie AVD i wykonuje testy na tym urządzeniu.
--acloud-create Tworzy AVD za pomocą polecenia acloud.
--[CUSTOM_ARGS] Określa niestandardowe argumenty dla uczestników testu.
-a --all-abi Przeprowadza testy dla wszystkich dostępnych architektur urządzeń.
--host Test jest wykonywany całkowicie na hoście bez urządzenia.
Uwaga: testowanie hosta, które wymaga urządzenia z --host, zakończy się niepowodzeniem.
--history Wyświetla wyniki testu w kolejności chronologicznej.
--latest-result Wypisuje najnowszy wynik testu.

Więcej informacji o opcjach -b, -i-t znajdziesz w sekcji Określ kroki: kompilowanie, instalowanie lub uruchamianie.

Określanie testów

Aby uruchomić testy, określ co najmniej jeden test za pomocą jednego z tych identyfikatorów:

  • Nazwa modułu
  • Moduł:Klasa
  • Nazwa zajęć
  • Test integracji z użyciem pliku .aab
  • Ścieżka pliku
  • Nazwa pakietu

Odwołania do wielu testów oddziel spacjami, np.

atest test-identifier-1 test-identifier-2

Nazwa modułu

Aby uruchomić cały moduł testowy, użyj jego nazwy. Wpisz nazwę w takiej postaci, w jakiej wyświetla się w zmiennych LOCAL_MODULE lub LOCAL_PACKAGE_NAME w pliku Android.mk lub Android.bp danego testu.

Przykłady:

atest FrameworksServicesTests
atest CtsVideoTestCases

Moduł:klasa

Aby przeprowadzić zajęcia w ramach modułu, użyj opcji Moduł:zajęcia. Module to ten sam parametr, który opisaliśmy w sekcji Nazwa modułu. Class to nazwa klasy testowej w pliku .java. Może to być w pełni kwalifikowana nazwa klasy lub nazwa podstawowa.

Przykłady:

atest CtsVideoTestCases:VideoEncoderDecoderTest
atest FrameworksServicesTests:ScreenDecorWindowTests
atest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests

Nazwa zajęć

Aby uruchomić pojedynczą klasę bez podawania nazwy modułu, użyj nazwy klasy.

Przykłady:

atest ScreenDecorWindowTests
atest VideoEncoderDecoderTest

Test integracji z użyciem pliku .aab

Aby uruchomić testy zintegrowane bezpośrednio z TradeFed (niemoduły), wpisz nazwę tak, jak jest ona widoczna w wyniku polecenia tradefed.sh list configs. Przykład:

Aby uruchomić test reboot.xml:

atest example/reboot

Aby uruchomić test native-benchmark.xml:

atest native-benchmark

Ścieżka pliku

Atest obsługuje uruchamianie testów opartych na module i testów opartych na integracji. W tym celu należy podać ścieżkę do odpowiedniego pliku lub katalogu testowego. Umożliwia też uruchamianie pojedynczej klasy przez podanie ścieżki do pliku Java klasy. Obsługiwane są ścieżki względne i bezwzględne.

Uruchamianie modułu

Poniższe przykłady pokazują 2 sposoby uruchamiania modułu CtsVideoTestCases za pomocą ścieżki pliku.

Uruchamianie z urządzenia z Androidem repo-root:

atest cts/tests/video

Uruchamianie z urządzenia z Androidem repo-root/cts/tests/video:

    atest .

Uruchamianie testowej klasy

Ten przykład pokazuje, jak uruchomić konkretną klasę w module CtsVideoTestCases za pomocą ścieżki pliku.

Z Androida repo-root:

    atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java

Przeprowadzanie testu integracji

Poniższy przykład pokazuje, jak przeprowadzić test integracji za pomocą ścieżki pliku z Androida repo-root:

    atest tools/tradefederation/contrib/res/config/example/reboot.xml

Nazwa pakietu

Atest umożliwia wyszukiwanie testów według nazwy pakietu.

Przykłady:

    atest com.android.server.wm
    atest com.android.uibench.janktests

Określ kroki: kompilacja, instalacja lub uruchomienie

Aby określić, które kroki mają być wykonywane, użyj opcji -b, -i-t. Jeśli nie wybierzesz opcji, zostaną wykonane wszystkie czynności.

  • Tylko środowisko docelowe kompilacji: atest -b test-to-run
  • Przeprowadź tylko testy: atest -t test-to-run
  • Zainstaluj plik APK i przeprowadź testy: atest -it test-to-run
  • Kompilowanie i uruchamianie, ale bez instalowania: atest -bt test-to-run

Atest może zmusić test do pominięcia kroku czyszczenia lub demontażu. Wiele testów, np. CTS, oczyszcza urządzenie po ich uruchomieniu, więc ponowne uruchomienie testu-t nie powiedzie się bez parametru --disable-teardown. Użyj -d przed -t, aby pominąć krok czyszczenia testu i przeprowadzić testy stopniowo.

atest -d test-to-run
atest -t test-to-run

Uruchamianie określonych metod

Atest obsługuje uruchamianie określonych metod w ramach klasy testowej. Chociaż trzeba zbudować cały moduł, skraca to czas potrzebny na przeprowadzenie testów. Aby uruchomić określone metody, zidentyfikuj klasę, korzystając z dowolnej metody identyfikacji klasy (Module:Class, ścieżka pliku itp.) i dołącz nazwę metody:

atest reference-to-class#method1

Jeśli podajesz kilka metod, rozdziel je przecinkami:

atest reference-to-class#method1,method2,method3

Przykłady:

atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecors
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval

Te 2 przykłady pokazują preferowane sposoby uruchamiania pojedynczej metody:testFlagChange. Te przykłady są preferowane zamiast używania nazwy klasy, ponieważ określenie modułu lub lokalizacji pliku Java umożliwia Atest znacznie szybsze znalezienie testu.

Korzystanie z modułu:zajęcia:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange

Na urządzeniu z Androidem repo-root:

atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange

Z różnych klas i modułów można wywoływać wiele metod:

atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors

Prowadź wiele zajęć

Aby uruchomić wiele klas, oddziel je spacjami w taki sam sposób jak w przypadku uruchamiania wielu testów. Atest buduje i uruchamia klasy efektywnie, więc określenie podzbioru klas w module poprawia wydajność w porównaniu z uruchomieniem całego modułu.

Aby uruchomić 2 klasy w tym samym module:

atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests

Aby przeprowadzić 2 zajęcia w różnych modułach:

atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest

Uruchamianie plików binarnych GTest

Atest może uruchamiać pliki binarne GTest. Użyj -a, aby uruchomić te testy dla wszystkich dostępnych architektur urządzeń, czyli w tym przykładzie to armeabi-v7a (32-bitowy ARM) i arm64-v8a (64-bitowy ARM).

Przykładowy test danych wejściowych:

atest -a libinput_tests inputflinger_tests

Aby wybrać do uruchomienia konkretny plik binarny GTest, użyj dwukropka (:), aby określić nazwę testu, i znaku hashtaga (#), aby dokładniej określić poszczególną metodę.

Na przykład w przypadku tej definicji testu:

TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)

Aby określić cały test, wykonaj te czynności:

atest inputflinger_tests:InputDispatcherTest

Możesz też uruchomić pojedynczy test za pomocą tych opcji:

atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents

Przeprowadzanie testów w TEST_MAPPING

Atest może przeprowadzać testy w plikach TEST_MAPPING.

uruchamianie testów przed przesłaniem w sposób domyślny,

Przeprowadzanie testów przed przesłaniem w plikach TEST_MAPPING w bieżącym katalogu i katalogach nadrzędnych:

atest

Przeprowadź testy przed przesłaniem w plikach TEST_MAPPING w katalogu /path/to/project i jego katalogach nadrzędnych:

atest --test-mapping /path/to/project

Uruchom określoną grupę testową

Dostępne grupy testowe: presubmit(wartość domyślna), postsubmit, mainline-presubmit i all.

Przeprowadzanie testów po przesłaniu w plikach TEST_MAPPING w bieżącym katalogu i katalogu nadrzędnym:

atest :postsubmit

Uruchom testy ze wszystkich grup w plikach TEST_MAPPING:

atest :all

Uruchom testy po przesłaniu w plikach TEST_MAPPING w pliku /path/to/project i w jego katalogach nadrzędnych:

atest --test-mapping /path/to/project:postsubmit

Przeprowadź testy główne w plikach TEST_MAPPING w folderze /path/to/project i jego katalogach nadrzędnych:

atest --test-mapping /path/to/project:mainline-presubmit

Uruchamianie testów w katalogach podrzędnych

Domyślnie Atest wyszukuje testy tylko w plikach TEST_MAPPING w górę (od bieżącego lub danego katalogu do jego katalogów nadrzędnych). Jeśli chcesz też uruchamiać testy w plikach TEST_MAPPING w podkatalogach, użyj opcji --include-subdirs, aby wymusić uwzględnienie tych testów przez Atest:

atest --include-subdirs /path/to/project

Przeprowadzanie testów w iteracji

Uruchamiaj testy w iteracji, przekazując argument --iterations. Niezależnie od tego, czy test się powiedzie, czy nie, Atest będzie go powtarzać, aż osiągnie maksymalną liczbę iteracji.

Przykłady:

Domyślnie Atest powtarza się 10 razy. Liczba iteracji musi być dodatnią liczbą całkowitą.

atest test-to-run --iterations
atest test-to-run --iterations 5

Aby ułatwić wykrywanie niestabilnych testów, możesz skorzystać z tych metod:

Metoda 1. Wykonuj wszystkie testy, aż wystąpi błąd lub osiągniesz maksymalną liczbę iteracji.

  • Zatrzymaj, gdy wystąpi błąd lub iteracja osiągnie 10 okrążenie (domyślnie).
    atest test-to-run --rerun-until-failure
    
  • Zatrzymaj, gdy wystąpi błąd lub iteracja osiągnie 100. rundę.
    atest test-to-run --rerun-until-failure 100
    

Metoda 2. Uruchamiaj tylko nieudane testy, aż do ich przejścia lub osiągnięcia maksymalnej liczby iteracji.

  • Załóżmy, że test-to-run ma wiele przypadków testowych, a jeden z nich kończy się niepowodzeniem. Wykonaj tylko nieudany test 10 razy (domyślnie) lub dopóki test nie będzie udany.
    atest test-to-run --retry-any-failure
    
  • Zatrzymaj nieudany test, gdy zostanie zaliczony lub osiągnie 100 okrążeń.
    atest test-to-run --retry-any-failure 100
    

Przeprowadzanie testów na urządzeniach AVD

Atest może przeprowadzać testy na nowo utworzonym AVD. Uruchom acloud create, aby utworzyć narzędzie AVD i artefakty kompilacji, a następnie przeprowadź testy zgodnie z poniższymi przykładami.

Uruchom AVD i przeprowadź testy:

acloud create --local-instance --local-image && atest test-to-run

Rozpoczynanie AVD w ramach testu:

atest test-to-run --acloud-create "--local-instance --local-image"

Aby dowiedzieć się więcej, uruchom polecenie acloud create --help.

Przekazywanie opcji do modułu

Atest może przekazywać opcje do testowania modułów. Aby dodać opcje wiersza poleceń TradeFed do testu, użyj tej struktury i upewnij się, że Twoje argumenty niestandardowe są zgodne z formatem opcji wiersza poleceń Tradefed.

atest test-to-run -- [CUSTOM_ARGS]

Przekazywanie opcji modułu testu do docelowych przygotowujących lub uruchamiających testy zdefiniowanych w pliku konfiguracji testu:

atest test-to-run -- --module-arg module-name:option-name:option-value
atest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true

Przekazywanie opcji do typu lub klasy Runner:

atest test-to-run -- --test-arg test-class:option-name:option-value
atest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true

Więcej informacji o opcjach tylko do testowania znajdziesz w artykule Przekazywanie opcji do modułów.