Na tej stronie dowiesz się, jak napisać test po stronie hosta, który nie wymaga urządzenia, np. testu działającego na instancji GCE Linuxa. (szczegółowe informacje o pisaniu testu host-driven, który wymaga urządzenia, znajdziesz w artykule Write a Host-driven Test in Trade Federation (Tworzenie testu host-driven w ramach usługi Trade Federation)).
Typy testów po stronie hosta
Za pomocą Federation Trade (TF) możesz przeprowadzać różne rodzaje testów po stronie hosta.
Testy natywne (gtest)
Utwórz testy natywnych (testy gtest), aby przetestować platformę. Jeśli test nie wymaga urządzenia, uruchom go na hoście. Dzięki temu będzie się on wykonywać znacznie szybciej. Aby skonfigurować takie testy do uruchamiania na hoście testowym, użyj narzędzia HostGTest.
Oto przykładowa konfiguracja testowa 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 na hoście test gtest (hello_world_test). Przykładowy plik testowy konfiguracji może być generowany automatycznie. Jeśli Twój test nie wymaga specjalnej konfiguracji ani oczyszczania, możesz polegać na automatycznym generowaniu konfiguracji testu, aby utworzyć odpowiednie konfiguracje testu TF.
Aby skonfigurować 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 testów natywnych znajdziesz w artykule Przykład dodawania nowego 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 w języku Java. Takie testy można skonfigurować tak, aby były wykonywane na hoście testowym za pomocą narzędzia 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 HelloWorldHostTest po stronie hosta. Pamiętaj, że powyższa konfiguracja testu może zostać wygenerowana automatycznie. Jeśli test nie wymaga specjalnej konfiguracji ani oczyszczania, użyj automatycznego generowania konfiguracji testu, aby utworzyć odpowiednią konfigurację testu TradeFed.
Więcej informacji o pisaniu testu hosta pliku JAR znajdziesz na stronie Testy hosta pliku JAR (Java).
Testy izolowanego hosta Java
Testy Java bez urządzeń można uruchamiać w środowisku izolowanym z niewielkim kosztem wydajności. Zanim zdecydujesz się na korzystanie z tego środowiska, musisz wziąć pod uwagę kilka ważnych kwestii.
- Jest to domyślny program testowy używany do testów jednostkowych Robolectric i JUnit
- Narzędzie Tradefed obsługuje tylko testy JUnit w środowisku izolacji.
- Obsługiwane są tylko zależności powiązane statycznie. classpath nie zawiera żadnych zależności zadeklarowanych za pomocą
lib
. - Uruchamiający test izolowany umieszcza w ścieżce klas tylko uruchamiający test izolowany i plik jar testu.
- Na każde uruchomienie testu za pomocą tego narzędzia przypada pewien stały koszt.
Przykładowa konfiguracja testu Tradefed (w trybie izolowanym)
<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ę testową, jak powyżej, Soong może automatycznie wygenerować konfigurację za pomocą deklaracji podobnej do tej.
java_test_host { name: "HelloWorldHostTest", test_options: { unit_test: true, }, test_suites: ["general-tests"], srcs: ["test/**/*.java"], static_libs: [ "junit", ], }
Testy Robolectric
Testy Robolectric korzystają z tego samego narzędzia co testy z odizolowanym hostem, ale mają kilka specjalnych opcji.
- Opcja
robolectric-resources
umożliwia przekazanie do podprocesu kilku opcji wiersza poleceń Robolectric, a także dodanie do ścieżki klasy podprocesu kompilacji drzewaandroid-all
. Chociaż pozostałe 2 opcje są sprawdzonymi metodami, ta opcja jest obowiązkowa, aby testy Robolectric mogły się udać. - Opcja
java-folder
umożliwia zmianę środowiska wykonawczego Java używanego przez podproces. Jest to konieczne, ponieważ Robolectric preferuje określone wersje Javy, które mogą nie być zgodne z preferowaną przez system hosta maszyną wirtualną JVM. - Opcja
exclude-paths
pozwala procesowi uruchamiania podprocesu całkowicie uniknąć wczytywania określonych modułów, co jest przydatne, gdy plik JAR zawiera dodatkowe klasy, które mogą powodować błędy wczytywania.java.
to typowe wykluczenie, które pozwala uniknąć 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ęcznego tworzenia konfiguracji testowej, jak powyżej, Soong może automatycznie wygenerować konfigurację, używając deklaracji podobnej do tej w 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 Pythona
Jeśli logika testu jest napisana w Pythonie, użyj typu kompilacji python_test_host
, aby utworzyć plik pary, który można uruchomić w 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 ustawienie modułu testu `test_suites`
na `general-tests`
:
test_suites: ["general-tests"],
Przy tym ustawieniu test jest pakowany do general-tests.zip
na potrzeby celu test_suites
.