TF'de ana makine tarafında cihazsız test yazma

Bu sayfada, cihaz gerektirmeyen bir ana makine tarafı testin (ör. Linux GCE örneğinde çalışan bir test) nasıl yazılacağı açıklanmaktadır. (Cihaz gerektiren bir ana makine tarafından yönlendirilen test yazma hakkında ayrıntılı bilgi için Trade Federation'da Ana Makine Tarafından Yönetilen Test Yazma başlıklı makaleyi inceleyin.)

Ana makine tarafında test türleri

Trade Federation (TF) üzerinden çeşitli barındırıcı taraflı testler çalıştırabilirsiniz.

Yerel (gtest) testler

Bir platformu test etmek için yerel testler (gtests) oluşturun. Test için cihaz gerekmiyorsa bir ana makinede çalıştırın. Bu şekilde test çok daha hızlı çalışır. Bu tür testleri bir test ana makinesinde çalışacak şekilde yapılandırmak için TF çalıştırıcı HostGTest'i kullanın.

Aşağıda örnek bir TradeFed test yapılandırması verilmiştir:

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

Test yapılandırması, bir ana makinede gtest testi (hello_world_test) çalıştırır. Örnek test yapılandırması otomatik olarak oluşturulabilir. Testiniz için özel bir kurulum veya temizleme gerekmiyorsa uygun TF test yapılandırmaları oluşturmak için otomatik test yapılandırması oluşturma özelliğinden yararlanabilirsiniz.

Ana makine tarafında bir gtest yapılandırmak ve otomatik test yapılandırması oluşturmayı etkinleştirmek için hello_world_test'te olduğu gibi Android.bp içinde host_supported değerini true olarak ayarlayın.

Yerel test yazma hakkında daha fazla bilgi için Yeni Yerel Test Ekleme başlıklı makaleyi inceleyin.

JAR ana makine testleri

JUnit gibi JAR (Java) ana makine testleri, bir cihazda çalıştırılmasına gerek olmayan ve Java projenizin kod kapsamını sağlayan testlerdir. Bu tür testler, HostTest çalıştırıcı kullanılarak test ana makinesinde çalışacak şekilde yapılandırılabilir.

Örnek TradeFed test yapılandırması

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

Test yapılandırması, HelloWorldHostTest için ana makine tarafında bir JUnit testi çalıştırır. Yukarıdaki test yapılandırmasının otomatik olarak oluşturulabileceğini unutmayın. Testiniz için özel kurulum veya temizleme gerekmiyorsa uygun TradeFed test yapılandırmasını oluşturmak için otomatik test yapılandırması oluşturma özelliğini kullanın.

JAR ana makine testi yazma hakkında daha fazla bilgi için JAR (Java) ana makine testleri sayfasına bakın.

İzole edilmiş Java ana makine testleri

Cihazsız Java testleri, performans açısından küçük bir maliyetle yalıtılmış bir ortamda çalıştırılabilir. Ancak bu ortamı kullanmayı seçmeden önce dikkate alınması gereken bazı önemli noktalar vardır.

  • Bu, Robolectric ve JUnit birim testleri için kullanılan varsayılan çalıştırıcıdır.
  • Tradefed, yalıtılmış ortamda yalnızca JUnit testlerini destekler.
  • Yalnızca statik olarak bağlı bağımlılıklar desteklenir. lib ile tanımlanan hiçbir bağımlılık sınıf yoluna dahil edilmez.
  • İzolasyon çalıştırıcı, sınıf yoluna yalnızca şim çalıştırıcıyı ve test jar dosyanızı yerleştirir.
  • Bu çalıştırıcıyla çalıştırılan her test çalıştırması için sabit bir miktarda ek maliyet vardır.

Örnek Tradefed test yapılandırması (yalıtılmış)

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

Otomatik oluşturma için örnek Soong yapılandırması

Soong, test yapılandırmasını yukarıdaki gibi manuel olarak oluşturmak yerine bu örnekteki gibi bir beyan kullanarak yapılandırmayı otomatik olarak oluşturabilir.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

Robolectric testleri

Robolectric testleri, birkaç özel seçenekle birlikte izole ana makine testleriyle aynı çalıştırıcıyı kullanır.

  • robolectric-resources seçeneği, Robolectric'e özgü birkaç komut satırı seçeneğini alt sürece iletilmesini sağlar ve android-all ağaç derlemesini alt süreç sınıf yolu yoluna ekler. Diğer ikisi en iyi uygulamalar olsa da Robolectric testlerini başarıyla çalıştırmak için bu seçenek zorunludur.
  • java-folder seçeneği, alt işlemin kullandığı Java çalışma zamanını değiştirmenize olanak tanır. Bu, Robolectric'in ana sistem tarafından tercih edilen JVM ile uyumlu olmayabilecek belirli Java sürümlerini tercih etmesi nedeniyle gereklidir.
  • exclude-paths seçeneği, alt işlem çalıştırıcısının belirli modülleri hiç yüklememesini sağlar. Bu seçenek, JAR'da yükleme hatalarına neden olabilecek ek sınıflar olduğunda kullanışlıdır. java., SecurityException istisnalarının atılmasını önlemek için yaygın bir hariç tutmadır.

Örnek Robolectric yapılandırması

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

Robolectric otomatik oluşturma için örnek Soong yapılandırması

Soong, test yapılandırmasını yukarıdaki gibi manuel olarak oluşturmak yerine bu örnekteki gibi bir beyan kullanarak yapılandırmayı otomatik olarak oluşturabilir.

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",
}

Python testi

Test mantığı Python'da yazılmışsa TF PythonBinaryHostTest tarafından çalıştırılabilen bir par dosyası oluşturmak için python_test_host derleme türünü kullanın.

Örnek TradeFed test yapılandırması

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

Test paketi ayarı

Ana makine tarafındaki testin belirli bir derleme için TF tarafından erişilebilir olması amacıyla test modülü `test_suites` ayarını `general-tests` olarak ayarlayın:

test_suites: ["general-tests"],

Bu ayarda test, test_suites hedefinde general-tests.zip olarak paketlenir.