หน้านี้จะบอกวิธีเขียนการทดสอบฝั่งโฮสต์ที่ไม่ต้องใช้อุปกรณ์ เช่น การทดสอบที่ทำงานบนอินสแตนซ์ GCE ของ Linux (ดูรายละเอียดเกี่ยวกับการ เขียนการทดสอบที่ขับเคลื่อนโดยโฮสต์ซึ่งต้องใช้อุปกรณ์ได้ที่ เขียนการทดสอบที่ขับเคลื่อนโดยโฮสต์ใน Trade Federation)
ประเภทการทดสอบฝั่งโฮสต์
คุณสามารถเรียกใช้การทดสอบฝั่งโฮสต์ได้หลายประเภทผ่าน Trade Federation (TF)
การทดสอบเนทีฟ (gtest)
สร้างการทดสอบเนทีฟ (gtests) เพื่อทดสอบแพลตฟอร์ม หากการทดสอบไม่จำเป็นต้องใช้อุปกรณ์ ให้เรียกใช้การทดสอบในโฮสต์ การทดสอบจะทำงานได้เร็วกว่ามาก หากต้องการกำหนดค่าการทดสอบดังกล่าวให้ทำงานใน โฮสต์ทดสอบ ให้ใช้ TF Runner 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
ที่มี
libจะรวมอยู่ใน classpath - โปรแกรมเรียกใช้การแยกจะวางโปรแกรมเรียกใช้ Shim และไฟล์ JAR ของการทดสอบไว้ในเส้นทางคลาสเท่านั้น
- การเรียกใช้การทดสอบแต่ละครั้งที่ดำเนินการด้วยโปรแกรมเรียกใช้นี้จะมีค่าใช้จ่ายคงที่จำนวนหนึ่ง
ตัวอย่างการกำหนดค่าการทดสอบ 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
การทดสอบ Robolectric ใช้ตัวเรียกใช้เดียวกันกับการทดสอบโฮสต์ที่แยกต่างหาก โดยมีตัวเลือกพิเศษบางอย่าง
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 เพื่อสร้างไฟล์ Par ที่ 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