หน้านี้จะอธิบายวิธีเขียนการทดสอบฝั่งโฮสต์ที่ไม่ต้องใช้อุปกรณ์ เช่น การทดสอบที่ทำงานในอินสแตนซ์ Linux GCE (โปรดดูรายละเอียดเกี่ยวกับการ เขียนการทดสอบที่ขับเคลื่อนโดยโฮสต์ซึ่งต้องใช้อุปกรณ์ที่หัวข้อ Write a Host-driven Test in Trade Federation)
ประเภทการทดสอบฝั่งโฮสต์
คุณสามารถทำการทดสอบฝั่งโฮสต์ได้หลายประเภทผ่าน Trade Federation (TF)
การทดสอบแบบเนทีฟ (gtest)
สร้างการทดสอบแบบเนทีฟ (gtest) เพื่อทดสอบแพลตฟอร์ม หากการทดสอบไม่จำเป็นต้องใช้อุปกรณ์ ให้เรียกใช้การทดสอบในโฮสต์ วิธีนี้จะทำให้การทดสอบทำงานได้เร็วขึ้นมาก หากต้องการกำหนดค่าการทดสอบดังกล่าวให้ทำงานใน โฮสต์ทดสอบ ให้ใช้ 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
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเขียนการทดสอบแบบเนทีฟได้ที่หัวข้อ Adding a New Native Test Example
การทดสอบโฮสต์ JAR
การทดสอบโฮสต์ JAR (Java) เช่น JUnit เป็นการทดสอบที่ไม่จำเป็นต้องทำงานในอุปกรณ์ และให้ความครอบคลุมของโค้ด โปรเจ็กต์ Java คุณสามารถกำหนดค่าการทดสอบดังกล่าวให้ทำงานในโฮสต์ ทดสอบได้โดยใช้ Runner 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 ที่ไม่ใช้อุปกรณ์ในสภาพแวดล้อมแบบแยกได้โดยมีค่าใช้จ่ายด้านประสิทธิภาพเล็กน้อย อย่างไรก็ตาม คุณควรพิจารณาข้อควรพิจารณาที่สำคัญบางประการก่อนเลือกใช้สภาพแวดล้อมนี้
- นี่คือ Runner เริ่มต้นที่ใช้สำหรับการทดสอบหน่วย Robolectric และ JUnit
- Tradefed รองรับเฉพาะการทดสอบ JUnit ในสภาพแวดล้อมแบบแยก
- ระบบรองรับเฉพาะทรัพยากร Dependency ที่ลิงก์แบบคงที่ ระบบจะไม่รวมทรัพยากร Dependency ที่ประกาศ
ด้วย
libไว้ใน classpath - Runner แบบแยกจะวางเฉพาะ Runner Shim และ JAR การทดสอบของคุณไว้ใน classpath
- การเรียกใช้การทดสอบแต่ละครั้งที่ดำเนินการด้วย Runner นี้จะมีค่าใช้จ่ายคงที่จำนวนหนึ่ง
ตัวอย่างการกำหนดค่าการทดสอบ 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 ใช้ Runner เดียวกับการทดสอบโฮสต์แบบแยก โดยมีตัวเลือกพิเศษบางอย่าง
- ตัวเลือก
robolectric-resourcesช่วยให้ส่งตัวเลือกบรรทัดคำสั่งเฉพาะของ Robolectric บางตัว ไปยังกระบวนการย่อยได้ รวมถึงเพิ่มการสร้างแบบต้นไม้ของandroid-allลงใน classpath ของกระบวนการย่อย แม้ว่าตัวเลือกอื่นๆ 2 ตัวจะเป็นแนวทางปฏิบัติแนะนำ แต่ตัวเลือกนี้เป็น ข้อบังคับ สำหรับ การเรียกใช้การทดสอบ Robolectric ให้สำเร็จ - ตัวเลือก
java-folderช่วยให้เปลี่ยนรันไทม์ Java ที่กระบวนการย่อยใช้ได้ ตัวเลือกนี้จำเป็นเนื่องจาก Robolectric ชอบ Java เวอร์ชันที่เฉพาะเจาะจงซึ่งอาจไม่สอดคล้องกับ JVM ที่ระบบโฮสต์ต้องการ - ตัวเลือก
exclude-pathsช่วยให้ Runner กระบวนการย่อยหลีกเลี่ยงการโหลดโมดูลที่เฉพาะเจาะจง ได้ ซึ่งมีประโยชน์เมื่อ 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