इस पेज पर, होस्ट के ज़रिए चलाया जाने वाला 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 का इस्तेमाल करके, टारगेट किए गए डिवाइस के लिए इंस्ट्रुमेंटेशन टेस्ट चलाएं.
ट्रेडेड डिवाइस ऑब्जेक्ट का ऐक्सेस भी दें:
getDevice()
: डिवाइस में बदलाव करने के लिए TF डिवाइस ऑब्जेक्ट दिखाता है.getBuild()
: बिल्ड की जानकारी वाला TF ऑब्जेक्ट दिखाता है, ताकि बिल्ड.getAbi()
: वह एबीआई दिखाता है जिसके लिए टेस्ट चल रहा है.
ट्रेडेड सहायता: हर क्लास के हिसाब से डिवाइस तैयार करना और उसकी सफ़ाई करना
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
, #getTestInformation()
की मदद से TestInformation
को नॉन-स्टैटिक स्कोप में पाने की सुविधा देता है.
अगर आप BaseHostJUnit4Test
का विस्तार नहीं कर रहे हैं, तो आप
TestInformation
ऑब्जेक्ट पाने के लिए, ITestInformationReceiver
.
ट्रेडफ़ेड में होस्ट-ड्रिवन टेस्ट को कैसे कॉन्फ़िगर करें?
Tradefed एक्सएमएल कॉन्फ़िगरेशन फ़ाइल में, होस्ट-ड्रिवन टेस्ट, HostTest रननर के ज़रिए चलाए जाते हैं.
<test class="com.android.tradefed.testtype.HostTest" >
<option name="class" value="android.sample.cts.SampleHostJUnit4DeviceTest" />
</test>