Tulis pengujian tanpa perangkat sisi host di TF

Halaman ini memberi tahu Anda cara menulis pengujian sisi host yang tidak memerlukan perangkat, seperti pengujian yang berjalan pada instance Linux GCE. (Untuk detail tentang menulis tes berbasis host yang memerlukan perangkat, lihat Menulis Tes berbasis Host di Federasi Perdagangan .)

Jenis pengujian sisi host

Anda dapat menjalankan beberapa jenis pengujian sisi host melalui Federasi Perdagangan (TF).

Tes asli (gtest).

Buat pengujian Asli (gtests) untuk menguji platform. Jika pengujian tidak memerlukan perangkat, jalankan di host; tes akan berjalan lebih cepat dengan cara itu. Untuk mengonfigurasi pengujian tersebut agar dijalankan pada host pengujian, gunakan pelari TF HostGTest .

Ini adalah contoh konfigurasi pengujian 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>

Konfigurasi pengujian menjalankan pengujian gtest ( hello_world_test ) pada sebuah host. Contoh konfigurasi pengujian dapat dibuat secara otomatis. Kecuali pengujian Anda memerlukan pengaturan atau pembersihan khusus, Anda dapat mengandalkan pembuatan konfigurasi pengujian otomatis untuk membuat konfigurasi pengujian TF yang tepat.

Untuk mengonfigurasi gtest sisi host dan mengaktifkan pembuatan konfigurasi pengujian otomatis, setel host_supported ke true di Android.bp , seperti pada hello_world_test .

Untuk informasi lebih lanjut tentang menulis tes asli, lihat Menambahkan Contoh Tes Asli Baru .

Tes host JAR

Tes host JAR (Java) , seperti JUnit, adalah tes yang tidak perlu dijalankan pada perangkat, dan menyediakan cakupan kode proyek Java Anda. Pengujian tersebut dapat dikonfigurasi untuk dijalankan pada host pengujian dengan menggunakan runner HostTest .

Contoh konfigurasi pengujian TradeFed

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

Konfigurasi pengujian menjalankan pengujian JUnit sisi host HelloWorldHostTest . Perhatikan bahwa konfigurasi pengujian di atas dapat dibuat secara otomatis. Kecuali pengujian Anda memerlukan pengaturan atau pembersihan khusus, andalkan pembuatan konfigurasi pengujian otomatis untuk membuat konfigurasi pengujian TradeFed yang tepat.

Untuk detail selengkapnya tentang cara menulis pengujian host JAR, lihat halaman Pengujian Host JAR (Java) .

Tes host Java yang terisolasi

Pengujian Java tanpa perangkat dapat dijalankan di lingkungan isolasi dengan sedikit biaya kinerja. Namun, ada beberapa pertimbangan utama yang harus dilakukan sebelum memilih untuk menggunakan lingkungan ini.

  • Ini adalah runner default yang digunakan untuk pengujian unit Robolectric dan JUnit
  • Tradefed hanya mendukung pengujian JUnit di lingkungan isolasi.
  • Hanya dependensi yang tertaut secara statis yang didukung. Tidak ada dependensi yang dideklarasikan dengan lib yang disertakan di classpath.
  • Pelari isolasi hanya menempatkan pelari shim dan tabung uji Anda di jalur kelas.
  • Ada sejumlah overhead tetap per uji coba yang dijalankan dengan runner ini.

Contoh konfigurasi pengujian Tradefed (terisolasi)

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

Contoh konfigurasi Soong untuk autogenerasi

Daripada membuat konfigurasi pengujian secara manual seperti di atas , Soong dapat membuat konfigurasi secara otomatis dengan menggunakan deklarasi seperti contoh ini.

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

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

    static_libs: [
        "junit",
    ],
}

Tes robotelektrik

Pengujian robolektrik menggunakan runner yang sama dengan pengujian host terisolasi, dengan beberapa opsi khusus.

  • Opsi robolectric-resources memungkinkan beberapa opsi baris perintah khusus Robolectric untuk diteruskan ke subproses serta menambahkan build pohon android-all ke classpath subproses. Meskipun dua lainnya merupakan praktik terbaik, opsi ini wajib untuk menjalankan pengujian Robolectric dengan keberhasilan apa pun.
  • Opsi java-folder memungkinkan perubahan runtime Java yang digunakan oleh subproses. Hal ini diperlukan karena Robolectric lebih memilih versi Java tertentu yang mungkin tidak selaras dengan JVM pilihan sistem host.
  • Opsi exclude-paths memungkinkan pelari subproses untuk menghindari memuat modul tertentu sama sekali, yang berguna ketika JAR dilengkapi dengan kelas asing yang dapat menyebabkan kesalahan pemuatan. java. adalah pengecualian umum, untuk menghindari pengecualian SecurityException .

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

Contoh konfigurasi Soong untuk autogenerasi Robolectric

Daripada membuat konfigurasi pengujian secara manual seperti di atas , Soong dapat membuat konfigurasi secara otomatis dengan menggunakan deklarasi seperti contoh ini.

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

Tes ular piton

Jika logika pengujian ditulis dengan Python, gunakan tipe build python_test_host untuk membuat file par yang dapat dijalankan oleh TF PythonBinaryHostTest .

Contoh konfigurasi pengujian 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>

Pengaturan rangkaian pengujian

Agar pengujian sisi host dapat diakses oleh TF untuk build tertentu, setel pengaturan modul pengujian `test_suites` ke `general-tests` :

test_suites: ["general-tests"],

Dengan pengaturan ini, pengujian dikemas ke general-tests.zip pada target test_suites .