Z tego dokumentu dowiesz się, jak uruchamiać testy bezpośrednio z wiersza poleceń. W tym dokumencie zakładamy, że wiesz już, jak tworzyć aplikacje na Androida i pisać do nich testy. Więcej informacji o tworzeniu testów aplikacji znajdziesz w artykule Testowanie aplikacji na Androida.
Narzędzia wiersza poleceń i zadania Gradle opisane na tej stronie są niezależne od pakietu narzędzi interfejsu. Jeśli chcesz napisać testy interfejsu Compose, przeczytaj artykuł Testowanie układu Compose. Po napisaniu testów postępuj zgodnie z tym przewodnikiem, aby uruchomić je w terminalu lub zdalnym środowisku trybu ciągłej integracji.
Gdy kompilujesz aplikację za pomocą systemu kompilacji Gradle, wtyczka Androida do obsługi Gradle umożliwia uruchamianie testów z projektu Gradle za pomocą wiersza poleceń. Aby uzyskać większą kontrolę, możesz przeprowadzać testy w powłoce Android Debug Bridge (adb). Może to być przydatne podczas przeprowadzania testów w środowisku trybu ciągłej integracji.
Aby dowiedzieć się, jak uruchamiać zautomatyzowane testy instrumentacyjne z wiersza poleceń za pomocą urządzeń wirtualnych zarządzanych przez Gradle, przeczytaj artykuł Skalowanie testów za pomocą urządzeń zarządzanych przez Gradle.
Uruchamianie testów za pomocą Gradle
Wtyczka Androida do obsługi Gradle umożliwia uruchamianie testów z poziomu projektu Gradle za pomocą wiersza poleceń.
W tabeli poniżej znajdziesz podsumowanie informacji o tym, jak uruchamiać testy za pomocą Gradle:
Tabela 1. Różne sposoby przeprowadzania testów za pomocą Gradle
| Typ testu jednostkowego | Polecenie do uruchomienia | Lokalizacja wyniku testu |
|---|---|---|
| Lokalny test jednostkowy |
Uruchom zadanie test:
|
Pliki wyników testu HTML:path_to_your_project/module_name/build/reports/tests/
katalog.
Pliki wyników testu XML: |
| Test jednostkowy z instrumentacją |
Uruchom zadanie connectedAndroidTest:
|
Pliki wyników testu HTML:path_to_your_project/module_name/build/reports/androidTests/connected/
katalog.
Pliki wyników testu XML: |
Gradle obsługuje skróty nazw zadań.
Możesz na przykład rozpocząć zadanie connectedAndroidTest, wpisując to polecenie:
./gradlew cATMożesz też uruchomić zadania Gradle check i connectedCheck. Te zadania uruchamiają odpowiednio testy lokalne i testy z instrumentacją, ale obejmują też inne kontrole dodane przez inne wtyczki Gradle.
Przeprowadzanie testów modułu
Zadania test i connectedAndroidTest przeprowadzają testy każdego modułu w projekcie. Testy możesz uruchamiać w określonym module, dodając do zadania test lub connectedAndroidTest nazwę modułu i dwukropek (:). Na przykład to polecenie uruchamia testy instrumentowane tylko w module mylibrary:
./gradlew mylibrary:connectedAndroidTestPrzeprowadzanie testów w przypadku wariantu kompilacji
Zadania test i connectedAndroidTest przeprowadzają testy na każdym wariancie kompilacji w projekcie. Możesz kierować reklamy na konkretny wariant kompilacji, używając tej składni:
- W przypadku lokalnych testów jednostkowych:
./gradlew testVariantNameUnitTest - W przypadku testów z użyciem instrumentacji:
./gradlew connectedVariantNameAndroidTest
Uruchamianie określonych metod lub klas testowych
Podczas przeprowadzania lokalnych testów jednostkowych Gradle umożliwia kierowanie na konkretne testy za pomocą flagi --tests. Na przykład to polecenie uruchamia tylko testy sampleTestMethod dla określonego wariantu kompilacji. Więcej informacji o używaniu flagi --tests znajdziesz w dokumentacji Gradle na temat filtrowania testów.
./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'
Przeprowadzanie testów za pomocą adb
Gdy uruchamiasz testy z wiersza poleceń za pomocą Android Debug Bridge (adb), masz więcej opcji wyboru testów do uruchomienia niż w przypadku innych metod. Możesz wybrać poszczególne metody testowania, filtrować testy według niestandardowej adnotacji lub określić opcje testowania. Ponieważ przebieg testu jest w całości kontrolowany z wiersza poleceń, możesz dostosowywać testowanie na różne sposoby za pomocą skryptów powłoki.
Aby uruchomić test z wiersza poleceń, wpisz adb shell, aby uruchomić powłokę wiersza poleceń na urządzeniu lub emulatorze. W tej powłoce możesz wchodzić w interakcje z menedżerem aktywności za pomocą polecenia am i uruchamiać testy za pomocą jego podpolecenia instrument.
Możesz też uruchomić powłokę adb, wywołać am instrument i określić flagi wiersza poleceń w jednym wierszu. Powłoka otworzy się na urządzeniu lub emulatorze, uruchomi testy, wygeneruje dane wyjściowe, a następnie wróci do wiersza poleceń na komputerze.
Aby przeprowadzić test za pomocą am instrument:
- Skompiluj lub ponownie skompiluj główną aplikację i pakiet testowy.
- Zainstaluj na bieżącym urządzeniu z Androidem lub emulatorze pliki pakietu testowego i głównej aplikacji na Androida (pliki APK).
W wierszu poleceń wpisz:
adb shell am instrument -w <test_package_name>/<runner_class>gdzie
<test_package_name>to nazwa pakietu Android Twojej aplikacji testowej, a<runner_class>to nazwa używanej klasy narzędzia do testowania aplikacji na Androida. Nazwa pakietu Androida to wartość atrybutu package elementu manifestu w pliku manifestu pakietu testowego (AndroidManifest.xml).Klasa narzędzia do uruchamiania testów na Androidzie to zwykle:
AndroidJUnitRunneradb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
Wyniki testu pojawią się w sekcji STDOUT.
am instrument flags
Aby wyświetlić listę wszystkich flag, których można używać z poleceniem am instrument, uruchom adb shell am help. Ważne oznaczenia są opisane w tej tabeli:
Tabela 2. Ważne am instrument
flagi
| Flaga | Wartość | Opis |
|---|---|---|
-w
|
(brak) |
Wymusza na am instrument czekanie na zakończenie instrumentacji przed zakończeniem działania. Dzięki temu powłoka pozostanie otwarta do czasu zakończenia testów. Ten flag jest wymagany, aby wyświetlić wyniki testów.
|
-r
|
(brak) |
Wyświetla wyniki w formacie nieprzetworzonym. Użyj tego znacznika, gdy chcesz zbierać pomiary wydajności, które nie będą formatowane jako wyniki testów. Ta flaga jest przeznaczona do użycia z flagą -e perf true (opisaną w sekcji opcje instrumentu).
|
-e
|
<test_options>
|
Zawiera opcje testowania w postaci par klucz-wartość. Narzędzie am instrument przekazuje te informacje do określonej klasy instrumentacji za pomocą metody onCreate(). Możesz określić wiele wystąpień -e <test_options>. Klucze i wartości są opisane w sekcji Opcje instrumentu AM. Możesz używać tych par klucz-wartość tylko w przypadku AndroidJUnitRunner.
Używanie ich z innymi klasami nie ma żadnego wpływu.
|
--no-hidden-api-checks
|
(brak) | Wyłącza ograniczenia dotyczące używania ukrytych interfejsów API. Więcej informacji o ukrytych interfejsach API i ich wpływie na aplikację znajdziesz w artykule Ograniczenia dotyczące interfejsów innych niż SDK. |
am instrument options
Narzędzie am instrument przekazuje opcje testowania do AndroidJUnitRunner lub InstrumentationTestRunner w postaci par klucz-wartość za pomocą flagi -e, używając tej składni:
-e <key> <value>
Niektóre klucze akceptują wiele wartości. Wiele wartości możesz podać na liście rozdzielonej przecinkami. Na przykład to wywołanie
AndroidJUnitRunner podaje wiele wartości dla klucza package:
adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunnerW tabeli poniżej znajdziesz pary klucz-wartość, których możesz używać w programie do uruchamiania testów:
Tabela 3. -e flag key-value pairs to use with your test runner
| Klucz | Wartość | Opis |
|---|---|---|
package
|
<Java_package_name>
|
Pełna i jednoznaczna nazwa pakietu Java jednego z pakietów w aplikacji testowej. Wykonywana jest każda klasa przypadków testowych, która używa tej nazwy pakietu. Zwróć uwagę, że nie jest to nazwa pakietu Androida. Pakiet testowy ma jedną nazwę pakietu Androida, ale może zawierać kilka pakietów Java. |
class |
<class_name> |
Pełna i jednoznaczna nazwa klasy Java dla jednej z klas przypadków testowych. Wykonana zostanie tylko ta klasa przypadków testowych. |
<class_name>#method name |
Pełna i jednoznaczna nazwa klasy testu i jedna z jej metod. Wykonana zostanie tylko ta metoda. Zwróć uwagę na znak hash (#) między nazwą klasy a nazwą metody. | |
size |
[small | medium | large]
|
Uruchamia metodę testową oznaczoną adnotacją dotyczącą rozmiaru. Adnotacje to @SmallTest, @MediumTest i @LargeTest.
|
debug |
true |
Uruchamia testy w trybie debugowania. |
log |
true |
Wczytuje i rejestruje wszystkie określone testy, ale ich nie uruchamia. Informacje o teście są widoczne w sekcji STDOUT. Użyj tej opcji, aby sprawdzić kombinacje innych filtrów i specyfikacji testów.
|
emma |
true |
Przeprowadza analizę pokrycia kodu EMMA i zapisuje dane wyjściowe w /data/<app_package>/coverage.ec na urządzeniu. Aby zastąpić lokalizację pliku, użyj klucza coverageFile opisanego w następnym wpisie.
Uwaga: ta opcja wymaga skompilowanej wersji aplikacji testowej z instrumentacją EMMA, którą możesz wygenerować za pomocą elementu docelowego |
coverageFile |
<filename> |
Zastępuje domyślną lokalizację pliku pokrycia EMMA na urządzeniu. Podaj tę wartość jako ścieżkę i nazwę pliku w formacie UNIX.
Domyślna nazwa pliku jest opisana w sekcji klucza emma.
|
Podczas korzystania z flagi -e pamiętaj o tych kwestiach:
am instrumentwywołujeonCreate(Bundle)z obiektemBundlezawierającym pary klucz-wartość.- Klucz
packagema pierwszeństwo przed kluczemclass. Jeśli określisz pakiet, a potem osobno określisz klasę w tym pakiecie, Android uruchomi wszystkie testy w pakiecie i zignoruje klucz klasy. - Klucze
funciunitwykluczają się nawzajem.
Przykłady użycia
W sekcjach poniżej znajdziesz przykłady użycia am instrument do przeprowadzania testów.
Mają one następującą strukturę:
- Pakiet testowy ma nazwę pakietu na Androida
com.android.demo.app.tests. - 2 klasy testów z instrumentacją:
TestClass1, która zawiera metodę testowaniatestMethod1.TestClass2, która zawiera metody testowetestMethod2itestMethod3.
- Uruchamiający test to
AndroidJUnitRunner.
Uruchamianie całego pakietu testów
Aby uruchomić wszystkie klasy testów w pakiecie testowym, wpisz:
adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerUruchamianie wszystkich testów w klasie elementów testowania
Aby uruchomić wszystkie testy w klasie TestClass1, wpisz:
adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerWybieranie podzbioru testów
Aby uruchomić wszystkie testy w klasie TestClass1 i metodzie testMethod3 w TestClass2, wpisz:
adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerWięcej przypadków użycia znajdziesz w AndroidJUnitRunnerdokumentacji API.
Wyświetlanie ujednoliconych raportów z testów
Wtyczka Androida do obsługi Gradle udostępnia ujednolicone zadania testowe, które generują panele HTML łączące wyniki testów jednostkowych i testów z użyciem instrumentacji.
Wymagania wstępne
- wtyczkę Androida do obsługi Gradle w wersji 9.5.0-alpha05 lub nowszej;
Aby przetestować wszystkie zestawy testów, uruchom jedno z tych zadań:
| Zakres raportu | Polecenie | Opis | Lokalizacja raportu |
|---|---|---|---|
| Bieżący moduł | ./gradlew :module_name:testAllSuites |
Generuje ujednolicony raport z testów bieżącego modułu, łącząc wyniki testów jednostkowych i testów z użyciem instrumentacji. | path_to_your_project/module_name/build/reports/tests/test-report/ |
| Bieżący moduł i zależności | ./gradlew :module_name:testAllSuitesWithDependencies |
Generuje ujednolicony raport z testu dla bieżącego modułu i jego zależności bibliotecznych, łącząc wyniki testów jednostkowych i instrumentowanych. | path_to_your_project/module_name/build/reports/tests/aggregated-test-report/ |