Pisanie testu bez urządzenia po stronie hosta w TF

Na tej stronie znajdują się informacje o tym, jak napisać test po stronie hosta, który nie wymaga tagu np. w ramach testu w instancji GCE z systemem Linux. (szczegółowe informacje o jak napisać test oparty na hoście, który wymaga urządzenia, patrz . napisać test przeprowadzany przez gospodarza w federacji handlowej).

Typy testów po stronie hosta

W ramach Federacji Handlowej można przeprowadzać różne rodzaje testów po stronie hosta. (TF).

Testy natywne (gtest)

tworzyć testy reklam natywnych, (gtests), aby przetestować platformę. Jeśli test nie wymaga urządzenia, uruchom go na host; test przebiegnie znacznie szybciej. Aby skonfigurować uruchamianie takich testów hosta testowego, użyj narzędzia TF Runner TF HostGTest.

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 testowa uruchamia test gtest (hello_world_test) na hoście. Przykładowy test Konfiguracja może zostać wygenerowana automatycznie. O ile Twój test nie wymaga specjalnej konfiguracji ani czyszczenia, możesz polegać na automatycznym generowaniu konfiguracji testu, by utworzyć prawidłowy test TF konfiguracji.

Aby skonfigurować test gtest po stronie hosta i włączyć automatyczne generowanie konfiguracji testu, ustaw host_supported do true in Android.bp, na przykład hello_world_test.

Więcej informacji o tworzeniu testu natywnego znajdziesz tutaj Dodawanie nowego testu natywnego Przykład.

Testy hosta JAR

Testy hosta JAR (Java) takie jak JUnit to testy, które nie muszą uruchamiać się na urządzeniu i dostarczają kodu w Twoim projekcie Java. Takie testy można skonfigurować tak, aby uruchamiały się na pojedynczych testach przy użyciu uruchamiania 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 HelloWorldHostTest po stronie hosta. Pamiętaj, że powyższa konfiguracja testowa mogą zostać wygenerowane automatycznie. O ile Twój test nie wymaga specjalnej konfiguracji ani czyszczenia, polegaj na automatyczne generowanie konfiguracji testów w celu utworzenia prawidłowego testu TradeFed konfiguracji.

Więcej informacji o pisaniu testu hosta JAR znajdziesz tutaj: Testy hosta JAR (Java).

Testy pojedynczych hostów Java

Testy w Javie bez urządzeń można przeprowadzać w izolowanym środowisku przy niewielkim koszcie. Przed rozpoczęciem korzystania z tej formy płatności należy jednak wziąć pod uwagę kilka ważnych kwestii. dla środowiska.

  • Jest to domyślny bieg używany w testach jednostkowych Robolectric i JUnit
  • Tradefed obsługuje tylko testy JUnit w środowisku izolowanym.
  • Obsługiwane są tylko zależności powiązane statycznie. Nie zadeklarowano zależności z lib są uwzględnione w ścieżce klasy.
  • Uruchamianie izolacji umieszcza w ścieżce klasy tylko okrągły kreator i Twój testowy plik jar.
  • Występuje pewien stały narzut na każde uruchomienie testowe wykonywane z użyciem tego biegu.

Przykładowa konfiguracja testu z The Tradefed (izolowana)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

Przykładowa konfiguracja funkcji Soong na potrzeby automatycznego generowania

Zamiast ręcznie tworzyć konfigurację testową, tak jak powyżej, Soong może ją automatycznie wygenerować za pomocą polecenia 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 Roboelektryczne

W testach Robolectric wykorzystuje się ten sam bieg co w przypadku izolowanych testów hosta, w tym kilka .

  • Opcja robolectric-resources umożliwia włączenie kilku opcji wiersza poleceń specyficznych dla Robolectric zostanie przekazana do podprocesu, a także dodaje kompilację drzewa android-all do ścieżki klasy podprocesu. Pozostałe 2 sposoby to sprawdzone metody, ale ta opcja jest obowiązkowa w przypadku: Przeprowadzanie testów Robolectric z dowodem na skuteczność.
  • Opcja java-folder pozwala zmienić środowisko wykonawcze Java używane przez podproces. To jest jest niezbędna ze względu na preferowanie przez Robolectric określonych wersji Javy, które mogą nie być zgodne preferowanej metody JVM w systemie hosta.
  • Opcja exclude-paths pozwala uruchamiającemu podrzędnemu procesowi unikać wczytywania konkretnych modułów w ogóle, co jest przydatne, gdy plik JAR zawiera zbędne klasy, które mogą powodować błędy wczytywania. java. to częsty wykluczenie, które pozwala uniknąć zgłaszania wyjątków SecurityException.

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 na potrzeby automatycznego generowania Robolectric

Zamiast ręcznie tworzyć konfigurację testową, tak jak powyżej, funkcja Soong może automatycznie generować konfigurację, korzystając z deklaracji podobnej do tego przykładu.

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 testowa jest napisana w Pythonie, użyj typu kompilacji python_test_host, aby utworzyć plik par, który można przeprowadzana przez 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 pakietu testowego

Aby test po stronie hosta był dostępny dla pliku TF danej kompilacji, ustaw w tagu ustawienia modułu testowania `test_suites` na `general-tests`:

test_suites: ["general-tests"],

Gdy to ustawienie jest włączone, test jest spakowany do: general-tests.zip w dniu wartość docelową test_suites.