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.
Gdy kompilujesz aplikację za pomocą systemu kompilacji Gradle, wtyczka Androida do obsługi Gradle umożliwia uruchamianie testów z poziomu projektu Gradle za pomocą wiersza poleceń. Aby mieć większą kontrolę, możesz przeprowadzać testy za pomocą powłoki Android Debug Bridge (adb). Może to być przydatne podczas przeprowadzania testów w środowisku 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 sposobu przeprowadzania testów 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 zainicjować 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 testy dodane przez inne wtyczki Gradle.
Uruchamianie testów w module
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:connectedAndroidTestUruchamianie testów w wariancie kompilacji
Zadania test i connectedAndroidTest przeprowadzają testy na każdym wariancie kompilacji w projekcie. Możesz kierować reklamy na konkretną wersję 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 konkretnych 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 za pomocą skryptów powłoki na różne sposoby.
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 używać jego polecenia podrzędnego instrument do przeprowadzania testów.
Możesz uruchomić powłokę adb, wywołać am instrument i określić flagi wiersza poleceń w jednym wierszu wejściowym. Powłoka otwiera się na urządzeniu lub emulatorze, uruchamia testy, generuje dane wyjściowe, a następnie wraca do wiersza poleceń na komputerze.
Aby przeprowadzić test za pomocą am instrument:
- Skompiluj lub ponownie skompiluj główną aplikację i pakiet testowy.
- Zainstaluj pliki pakietu testowego i głównej 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 Twojej aplikacji testowej, a<runner_class>to nazwa używanej klasy narzędzia do testowania Androida. Nazwa pakietu na 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 STDOUT.
am instrument flags
Aby wyświetlić listę wszystkich flag, których można używać z poleceniem am instrument, uruchom polecenie adb shell am help. Ważne oznaczenia są opisane w tej tabeli:
Tabela 2. Ważne am instrument
flagi
| Zgłoś | Wartość | Opis |
|---|---|---|
-w
|
(brak) |
Wymusza na am instrument poczekanie na zakończenie instrumentacji, zanim sama się zakończy. Dzięki temu powłoka pozostanie otwarta do czasu zakończenia testów. Ten parametr jest wymagany, aby wyświetlić wyniki testów.
|
-r
|
(brak) |
Zwraca wyniki w formacie nieprzetworzonym. Użyj tego znacznika, jeśli chcesz zbierać pomiary skuteczności w taki sposób, 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 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ń znaku -e <test_options>. Klucze i wartości są opisane w sekcji Opcje instrumentu am. Tych par klucz-wartość można używać tylko z AndroidJUnitRunner lub z InstrumentationTestRunner i jego podklasami. Używanie ich z innymi klasami nie ma żadnego wpływu.
|
--no-hidden-api-checks
|
(brak) | Wyłącza ograniczenia dotyczące korzystania z 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ż pakiet SDK. |
am instrument options
Narzędzie am instrument przekazuje opcje testowania do AndroidJUnitRunner lub InstrumentationTestRunner w postaci par klucz-wartość, używając flagi -e, zgodnie z tą 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 funkcji
AndroidJUnitRunner podaje 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ć 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 przypadku testowego, która używa tej nazwy pakietu. Pamiętaj, ż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 przypadku testowego i jedna z jej metod. Wykonana zostanie tylko ta metoda. Zwróć uwagę na znak hash (#) między nazwą klasy a nazwą metody. | |
func |
true |
Uruchamia wszystkie klasy testowe, które rozszerzają klasę InstrumentationTestCase.
|
unit |
true |
Uruchamia wszystkie klasy testowe, które nie rozszerzają klasy InstrumentationTestCase ani PerformanceTestCase.
|
size |
[small | medium | large]
|
Uruchamia metodę testową oznaczoną adnotacją dotyczącą rozmiaru. Adnotacje to @SmallTest, @MediumTest i @LargeTest.
|
perf |
true |
Uruchamia wszystkie klasy testowe, które implementują interfejs PerformanceTestCase.
Jeśli używasz tej opcji, określ flagę -r dla am instrument, aby dane wyjściowe były zachowywane w formacie surowym i nie były formatowane jako wyniki testu.
|
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 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 parametremBundlezawierającym pary klucz-wartość.- Klucz
packagema pierwszeństwo przed kluczemclass. Jeśli określisz pakiet, a potem oddzielnie 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. - Dwie klasy testów z instrumentacją:
TestClass1, która zawiera metodę testowątestMethod1.TestClass2, która zawiera metody testowetestMethod2itestMethod3.
- Uruchamiający test to
AndroidJUnitRunner.
Uruchamianie całego pakietu testów
Aby uruchomić wszystkie klasy testowe w pakiecie testowym, wpisz:
adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunnerUruchamianie wszystkich testów w klasie przypadków testowych
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 AndroidJUnitRunner
dokumentacji interfejsu API.
Wyświetlanie ujednoliconych raportów z testów
Wtyczka Androida do obsługi Gradle udostępnia ujednolicone zadania raportowania testów, które generują panele HTML łączące wyniki testów jednostkowych i instrumentowanych.
Wymagania wstępne
- Wtyczka Androida do obsługi Gradle w wersji 9.2.0-alpha07 lub nowszej.
Aby wygenerować ujednolicone raporty z testów, wykonaj jedno z tych zadań:
| Zakres raportu | Polecenie | Opis | Lokalizacja raportu |
|---|---|---|---|
| Bieżący moduł | ./gradlew :module_name:createTestReport |
Generuje ujednolicony raport z testów bieżącego modułu, łącząc wyniki testów jednostkowych i instrumentowanych. | path_to_your_project/module_name/build/reports/tests/test-report/ |
| Bieżący moduł i zależności | ./gradlew :module_name:createAggregatedTestReport |
Generuje ujednolicony raport z testu bieżącego modułu aplikacji i jego zależności bibliotecznych. | path_to_your_project/module_name/build/reports/tests/aggregated-test-report/ |