ट्रेड फ़ेडरेशन में होस्ट-ड्रिवन टेस्ट लिखें

इस पेज पर, होस्ट के ज़रिए चलाए जाने वाले JUnit4 स्टाइल के डिवाइस टेस्ट को लिखने का तरीका बताया गया है. इसका मतलब है कि हार्नेस के होस्ट साइड से डिवाइस के ख़िलाफ़ कार्रवाइयां ट्रिगर की जाएंगी.

ध्यान दें कि हम "होस्ट-साइड" टेस्ट और "होस्ट-ड्रिवन" टेस्ट को थोड़ा अलग मानते हैं:

  • होस्ट-ड्रिवन टेस्ट: यह होस्ट पर चलने वाला एक टेस्ट है, जो एक या एक से ज़्यादा डिवाइसों के साथ इंटरैक्ट करता है. जिस सिस्टम की जांच की जा रही है (एसयूटी), होस्ट पर नहीं है, बल्कि होस्ट से इसकी जांच की जा रही है.
  • होस्ट-साइड टेस्ट: यह टेस्ट पूरी तरह से होस्ट पर चलता है और सिर्फ़ होस्ट पर किसी चीज़ की जांच करता है. उदाहरण के लिए, यूनिट टेस्ट.

इंस्ट्रूमेंटेशन टेस्ट के बजाय, होस्ट-ड्रिवन टेस्ट क्यों बनाएं?

कुछ टेस्ट के लिए, आपको डिवाइस की पूरी स्थिति पर असर डालना पड़ सकता है. जैसे, रीबूट करने का निर्देश देना. इंस्ट्रूमेंटेशन टेस्ट केस में, रीबूट करने से इंस्ट्रूमेंटेशन बंद हो जाएगा. इससे टेस्ट जारी नहीं रखा जा सकेगा और नतीजे भी उपलब्ध नहीं होंगे.

होस्ट-ड्रिवन टेस्ट, सेटअप के अतिरिक्त चरणों को भी चला सकते हैं. इन चरणों के लिए, उन बाहरी डिवाइसों के साथ इंटरैक्ट करना ज़रूरी होता है जिन पर टेस्ट निर्भर करता है.

होस्ट-ड्रिवन टेस्ट, इन इस्तेमाल के उदाहरणों को मैनेज कर सकता है. साथ ही, ज़्यादा स्थितियों में डिवाइस की बेहतर टेस्टिंग की अनुमति देता है. अगर आपके पास ऐसी स्थिति है, तो होस्ट-ड्रिवन टेस्ट करना सही रहेगा.

होस्ट-ड्रिवन टेस्ट को 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 को बढ़ाना, काम की टेस्टिंग यूटिलिटी एपीआई को इनहेरिट करने का एक तरीका है, जैसे कि:

  • installPackage: टारगेट डिवाइस पर APK इंस्टॉल करने की अनुमति देता है.
  • installPackageAsUser: टारगेट डिवाइस पर उपयोगकर्ता के तौर पर APK इंस्टॉल करने की अनुमति देता है.
  • uninstallPackage: किसी APK को अनइंस्टॉल करने की अनुमति देता है.
  • isPackageInstalled: यह देखना कि कोई पैकेज इंस्टॉल है या नहीं.
  • hasDeviceFeature: देखें कि डिवाइस पर कोई सुविधा काम करती है या नहीं. (pm list features)
  • runDeviceTests(DeviceTestRunOptions options): सभी संभावित विकल्पों को मैनेज करने के लिए, DeviceTestRunOptions का इस्तेमाल करके, टारगेट किए गए डिवाइस के लिए इंस्ट्रुमेंटेशन टेस्ट चलाएं.

Tradefed डिवाइस ऑब्जेक्ट का ऐक्सेस भी दें:

  • getDevice(): डिवाइस में बदलाव करने के लिए TF डिवाइस ऑब्जेक्ट दिखाता है.
  • getBuild(): बिल्ड के बारे में जानकारी पाने के लिए, बिल्ड की जानकारी वाला TF ऑब्जेक्ट दिखाता है.
  • getAbi(): वह एबीआई दिखाता है जिसके लिए टेस्ट चल रहा है.

Tradefed सहायता: हर क्लास के डिवाइस को तैयार करना और उसे साफ़ करना

JUnit4 @BeforeClass और @AfterClass सिर्फ़ स्टैटिक तरीकों पर लागू होते हैं. इसलिए, #getDevice() हैंडलर का इस्तेमाल करके, डिवाइस के हिसाब से, हर क्लास के लिए एक बार सेटअप करने या क्लीन अप करने की सुविधा नहीं मिलती. इस समस्या को हल करने के लिए, Trafed एनोटेशन का इस्तेमाल करें.

  • @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, #getTestInformation() की मदद से TestInformation को नॉन-स्टैटिक स्कोप में पाने की सुविधा देता है.

अगर BaseHostJUnit4Test को एक्सटेंड नहीं किया जा रहा है, तो TestInformation ऑब्जेक्ट पाने के लिए, ITestInformationReceiver को लागू किया जा सकता है.

Tradefed में, होस्ट-ड्रिवन टेस्ट को कैसे कॉन्फ़िगर करें?

Tradefed एक्सएमएल कॉन्फ़िगरेशन फ़ाइल में, होस्ट-ड्रिवन टेस्ट, HostTest रननर के ज़रिए चलाए जाते हैं.

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