เขียนการทดสอบที่ขับเคลื่อนด้วยโฮสต์ในสมาพันธ์การค้า

หน้านี้จะอธิบายวิธีเขียนการทดสอบอุปกรณ์รูปแบบ JUnit4 ที่ดำเนินการโดยโฮสต์ ซึ่งหมายความว่าฝั่งโฮสต์ของตัวเลียนแบบจะทริกเกอร์การดำเนินการ อุปกรณ์

โปรดทราบว่าเราถือว่าเป็น "ฝั่งโฮสต์" การทดสอบและ "ดำเนินการโดยโฮสต์" ทดสอบเล็กน้อย ต่างๆ:

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

เหตุใดจึงควรสร้างการทดสอบที่ขับเคลื่อนด้วยโฮสต์แทนที่จะเป็นการทดสอบการใช้เครื่องมือ

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

การทดสอบที่ขับเคลื่อนด้วยโฮสต์ยังช่วยกระตุ้นขั้นตอนการตั้งค่าเพิ่มเติมที่ต้องมีการโต้ตอบได้ด้วย กับอุปกรณ์ภายนอกที่การทดสอบต้องใช้

การทดสอบที่ขับเคลื่อนด้วยโฮสต์สามารถจัดการกรณีการใช้งานเหล่านี้ และอนุญาตการทดสอบขั้นสูงสำหรับ อุปกรณ์โดยมีสถานการณ์ที่หลากหลายมากขึ้น หากคุณตกอยู่ในสถานการณ์ดังกล่าว ให้เขียน การทดสอบที่ขับเคลื่อนด้วยโฮสต์จะเหมาะสมที่สุด

การทดสอบที่ดำเนินโดยโฮสต์เขียนใน 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 ในการจัดการตัวเลือกทั้งหมดที่เป็นไปได้

และให้สิทธิ์เข้าถึงออบเจ็กต์อุปกรณ์ที่เทรดด้วย

  • getDevice(): ส่งคืนออบเจ็กต์อุปกรณ์ TF สำหรับการควบคุมอุปกรณ์
  • getBuild(): แสดงผลออบเจ็กต์ TF สำหรับข้อมูลบิลด์เพื่อรับข้อมูลเกี่ยวกับ งานสร้าง
  • getAbi(): แสดงผล ABI ที่การทดสอบทำงานอยู่

การสนับสนุนแลกเปลี่ยน: การเตรียมและทำความสะอาดอุปกรณ์สำหรับแต่ละชั้นเรียน

JUnit4 @BeforeClass และ @AfterClass ใช้ได้กับเมธอดแบบคงที่เท่านั้น ซึ่งทำให้ใช้เครื่องจัดการ #getDevice() ไม่ได้ การตั้งค่าหรือการล้างข้อมูลเฉพาะอุปกรณ์ แบบครั้งเดียวต่อชั้นเรียน หากต้องการแก้ไขปัญหานี้ ให้ใช้ คำอธิบายประกอบที่มีการแลกแล้ว

  • @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

ในไฟล์การกำหนดค่า Tradefed XML การทดสอบที่ขับเคลื่อนด้วยโฮสต์จะดำเนินการผ่าน HostTest นักวิ่ง

<test class="com.android.tradefed.testtype.HostTest" >
    <option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>