TF'de ana bilgisayar tarafı cihazsız bir test yazın

Bu sayfada, Linux GCE örneğinde çalışan bir test gibi, cihaz gerektirmeyen bir ana bilgisayar tarafı testinin nasıl yazılacağı anlatılmaktadır. (Cihaz gerektiren ana bilgisayar tabanlı bir test yazma hakkında ayrıntılar için Ticaret Federasyonu'nda Ana Bilgisayar Odaklı Test Yazma konusuna bakın.)

Ana bilgisayar tarafı test türleri

Ticaret Federasyonu (TF) aracılığıyla çeşitli türlerde ana bilgisayar tarafı testleri çalıştırabilirsiniz.

Yerel (gtest) testler

Bir platformu test etmek için Yerel testler (gtest'ler) oluşturun. Test bir cihaz gerektirmiyorsa testi bir ana bilgisayarda çalıştırın; test bu şekilde çok daha hızlı çalışacaktır. Bu tür testleri bir test ana bilgisayarında çalışacak şekilde yapılandırmak için TF çalıştırıcısı HostGTest'i kullanın.

Bu örnek bir TradeFed test yapılandırmasıdır:

<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 bilgisayarda bir gtest testi ( hello_world_test ) çalıştırır. Örnek test yapılandırması otomatik olarak oluşturulabilir. Testiniz özel bir kurulum veya temizleme gerektirmediği sürece, uygun TF test yapılandırmalarını oluşturmak için otomatik test yapılandırması oluşturmaya güvenebilirsiniz.

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

Yerel test yazma hakkında daha fazla bilgi için bkz. Yeni Yerel Test Örneği Ekleme .

JAR ana bilgisayar testleri

JUnit gibi JAR (Java) ana bilgisayar testleri , bir cihazda çalıştırılması gerekmeyen ve Java projenizin kod kapsamını sağlayan testlerdir. Bu tür testler, HostTest çalıştırıcısı kullanılarak bir test ana bilgisayarında ç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'in ana bilgisayar tarafında JUnit testini çalıştırır. Yukarıdaki test yapılandırmasının otomatik olarak oluşturulabileceğini unutmayın. Testiniz özel kurulum veya temizleme gerektirmediği sürece, uygun TradeFed test yapılandırmasını oluşturmak için otomatik test yapılandırması oluşturmaya güvenin.

JAR ana bilgisayar testinin nasıl yazılacağına ilişkin daha fazla ayrıntı için JAR (Java) Ana Bilgisayar Testleri sayfasına bakın.

Yalıtılmış Java ana bilgisayar testleri

Cihazsız Java testleri, izolasyon ortamında düşük bir performans maliyetiyle çalıştırılabilir. Ancak bu ortamı kullanmayı seçmeden önce dikkate alınması gereken bazı önemli hususlar vardır.

  • Bu, Robolectric ve JUnit birim testleri için kullanılan varsayılan çalıştırıcıdır
  • Tradefed, izolasyon ortamında yalnızca JUnit testlerini destekler.
  • Yalnızca statik olarak bağlantılı bağımlılıklar desteklenir. Sınıf yoluna lib ile bildirilen hiçbir bağımlılık dahil edilmez.
  • İzolasyon koşucusu yalnızca dolgu koşucusunu ve test kavanozunuzu sınıf yoluna koyar.
  • Bu koşucuyla gerçekleştirilen test çalıştırması başına bir miktar sabit ek yük 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ı

Yukarıdaki gibi test yapılandırmasını manuel olarak oluşturmak yerine Soong, bu örnekteki gibi bir bildirim 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",
    ],
}

Roboelektrik testler

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

  • robolectric-resources seçeneği, Robolectric'e özgü birkaç komut satırı seçeneğinin alt sürece aktarılmasına olanak tanır ve aynı zamanda android-all ağaç yapısını alt süreç sınıf yoluna ekler. Diğer ikisi en iyi uygulamalar olsa da Robolectric testlerini başarıyla yürütmek için bu seçenek zorunludur .
  • java-folder seçeneği, alt işlem tarafından kullanılan Java çalışma zamanının değiştirilmesine olanak tanır. Bu, Robolectric'in ana sistemin tercih ettiği 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 yüklemekten kaçınmasına olanak tanır; bu, bir JAR'ın yükleme hatalarına neden olabilecek yabancı sınıflarla birlikte geldiği durumlarda kullanışlıdır. java. SecurityException istisnalarının atılmasını önlemek için yaygın bir istisnadı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ı

Yukarıdaki gibi test yapılandırmasını manuel olarak oluşturmak yerine Soong, bu örnekteki gibi bir bildirim 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ılabilecek 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ı

Belirli bir yapı için ana bilgisayar tarafı testinin TF tarafından erişilebilir olması için test modülü `test_suites` ayarını `general-tests` olarak ayarlayın:

test_suites: ["general-tests"],

Bu ayarla test, test_suites hedefinde general-tests.zip dosyasına paketlenir.