เขียนการทดสอบที่ขับเคลื่อนโดยโฮสต์ใน Trade Federation

หน้านี้อธิบายวิธีเขียนการทดสอบอุปกรณ์สไตล์ 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());
    }
}

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

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

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