Testowanie z poziomu wiersza poleceń

W tym dokumencie opisujemy, jak przeprowadzać testy bezpośrednio z poziomu wiersza poleceń. Ten zakładamy, że wiesz już, jak utworzyć aplikację na Androida napisać testy aplikacji. Aby uzyskać więcej informacji o tworzeniu testów Więcej informacji znajdziesz w artykule Testowanie aplikacji na Androida.

Podczas tworzenia aplikacji przy użyciu systemu kompilacji Gradle narzędzie Android Gradle wtyczka, która pozwala uruchamiać testy na Gradle projektu za pomocą wiersza poleceń. Aby zyskać większą kontrolę, przeprowadź testy za pomocą narzędzia Android Debug Bridge. (adb). Jest to przydatne podczas przeprowadzania testów w ciągłej integracji.

Aby dowiedzieć się, jak przeprowadzać zautomatyzowane testy instrumentowane z poziomu wiersza poleceń przy użyciu urządzeń wirtualnych, którymi Gradle zarządza za Ciebie, przeczytaj artykuł Skalowanie testów przy użyciu Gradle Zarządzane urządzenia.

Przeprowadzanie testów za pomocą Gradle

Wtyczka Androida do obsługi Gradle umożliwia przeprowadzanie testów z poziomu projektu Gradle za pomocą wiersza poleceń.

W tabeli poniżej znajdziesz informacje o tym, jak przeprowadzać testy przy użyciu Gradle:

Tabela 1. Różne sposoby przeprowadzania testów Gradle

Typ testu jednostkowego Polecenie do uruchomienia Lokalizacja wyniku testu
Test jednostki lokalnej Uruchom zadanie test:

./gradlew test
Pliki z wynikami testu HTML:
path_to_your_project/module_name/build/reports/tests/ katalogu.

Pliki z wynikami testu XML:
path_to_your_project/module_name/build/test-results/ katalogu.

Test instrumentalny Uruchom zadanie connectedAndroidTest:

./gradlew connectedAndroidTest
Pliki z wynikami testu HTML:
path_to_your_project/module_name/build/reports/androidTests/connected/ katalogu.

Pliki z wynikami testu XML:
path_to_your_project/module_name/build/outputs/androidTest-results/connected/ katalogu.

Obsługa Gradle skróty nazw zadań. Zadanie connectedAndroidTest możesz na przykład zainicjować przez: wpisz następujące polecenie:

./gradlew cAT

Możesz też uruchamiać zadania Gradle check i connectedCheck. Te przeprowadzają odpowiednio testy lokalne lub zinstruowane, ale uwzględnij inne kontrole dodane przez inne wtyczki Gradle.

Przeprowadzanie testów w module

Zadania test i connectedAndroidTest służą do uruchamiania testów w każdym module w w projektach AI. Aby przeprowadzić testy w konkretnym module, wykonaj te czynności: poprzedzając zadanie test lub connectedAndroidTest nazwą modułu i znakiem dwukropek (:). Na przykład poniższe polecenie uruchamia testy instrumentowane tylko moduł mylibrary:

./gradlew mylibrary:connectedAndroidTest

Przeprowadzanie testów na wariancie kompilacji

Zadania test i connectedAndroidTest uruchamiają testy na każdym utwórz wariant w projekcie. Możesz kierować reklamy na konkretnej kompilacji, używając tej składni:

  • W przypadku testów jednostkowych lokalnych:
    ./gradlew testVariantNameUnitTest
  • W przypadku testów instrumentowanych:
    ./gradlew connectedVariantNameAndroidTest
.

Uruchamianie określonych metod testowania lub klas

Gdy uruchamiasz testy jednostkowe lokalnych, Gradle pozwala kierować reklamy na konkretne testy za pomocą flagę --tests. Na przykład to polecenie uruchamia tylko Testy sampleTestMethod dla określonego wariantu kompilacji. Aby dowiedzieć się więcej o: przy użyciu flagi --tests, przeczytaj dokumentację Gradle dotyczącą filtrowania testowego.


./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'

Przeprowadzanie testów za pomocą narzędzia adb

gdy uruchamiasz testy z poziomu wiersza poleceń za pomocą narzędzia Android Debug Bridge: (adb), dostępnych jest więcej opcji. wybór testów do przeprowadzenia niż jakąkolwiek inną metodą. Możesz wybrać, metody testowania, filtrowanie testów pod kątem adnotacji niestandardowych lub określanie testów . Uruchomienie testu odbywa się w całości z poziomu wiersza poleceń, pozwala dostosować testowanie za pomocą skryptów powłoki na różne sposoby.

Aby uruchomić test z poziomu wiersza poleceń, uruchom adb shell w celu uruchomienia wiersza poleceń na urządzeniu lub w emulatorze. Wewnątrz możesz wchodzić w interakcje z menedżer aktywności za pomocą polecenia am, a w nim – instrument, do uruchomienia testów.

Jako skrót możesz uruchomić powłokę adb, wywołać funkcję am instrument i określić flagami wiersza poleceń w jednym wierszu wejściowym. Powłoka otworzy się na urządzeniu lub w emulatorze, uruchomi testy, wyświetli dane wyjściowe, a następnie wraca do wiersza poleceń na komputerze.

Aby przeprowadzić test przy użyciu dodatku am instrument:

  1. Utwórz lub przebuduj główną aplikację. pakietu testowego.
  2. Zainstaluj pakiet testowy i główny aplikacji na Androida (pliki APK) na bieżące urządzenie z Androidem lub za pomocą emulatora.
  3. W wierszu poleceń wpisz:

    adb shell am instrument -w <test_package_name>/<runner_class>
    

    Gdzie <test_package_name> to nazwa pakietu na Androida używanego w teście aplikacji, a <runner_class> to nazwa klasy uruchamiania testów na Androida. którego używasz. Nazwa pakietu na Androida jest wartością atrybutu elementu manifestu atrybut pakietu w pliku manifestu pakietu testowego (AndroidManifest.xml).

    Klasa ta to zwykle AndroidJUnitRunner:

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner
    

Wyniki testu są wyświetlane w języku: STDOUT.

flagi instrumentów am

Aby wyświetlić listę wszystkich flag do użycia z poleceniem am instrument: uruchom adb shell am help. Niektóre ważne flagi opisano w ta tabela:

Tabela 2. Ważne am instrument flagi

Zgłoś Wartość Opis
-w (brak) Wymusza oczekiwanie na uruchomienie instrumentacji przez funkcję am instrument przed zakończeniem, zanim się zakończy. Dzięki temu funkcja otwarte powłokę do czasu zakończenia testów. Ta flaga jest wymagana do zobaczysz wyniki Twoich testów.
-r (brak) Wyniki są zwracane w formacie nieprzetworzonym. Użyj tej flagi, gdy chcesz: zbierać pomiary skuteczności w taki sposób, aby nie były sformatowane wyniki testu. Ta flaga jest przeznaczona do użycia z flagą -e perf true (podane w am instrument options).
-e <test_options> Udostępnia opcje testowania w postaci par klucz-wartość. Narzędzie am instrument przekazuje je do określonego klasy instrumentacji, używając funkcji onCreate(). . Możesz podać wiele wystąpień -e <test_options> Klucze i wartości są opisane w am opcje instrumentu. Dostępne opcje używaj tylko tych par klucz-wartość AndroidJUnitRunner lub za pomocą: InstrumentationTestRunner i jej podklas. Użycie ich razem z innymi klasami nie przyniesie żadnego efektu.
--no-hidden-api-checks (brak) Wyłącza ograniczenia dotyczące korzystania z ukrytych interfejsów API. Więcej Wyjaśniamy, czym są ukryte interfejsy API i jak mogą one wpłynąć aplikacja, odczyt Ograniczenia dotyczące interfejsów innych niż SDK.

Opcje instrumentów am

Narzędzie am instrument przekazuje opcje testowania do: AndroidJUnitRunner lub InstrumentationTestRunner w postaci par klucz-wartość z użyciem flagi -e o takiej składni:

-e <key> <value>

Niektóre klucze mogą przyjmować wiele wartości. W kolumnie rozdzielane przecinkami. Na przykład to wywołanie funkcji 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.AndroidJUnitRunner

W tabeli poniżej znajdziesz pary klucz-wartość, których możesz użyć w narzędziu uruchamiającym test:

Tabela 3. -e flagi par klucz-wartość do użycia z twój biegacz testowy

Klucz Wartość Opis
package <Java_package_name> Pełna nazwa pakietu Java dla jednego w aplikacji testowej. Każda klasa przypadku testowego, która z tego korzysta nazwa pakietu jest wykonywana. Zwróć uwagę, że to nie jest nazwa pakietu na Androida; pakiet testowy ma jeden Nazwa pakietu na Androida, ale może zawierać kilka pakietów Javy.
class <class_name> Pełna nazwa klasy Java dla jednego z przypadków testowych zajęcia. Wykonywana jest tylko ta klasa przypadku testowego.
<class_name>#method name Pełna i jednoznaczna nazwa klasy przypadku testowego i jedna z jego metod. Tylko gdy jest wykonywana. Zwróć uwagę na krzyżyk (#) między klasami. nazwa i nazwa metody.
func true Uruchamia wszystkie klasy testów, które rozszerzają zakres InstrumentationTestCase
unit true Uruchamia wszystkie klasy testowe, które nie rozszerzają żadnej z tych klas InstrumentationTestCase lub PerformanceTestCase
size [small | medium | large] Uruchamia metodę testową z adnotacjami według rozmiaru. Adnotacje są @SmallTest, @MediumTest i @LargeTest
perf true Uruchamia wszystkie klasy testowe, które implementują PerformanceTestCase Jeśli używasz tej opcji, określ flagę -r dla: am instrument, dzięki czemu dane wyjściowe są przechowywane w formacie nieprzetworzonym. i nie mają formatu wyników testu.
debug true Uruchamia testy w trybie debugowania.
log true Wczytuje i rejestruje wszystkie określone testy, ale ich nie uruchamia. Test informacje są wyświetlane w języku: STDOUT. Użyj go do weryfikacji kombinacji innych filtrów i specyfikacji testowych.
emma true Przeprowadza analizę zasięgu kodu EMMA i zapisuje dane wyjściowe w /data/<app_package>/coverage.ec. Do zastąp lokalizację pliku, użyj klucza coverageFile co zostało opisane w dalszej części tego artykułu.

Uwaga: ta opcja wymaga dostawcy usług EMMA kompilację aplikacji testowej, którą można wygenerować za pomocą Cel: coverage.

coverageFile <filename> Zastępuje domyślną lokalizację pliku pokrycia EMMA w urządzenia. Podaj tę wartość jako ścieżkę i nazwę pliku w formacie UNIX. Domyślna nazwa pliku jest opisana we wpisie dotyczącym emma klawisz.

Podczas korzystania z flagi -e pamiętaj o tych kwestiach:

  • am instrument wywołuje onCreate(Bundle). ciągiem Bundle zawierającym parę klucz-wartość pary.
  • Klucz package ma pierwszeństwo przed kluczem class. Jeśli podasz pakietu, a następnie osobno określić klasę w tym pakiecie, czyli Androida. uruchamia wszystkie testy w pakiecie i ignoruje klucz klasy.
  • Klucze func i unit wzajemnie się wykluczają.

Przykłady użycia

W sekcjach poniżej znajdziesz przykłady używania am instrument do przeprowadzania testów. Są one oparte na następującej strukturze:

  • Nazwa pakietu testowego na Androida to com.android.demo.app.tests.
  • Dwie klasyczne zajęcia testowe:
    • TestClass1, który zawiera metodę testową testMethod1.
    • TestClass2, który zawiera metody testowe testMethod2 i testMethod3.
  • Uczestnik testowy to AndroidJUnitRunner

Uruchom cały pakiet testowy

Aby uruchomić wszystkie klasy testowe w pakiecie testowym, wpisz:

adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

Uruchamianie wszystkich testów w klasie przypadku testowego

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.AndroidJUnitRunner

Wybierz podzbiór 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.AndroidJUnitRunner

Więcej przypadków użycia znajdziesz w AndroidJUnitRunner Dokumentacja API.