เขียนการทดสอบที่ไม่มีอุปกรณ์ฝั่งโฮสต์ใน TF

หน้านี้จะบอกวิธีเขียนการทดสอบฝั่งโฮสต์ที่ไม่ต้องใช้ เช่น การทดสอบที่ทำงานบนอินสแตนซ์ Linux GCE (สำหรับรายละเอียดเกี่ยวกับ การเขียนการทดสอบที่ขับเคลื่อนด้วยโฮสต์ที่ต้องใช้อุปกรณ์ โปรดดูที่ เขียนการทดสอบที่ขับเคลื่อนด้วยโฮสต์ในสมาพันธ์การค้า)

ประเภทการทดสอบฝั่งโฮสต์

คุณสามารถทำการทดสอบฝั่งโฮสต์ได้หลายประเภทผ่านสหพันธ์การค้า (TF)

การทดสอบโฆษณาเนทีฟ (gtest)

สร้างการทดสอบแบบเนทีฟ (gtests) เพื่อทดสอบแพลตฟอร์ม หากการทดสอบไม่ต้องใช้อุปกรณ์ ให้เรียกใช้ใน host; วิธีนี้จะทำให้การทดสอบ เร็วขึ้นมาก วิธีกำหนดค่าการทดสอบดังกล่าวให้ทำงานใน โฮสต์ทดสอบ ให้ใช้ตัวเรียกใช้ TF HostGTest

นี่คือตัวอย่างการกำหนดค่าการทดสอบ 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>

การกำหนดค่าการทดสอบจะเรียกใช้การทดสอบ gtest (hello_world_test) บนโฮสต์ ตัวอย่างการทดสอบ การกำหนดค่าจะสร้างขึ้นโดยอัตโนมัติได้ เว้นแต่การทดสอบจำเป็นต้องใช้การตั้งค่าหรือการทำความสะอาดแบบพิเศษ คุณสามารถใช้การสร้างการกำหนดค่าการทดสอบอัตโนมัติเพื่อสร้างการทดสอบ TF ที่เหมาะสม การกำหนดค่าเอง

หากต้องการกำหนดค่า gtest ฝั่งโฮสต์และเปิดใช้การสร้างการกำหนดค่าการทดสอบอัตโนมัติ ให้ตั้งค่า host_supported ถึง true นิ้ว Android.bp เช่นใน hello_world_test

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเขียนการทดสอบเนทีฟ โปรดดูที่ การเพิ่มการทดสอบโฆษณาเนทีฟใหม่ ตัวอย่างเช่น

การทดสอบโฮสต์ JAR

การทดสอบโฮสต์ JAR (Java) เช่น JUnit เป็นการทดสอบที่ไม่ต้องเรียกใช้ในอุปกรณ์ และให้โค้ด การครอบคลุมของโปรเจ็กต์ Java การทดสอบดังกล่าวสามารถกำหนดค่าให้ทำงานในการทดสอบได้ โฮสต์โดยใช้ตัวรัน HostTest

ตัวอย่างการกำหนดค่าการทดสอบ TradeFed

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

การกำหนดค่าการทดสอบจะเรียกใช้การทดสอบ JUnit ฝั่งโฮสต์ของ HelloWorldHostTest โปรดทราบว่าการกำหนดค่าการทดสอบข้างต้น สร้างขึ้นโดยอัตโนมัติได้ เว้นแต่การทดสอบจะต้องมีการตั้งค่าหรือการทำความสะอาดแบบพิเศษ การสร้างการกำหนดค่าการทดสอบอัตโนมัติเพื่อสร้างการทดสอบ TradeFed ที่เหมาะสม การกำหนดค่า

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีเขียนการทดสอบโฮสต์ JAR โปรดดูที่ การทดสอบโฮสต์ JAR (Java)

การทดสอบโฮสต์ Java ที่แยกไว้

การทดสอบ Java แบบไร้อุปกรณ์ดำเนินการได้ในสภาพแวดล้อมแบบแยกโดยมีค่าใช้จ่ายด้านประสิทธิภาพเล็กน้อย อย่างไรก็ตาม มีข้อควรพิจารณาที่สำคัญบางประการก่อนที่จะเลือกใช้โซลูชันนี้ ของคุณ

  • นี่คือตัววิ่งเริ่มต้นที่ใช้สำหรับการทดสอบหน่วย Robolectric และ JUnit
  • Tradefed รองรับเฉพาะการทดสอบ JUnit ในสภาพแวดล้อมการแยกเท่านั้น
  • รองรับเฉพาะทรัพยากร Dependency ที่ลิงก์แบบคงที่เท่านั้น ไม่มีทรัพยากร Dependency ที่ประกาศ ที่มี lib รวมอยู่ใน Classpath
  • ตัวดำเนินการแยกจะวางเฉพาะ shim Runner และ Jar ทดสอบบน classpath
  • มีการใช้ค่าโสหุ้ยคงที่จำนวนหนึ่งต่อการทดสอบที่ดำเนินการกับตัววิ่งนี้

ตัวอย่างการกำหนดค่าการทดสอบ Tradefed (แยก)

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

ตัวอย่างการกำหนดค่า Soong สำหรับการสร้างอัตโนมัติ

Soong สามารถสร้างการกำหนดค่าอัตโนมัติได้โดยใช้ แทนการสร้างการกำหนดค่าการทดสอบด้วยตัวเองเช่นข้างต้น การประกาศ เหมือนตัวอย่างนี้

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

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

    static_libs: [
        "junit",
    ],
}

การตรวจโรโมเลคตริกซ์

การทดสอบโรโปเลกตริกใช้ตัววิ่งเดียวกันกับการทดสอบโฮสต์ที่แยกออกมา โดยมีแบบพิเศษ ตัวเลือก

  • ตัวเลือก robolectric-resources จะเปิดใช้ตัวเลือกบรรทัดคำสั่งเฉพาะ Robolectric บางรายการ ไปยังกระบวนการย่อย รวมถึงเพิ่มบิลด์ต้นไม้ของ android-all ลงใน คลาสพาธของกระบวนการย่อย แม้ว่าอีก 2 รายการจะเป็นแนวทางปฏิบัติแนะนำ แต่ตัวเลือกนี้จำเป็นสำหรับ ใช้การทดสอบ Robolectric ใดๆ ที่มีความสำเร็จ
  • ตัวเลือก java-folder อนุญาตให้เปลี่ยนรันไทม์ของ Java ที่กระบวนการย่อยใช้อยู่ นี่คือ เนื่องจาก Robolectric ต้องการ Java เวอร์ชันบางเวอร์ชันที่อาจไม่สอดคล้องกับ JVM ที่ต้องการของระบบโฮสต์
  • ตัวเลือก exclude-paths ช่วยให้ตัวดำเนินการย่อยของกระบวนการหลีกเลี่ยงการโหลดโมดูลบางรายการได้ ซึ่งมีประโยชน์เมื่อ JAR มาพร้อมคลาสที่ไม่เกี่ยวข้องซึ่งอาจทําให้เกิดข้อผิดพลาดในการโหลด java. เป็นการยกเว้นทั่วไป เพื่อหลีกเลี่ยงการทำให้เกิดข้อยกเว้น SecurityException รายการ

ตัวอย่างการกำหนดค่า 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>

ตัวอย่างการกำหนดค่า Soong สำหรับการสร้างอัตโนมัติ Robolectric

แทนที่จะสร้างการกำหนดค่าการทดสอบด้วยตัวเอง เช่น ด้านบน Soong สามารถสร้างการกำหนดค่าโดยอัตโนมัติโดยใช้การประกาศดังตัวอย่างนี้

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

ถ้าตรรกะการทดสอบเขียนด้วย Python ให้ใช้ประเภทบิลด์ python_test_host เพื่อสร้างไฟล์พาร์ที่สามารถ ที่ดำเนินการโดย TF PythonBinaryHostTest

ตัวอย่างการกำหนดค่าการทดสอบ 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>

การตั้งค่าชุดทดสอบ

สำหรับ TF สำหรับการทดสอบฝั่งโฮสต์ให้เข้าถึงได้ ให้ตั้งค่า การตั้งค่าโมดูลทดสอบ `test_suites` เป็น `general-tests`:

test_suites: ["general-tests"],

เมื่อใช้การตั้งค่านี้ การทดสอบจะรวมอยู่ใน general-tests.zip เป้าหมาย test_suites