Z tej strony dowiesz się, jak napisać test po stronie hosta, który nie wymaga urządzenia, np. test uruchamiany na instancji Linux GCE. (Więcej informacji o pisaniu testu sterowanego przez hosta, który wymaga urządzenia, znajdziesz w artykule Pisanie testu sterowanego przez hosta w Trade Federation).
Typy testów po stronie hosta
W Trade Federation (TF) możesz uruchamiać kilka typów testów po stronie hosta.
Testy natywne (gtest)
Twórz testy natywne (gtest), aby testować platformę. Jeśli test nie wymaga urządzenia, uruchom go na hoście. W ten sposób test będzie działać znacznie szybciej. Aby skonfigurować takie testy do uruchamiania na hoście testowym, użyj narzędzia TF runner HostGTest.
Oto przykładowa konfiguracja testu TradeFed:
<configuration description="Runs hello_world_test."> <option name="null-device" value="true" /> <test class="com.android.tradefed.testtype.HostGTest" > <option name="module-name" value="hello_world_test" /> </test> </configuration>
Konfiguracja testu uruchamia test gtest (hello_world_test) na hoście. Przykładową konfigurację testu można wygenerować automatycznie. Jeśli test nie wymaga specjalnej konfiguracji ani czyszczenia, możesz polegać na automatycznym generowaniu konfiguracji testu, aby utworzyć odpowiednie konfiguracje testu TF.
Aby skonfigurować test gtest po stronie hosta i włączyć automatyczne generowanie konfiguracji testu, ustaw
host_supported na true w
Android.bp, tak jak w przypadku hello_world_test.
Więcej informacji o pisaniu testu natywnego znajdziesz w artykule Dodawanie nowego przykładu testu natywnego.
Testy hosta JAR
Testy hosta JAR (Java), takie jak JUnit, to testy, które nie muszą być uruchamiane na urządzeniu i które zapewniają pokrycie kodu projektu Java. Takie testy można skonfigurować tak, aby były uruchamiane na hoście testowym za pomocą narzędzia runner HostTest.
Przykładowa konfiguracja testu TradeFed
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.HostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
Konfiguracja testu uruchamia test JUnit po stronie hosta HelloWorldHostTest. Pamiętaj, że powyższą konfigurację testu można wygenerować automatycznie. Jeśli test nie wymaga specjalnej konfiguracji ani czyszczenia, możesz polegać na automatycznym generowaniu konfiguracji testu, aby utworzyć odpowiednią konfigurację testu TradeFed.
Więcej informacji o tym, jak napisać test hosta JAR, znajdziesz na stronie Testy hosta JAR (Java).
Izolowane testy hosta Java
Testy Java bez urządzenia można uruchamiać w środowisku izolacji, ale wiąże się to z niewielkim spadkiem wydajności. Zanim zdecydujesz się na korzystanie z tego środowiska, musisz jednak wziąć pod uwagę kilka ważnych kwestii.
- Jest to domyślny narzędzie runner używane do testów jednostkowych Robolectric i JUnit.
- Tradefed obsługuje w środowisku izolacji tylko testy JUnit.
- Obsługiwane są tylko zależności połączone statycznie. Żadne zależności zadeklarowane
za pomocą
libnie są uwzględniane w ścieżce klasy. - Narzędzie runner izolacji umieszcza w ścieżce klasy tylko narzędzie runner shim i plik JAR testu.
- W przypadku każdego uruchomienia testu za pomocą tego narzędzia runner występuje pewien stały narzut.
Przykładowa konfiguracja testu Tradefed (izolowana)
<configuration description="Executes HelloWorldHostTest"> <test class="com.android.tradefed.testtype.IsolatedHostTest" > <option name="jar" value="HelloWorldHostTest.jar" /> </test> </configuration>
Przykładowa konfiguracja Soong do automatycznego generowania
Zamiast ręcznie tworzyć konfigurację testu, jak powyżej, Soong może automatycznie wygenerować konfigurację za pomocą deklaracji takiej jak w tym przykładzie.
java_test_host {
name: "HelloWorldHostTest",
test_options: {
unit_test: true,
},
test_suites: ["general-tests"],
srcs: ["test/**/*.java"],
static_libs: [
"junit",
],
}Testy Robolectric
Testy Robolectric używają tego samego narzędzia runner co izolowane testy hosta, ale z kilkoma specjalnymi opcjami.
- Opcja
robolectric-resourcesumożliwia przekazywanie do podprocesu kilku opcji wiersza poleceń specyficznych dla Robolectric , a także dodaje do ścieżki klasy podprocesu drzewo kompilacjiandroid-all. Pozostałe 2 opcje są sprawdzonymi metodami, ale ta opcja jest obowiązkowa , aby testy Robolectric działały prawidłowo. - Opcja
java-folderumożliwia zmianę środowiska wykonawczego Java używanego przez podproces. Jest to konieczne, ponieważ Robolectric preferuje określone wersje Java, które mogą nie być zgodne z preferowanym JVM systemu hosta. - Opcja
exclude-pathsumożliwia narzędziu runner podprocesu unikanie wczytywania określonych modułów w ogóle, co jest przydatne, gdy plik JAR zawiera zbędne klasy, które mogą powodować błędy wczytywania.java.to typowe wykluczenie, które pozwala uniknąć zgłaszania wyjątkówSecurityException.
Przykładowa konfiguracja Robolectric
<configuration description="Executes a Sample Robolectric Test"> <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" /> <option name="exclude-paths" value="java" /> <option name="use-robolectric-resources" value="true" /> <test class="com.android.tradefed.testtype.IsolatedHostTest"> <option name="jar" value="RobolectricExampleTest.jar" /> </test> </configuration>
Przykładowa konfiguracja Soong do automatycznego generowania Robolectric
Zamiast ręcznie tworzyć konfigurację testu, jak powyżej, Soong może automatycznie wygenerować konfigurację za pomocą deklaracji takiej jak w tym przykładzie.
android_robolectric_test {
name: "HelloWorldRoboTest",
srcs: [
"src/**/*.java",
],
// Include the testing libraries
static_libs: [
"mockito-robolectric-prebuilt",
"platform-test-annotations",
"testng",
"truth-prebuilt",
],
instrumentation_for: "HelloWorldApp",
}Test Python
Jeśli logika testu jest napisana w Pythonie, użyj rodzaju kompilacji python_test_host, aby utworzyć plik par, który można uruchomić za pomocą TF PythonBinaryHostTest.
Przykładowa konfiguracja testu TradeFed
<configuration description="Config to run atest unittests"> <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" > <option name="par-file-name" value="atest_unittests" /> <option name="test-timeout" value="2m" /> </test> </configuration>
Ustawienie zestawu testów
Aby test po stronie hosta był dostępny dla TF w przypadku danej kompilacji, ustaw w
module testowym `test_suites` ustawienie na
`general-tests`:
test_suites: ["general-tests"],
Dzięki temu ustawieniu test jest spakowany do general-tests.zip w przypadku celu test_suites.