Z tego dokumentu dowiesz się, jak uruchamiać testy bezpośrednio z wiersza poleceń. Zakładamy, że wiesz już, jak utworzyć aplikację na Androida i napisać testy dla tej aplikacji. 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 zestawu narzędzi interfejsu. Jeśli chcesz napisać testy interfejsu dla 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 tworzysz 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 uruchamiać testy za pomocą powłoki Android Debug Bridge (adb). Może to być przydatne podczas uruchamiania testów w trybie ciągłej integracji.
Aby dowiedzieć się, jak uruchamiać zautomatyzowane testy z instrumentacją 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 projektu Gradle za pomocą wiersza poleceń.
W tabeli poniżej znajdziesz podsumowanie sposobów uruchamiania testów za pomocą Gradle:
Tabela 1. Różne sposoby uruchamiania testów za pomocą Gradle
| Typ testu jednostkowego | Polecenie do uruchomienia | Lokalizacja wyników testu |
|---|---|---|
| Lokalny test jednostkowy |
Uruchom zadanie test:
|
Pliki wyników testu w formacie HTML:path_to_your_project/module_name/build/reports/tests/
katalog.
Pliki wyników testu w formacie XML: |
| Instrumentowany test jednostkowy |
Uruchom zadanie connectedAndroidTest:
|
Pliki wyników testu w formacie HTML:path_to_your_project/module_name/build/reports/androidTests/connected/
katalog.
Pliki wyników testu w formacie XML: |
Gradle obsługuje
skróty nazw zadań.
Na przykład możesz uruchomić zadanie connectedAndroidTest, wpisując to polecenie:
./gradlew cATMożesz też uruchomić zadania Gradle check i connectedCheck. Te zadania uruchamiają odpowiednio testy lokalne lub testy z instrumentacją, ale obejmują też inne kontrole dodane przez inne wtyczki Gradle.
Uruchamianie testów w module
Zadania test i connectedAndroidTest uruchamiają testy w każdym module projektu. Aby uruchomić testy w konkretnym module, dodaj przed zadaniem test lub connectedAndroidTest nazwę modułu i dwukropek (:). Na przykład to polecenie uruchamia testy z instrumentacją tylko w module mylibrary:
./gradlew mylibrary:connectedAndroidTestUruchamianie testów w wariancie kompilacji
Zadania test i connectedAndroidTest uruchamiają testy w każdym
wariancie kompilacji w projekcie. Aby wybrać konkretny wariant kompilacji, użyj tej składni:
- W przypadku lokalnych testów jednostkowych:
./gradlew testVariantNameUnitTest - W przypadku testów z instrumentacją:
./gradlew connectedVariantNameAndroidTest
Uruchamianie konkretnych metod lub klas testowych
Podczas uruchamiania lokalnych testów jednostkowych Gradle umożliwia wybieranie konkretnych testów 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'
Uruchamianie 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 testowe, 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 dostosować testowanie na różne sposoby za pomocą skryptów powłoki.
Aby uruchomić test z wiersza poleceń, uruchom polecenie adb shell, aby otworzyć powłokę wiersza poleceń na urządzeniu lub emulatorze. W tej powłoce możesz wchodzić w interakcję z
menedżerem aktywności
za pomocą polecenia am i używać jego podpolecenia instrument do uruchamiania testów.
Możesz też uruchomić powłokę adb, wywołać polecenie 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 uruchomić test za pomocą polecenia am instrument:
- Skompiluj lub ponownie skompiluj główną aplikację i pakiet testowy.
- Zainstaluj pakiet testowy i główne pliki pakietu aplikacji na Androida (pliki APK) na bieżącym urządzeniu z Androidem lub emulatorze.
W wierszu poleceń wpisz:
adb shell am instrument -w <test_package_name>/<runner_class>gdzie
<test_package_name>to nazwa pakietu Androida aplikacji testowej, a<runner_class>to nazwa używanej klasy narzędzia do uruchamiania testów na Androida. Nazwa pakietu na Androida to wartość atrybutu package elementu manifest w pliku manifestu pakietu testowego (AndroidManifest.xml).Klasa narzędzia do uruchamiania testów na Androida to zwykle
AndroidJUnitRunner:adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
Wyniki testu pojawią się w STDOUT.
Flagi polecenia am instrument
Aby wyświetlić listę wszystkich flag, których można używać z poleceniem am instrument, uruchom polecenie adb shell am help. Niektóre ważne flagi są opisane w tabeli poniżej:
Tabela 2. Ważne flagi polecenia am instrument
| Flaga | Wartość | Opis |
|---|---|---|
-w
|
(brak) |
Wymusza na poleceniu am instrument czekanie na zakończenie instrumentacji
przed zakończeniem działania. Dzięki temu powłoka pozostaje otwarta do czasu zakończenia testów. Ta flaga jest wymagana, aby
zobaczyć wyniki testów.
|
-r
|
(brak) |
Wyświetla wyniki w formacie nieprzetworzonym. Użyj tej flagi, gdy chcesz
zbierać pomiary wydajności, aby nie były one formatowane jako
wyniki testów. Ta flaga jest przeznaczona do użycia z flagą
-e perf true (opisaną w
sekcji Opcje polecenia am instrument).
|
-e
|
<test_options>
|
Udostępnia opcje testowania jako pary klucz-wartość. Narzędzie
am instrument przekazuje je 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 polecenia am instrument. Tych par klucz-wartość można używać tylko z
AndroidJUnitRunner.
Używanie ich z dowolną inną klasą nie ma żadnego efektu.
|
--no-hidden-api-checks
|
(brak) | Wyłącza ograniczenia dotyczące używania ukrytych interfejsów API. Więcej informacji o tym, czym są ukryte interfejsy API i jak mogą wpływać na aplikację, znajdziesz w artykule Ograniczenia dotyczące interfejsów spoza pakietu SDK. |
Opcje polecenia am instrument
Narzędzie am instrument przekazuje opcje testowania do AndroidJUnitRunner lub InstrumentationTestRunner w postaci par klucz-wartość za pomocą flagi -e z tą składnią:
-e <key> <value>
Niektóre klucze akceptują wiele wartości. Wiele wartości określa się na liście rozdzielonej przecinkami. Na przykład to wywołanie AndroidJUnitRunner zawiera wiele wartości 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ć z narzędziem do uruchamiania testów:
Tabela 3. Pary klucz-wartość flagi -e do użycia z narzędziem do uruchamiania testów
| Klucz | Wartość | Opis |
|---|---|---|
package
|
<Java_package_name>
|
Pełna nazwa pakietu Java jednego z pakietów w aplikacji testowej. Wykonywany jest każdy element testowania, który używa tej nazwy pakietu. Pamiętaj, że nie jest to nazwa pakietu Androida. Pakiet testowy ma jedną nazwę pakietu na Androida, ale może zawierać kilka pakietów Java. |
class |
<class_name> |
Pełna nazwa klasy Java jednej z klas elementów testowania. Wykonywany jest tylko ten element testowania. |
<class_name>#method name |
Pełna nazwa klasy elementu testowania i jedna z jej metod. Wykonywana jest tylko ta metoda. Zwróć uwagę na znak hash (#) między nazwą klasy a nazwą metody. | |
size |
[small | medium | large]
|
Uruchamia metodę testową oznaczoną rozmiarem. 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
pojawiają się w STDOUT. Użyj tej opcji, aby sprawdzić
kombinacje innych filtrów i specyfikacji testów.
|
emma |
true |
Uruchamia analizę pokrycia kodu EMMA i zapisuje dane wyjściowe w pliku
/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 kompilacji aplikacji testowej z instrumentacją EMMA, którą można wygenerować za pomocą celu |
coverageFile |
<filename> |
Zastępuje domyślną lokalizację pliku pokrycia EMMA na
urządzeniu. Określ tę wartość jako ścieżkę i nazwę pliku w formacie UNIX.
Domyślna nazwa pliku jest opisana we wpisie dotyczącym klucza
emma.
|
Podczas używania flagi -e pamiętaj o tych kwestiach:
am instrumentwywołujeonCreate(Bundle)zBundlezawierają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 polecenia am instrument do uruchamiania testów.
Opierają się one na tej strukturze:
- Pakiet testowy ma nazwę pakietu na Androida
com.android.demo.app.tests. - Dwie klasy testów z instrumentacją:
TestClass1, która zawiera metodę testowątestMethod1.TestClass2, która zawiera metody testowetestMethod2itestMethod3.
- Narzędzie do uruchamiania testów to
AndroidJUnitRunner.
Uruchamianie całego pakietu testowego
Aby uruchomić wszystkie klasy testowe w pakiecie testowym, wpisz:
adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerUruchamianie wszystkich elementów testowania w klasie testowej
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 metodę testMethod3 w klasie 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
AndroidJUnitRunner
dokumentacji API.
Wyświetlanie ujednoliconych raportów z testów
Wtyczka Androida do obsługi Gradle udostępnia ujednolicone zadania testowe, które generują pulpity nawigacyjne HTML łączące wyniki testów jednostkowych i instrumentowanych.
Wymagania wstępne
- Wtyczka 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 --continue |
Generuje ujednolicony raport z testów dla bieżącego modułu, łącząc wyniki testów jednostkowych i testów z instrumentacją. | path_to_your_project/module_name/build/reports/testAllSuites/test-report/ |
| Bieżący moduł i zależności | ./gradlew :module_name:testAllSuitesWithDependencies --continue |
Generuje ujednolicony raport z testów dla bieżącego modułu i jego zależności bibliotecznych, łącząc wyniki testów jednostkowych i testów z instrumentacją. | path_to_your_project/module_name/build/reports/testAllSuitesWithDependencies/test-report/ |