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

यह पृष्ठ बताता है कि होस्ट द्वारा संचालित 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 का विस्तार उपयोगी परीक्षण उपयोगिताओं API को इनहेरिट करने का एक तरीका है जैसे:

  • installPackage : लक्ष्य डिवाइस पर एपीके स्थापित करने की अनुमति देता है।
  • installPackageAsUser : लक्ष्य डिवाइस पर एक उपयोगकर्ता के रूप में एक एपीके स्थापित करने की अनुमति देता है।
  • uninstallPackage : एपीके को अनइंस्टॉल करने की अनुमति देता है।
  • 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 #getTestInformation() के माध्यम से एक गैर-स्थिर दायरे में TestInformation प्राप्त करने का समर्थन करता है।

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

Tradefed में होस्ट-चालित परीक्षण को कैसे कॉन्फ़िगर करें?

ट्रेडफेड एक्सएमएल कॉन्फ़िगरेशन फ़ाइल में, होस्ट-चालित परीक्षण होस्टटेस्ट रनर के माध्यम से चलाए जाते हैं।

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