หน้านี้จะอธิบายวิธีเขียนการทดสอบอุปกรณ์สไตล์ JUnit4 ที่ขับเคลื่อนโดยโฮสต์ ซึ่งหมายความว่าด้านโฮสต์ของสายรัดจะทริกเกอร์การดำเนินการกับ อุปกรณ์
โปรดทราบว่าเราถือว่าการทดสอบ "ฝั่งโฮสต์" และการทดสอบ "ที่โฮสต์เป็นผู้กำหนด" นั้นแตกต่างกันเล็กน้อย ดังนี้
- การทดสอบที่ขับเคลื่อนโดยโฮสต์: คือการทดสอบที่ทำงานบนโฮสต์ซึ่งโต้ตอบกับอุปกรณ์อย่างน้อย 1 เครื่อง ระบบภายใต้การทดสอบ (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());
}
}
การทดสอบที่โฮสต์เป็นผู้ขับเคลื่อนใน Trade Federation จะขับเคลื่อนโดย DeviceJUnit4ClassRunner โปรแกรมเรียกใช้การทดสอบ JUnit4 โครงสร้างโดยรวมของคลาสทดสอบจะเหมือนกับการทดสอบ JUnit4 ปกติ
@BeforeClass
@Before
@Test
@After
@AfterClass
Assume
,Assert
การขยาย BaseHostJunit4Test เป็นวิธีรับช่วง API ยูทิลิตีการทดสอบที่มีประโยชน์ เช่น
installPackage
: อนุญาตให้ติดตั้ง APK ในอุปกรณ์เป้าหมายinstallPackageAsUser
: อนุญาตให้ติดตั้ง APK ในฐานะผู้ใช้ในอุปกรณ์เป้าหมายuninstallPackage
: อนุญาตให้ถอนการติดตั้ง APKisPackageInstalled
: ตรวจสอบว่ามีการติดตั้งแพ็กเกจหรือไม่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 runner
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>