หน้านี้อธิบายวิธีเขียนการทดสอบอุปกรณ์สไตล์ JUnit4 ที่ขับเคลื่อนโดยโฮสต์ ซึ่งหมายความว่าด้านโฮสต์ของสายรัดจะทริกเกอร์การดำเนินการกับอุปกรณ์
โปรดทราบว่าเราถือว่าการทดสอบ "ฝั่งโฮสต์" และการทดสอบ "ที่ขับเคลื่อนด้วยโฮสต์" แตกต่างกันเล็กน้อย:
- การทดสอบที่ขับเคลื่อนด้วยโฮสต์: เป็นการทดสอบที่ทำงานบนโฮสต์ที่โต้ตอบกับอุปกรณ์ตั้งแต่หนึ่งเครื่องขึ้นไป ระบบที่อยู่ระหว่างการทดสอบ (SUT) ไม่ได้อยู่บนโฮสต์เอง แต่กำลังทดสอบจากโฮสต์
- การทดสอบฝั่งโฮสต์: เป็นการทดสอบที่ทำงานบนโฮสต์ล้วนๆ และทดสอบบางอย่างบนโฮสต์เท่านั้น เช่น การทดสอบหน่วย
เหตุใดจึงต้องสร้างการทดสอบแบบโฮสต์แทนการทดสอบเครื่องมือวัด
การทดสอบบางอย่างอาจทำให้คุณต้องส่งผลต่อสถานะโดยรวมของอุปกรณ์ เช่น การออกคำสั่งรีบูต ในกรณีการทดสอบเครื่องมือวัด การรีบูตจะทำให้เครื่องมือวัดไม่ทำงาน การทดสอบไม่สามารถดำเนินการต่อได้ และจะไม่มีผลลัพธ์ใดๆ
การทดสอบที่ขับเคลื่อนด้วยโฮสต์ยังสามารถขับเคลื่อนขั้นตอนการตั้งค่าเพิ่มเติมที่จำเป็นต้องมีการโต้ตอบกับอุปกรณ์ภายนอกที่การทดสอบขึ้นอยู่กับ
การทดสอบที่ขับเคลื่อนด้วยโฮสต์สามารถจัดการกับกรณีการใช้งานเหล่านี้และอนุญาตให้ทำการทดสอบอุปกรณ์ขั้นสูงด้วยสถานการณ์ต่างๆ มากขึ้น หากคุณอยู่ในสถานการณ์นั้น การเขียนการทดสอบโดยโฮสต์จะเหมาะสมที่สุด
การทดสอบที่ขับเคลื่อนด้วยโฮสต์เขียนใน TF อย่างไร
นี่คือตัวอย่าง:
@RunWith(DeviceJUnit4ClassRunner.class)
public class SampleHostJUnit4DeviceTest extends BaseHostJUnit4Test {
@Before
public void setUp() throws Exception {
// Some setup
}
@Test
public void testCheckWeHaveDevice() throws Exception {
Assert.assertNotNull(getDevice());
}
}
การทดสอบที่ขับเคลื่อนด้วยโฮสต์ในสหพันธ์การค้านั้นขับเคลื่อนโดยตัวดำเนินการทดสอบ DeviceJUnit4ClassRunner JUnit4 โครงสร้างโดยรวมของคลาสการทดสอบเหมือนกับการทดสอบ JUnit4 ปกติ:
-
@BeforeClass
-
@Before
-
@Test
-
@After
-
@AfterClass
-
Assume
,Assert
การขยาย BaseHostJunit4Test เป็นวิธีการสืบทอด API ยูทิลิตี้การทดสอบที่มีประโยชน์ เช่น:
-
installPackage
: อนุญาตให้ติดตั้ง APK บนอุปกรณ์เป้าหมาย -
installPackageAsUser
: อนุญาตให้ติดตั้ง APK ในฐานะผู้ใช้บนอุปกรณ์เป้าหมาย -
uninstallPackage
: อนุญาตให้ถอนการติดตั้ง APK -
isPackageInstalled
: ตรวจสอบว่ามีการติดตั้งแพ็คเกจหรือไม่ -
hasDeviceFeature
: ตรวจสอบว่าอุปกรณ์รองรับคุณสมบัติหรือไม่ (pm list features
) -
runDeviceTests(DeviceTestRunOptions options)
: เรียกใช้การทดสอบเครื่องมือวัดกับอุปกรณ์เป้าหมายโดยใช้ DeviceTestRunOptions เพื่อจัดการกับตัวเลือกที่เป็นไปได้ทั้งหมด
ให้สิทธิ์เข้าถึงวัตถุอุปกรณ์ Tradefed ด้วย:
-
getDevice()
: ส่งกลับวัตถุอุปกรณ์ TF สำหรับจัดการอุปกรณ์ -
getBuild()
: ส่งคืนวัตถุ TF ข้อมูลบิลด์เพื่อรับข้อมูลเกี่ยวกับบิลด์ -
getAbi()
: ส่งคืน ABI ที่การทดสอบกำลังทำงานอยู่
การสนับสนุน Tradefed: การเตรียมอุปกรณ์ต่อคลาสและการล้างข้อมูล
JUnit4 @BeforeClass
และ @AfterClass
ใช้ได้กับเมธอดสแตติกเท่านั้น ซึ่งทำให้ไม่สามารถใช้ตัวจัดการ #getDevice()
เพื่อทำการตั้งค่าเฉพาะอุปกรณ์ ครั้งเดียว ต่อคลาส หรือล้างข้อมูล ในการแก้ปัญหานี้ ให้ใช้คำอธิบายประกอบ Tradefed
- @BeforeClassWithInfo: รันก่อนคำอธิบายประกอบ @BeforeClass
- @AfterClassWithInfo: รันตามคำอธิบายประกอบ @AfterClass
@BeforeClassWithInfo
public static void beforeClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
@AfterClassWithInfo
public static void afterClassWithDevice(TestInformation testInfo) {
assertNotNull(testInfo.getDevice());
testInfo.properties().put("mytest:test-prop", "test");
}
TestInformation
อนุญาตให้คุณใช้อุปกรณ์และจัดเก็บคุณสมบัติที่สามารถใช้ได้ทั้งในขอบเขตแบบคงที่และแบบไม่คงที่ BaseHostJUnit4Test
รองรับการรับ TestInformation
ในขอบเขตที่ไม่คงที่ผ่าน #getTestInformation()
หากคุณไม่ได้ขยาย BaseHostJUnit4Test
คุณสามารถใช้ ITestInformationReceiver
เพื่อรับอ็อบเจ็กต์ TestInformation
จะกำหนดค่าการทดสอบที่ขับเคลื่อนด้วยโฮสต์ใน Tradefed ได้อย่างไร
ในไฟล์คอนฟิกูเรชัน XML ของ Tradefed การทดสอบที่ขับเคลื่อนด้วยโฮสต์จะดำเนินการผ่านตัวรัน HostTest
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>