ट्रेड फेडरेशन में एक होस्ट-संचालित परीक्षण लिखें

यह पृष्ठ बताता है कि होस्ट द्वारा संचालित JUnit4-शैली डिवाइस परीक्षण कैसे लिखा जाए। इसका मतलब यह है कि हार्नेस का मेजबान पक्ष डिवाइस के खिलाफ कार्रवाई शुरू करने वाला है।

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

  • होस्ट-संचालित परीक्षण: होस्ट पर चलने वाला एक परीक्षण है जो एक या अधिक उपकरणों के साथ इंटरैक्ट करता है। परीक्षणाधीन प्रणाली (एसयूटी) स्वयं होस्ट पर नहीं है बल्कि होस्ट से परीक्षण किया जा रहा है।
  • होस्ट-साइड टेस्ट: एक परीक्षण पूरी तरह से होस्ट पर चल रहा है और केवल होस्ट पर कुछ परीक्षण कर रहा है, उदाहरण के लिए यूनिट परीक्षण।

इंस्ट्रुमेंटेशन परीक्षण के बजाय होस्ट-संचालित परीक्षण क्यों बनाएं?

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

होस्ट-संचालित परीक्षण अतिरिक्त सेटअप चरण भी चला सकते हैं जिनके लिए बाहरी उपकरणों के साथ सहभागिता की आवश्यकता होती है जिन पर परीक्षण निर्भर करता है।

एक होस्ट-संचालित परीक्षण इन उपयोग मामलों को संभाल सकता है और अधिक परिदृश्यों के साथ डिवाइस के उन्नत परीक्षण की अनुमति दे सकता है। यदि आप उस स्थिति में हैं, तो होस्ट-संचालित परीक्षण लिखना सबसे अधिक सार्थक होगा।

होस्ट-संचालित परीक्षण टीएफ में कैसे लिखे जाते हैं?

यहाँ एक नमूना है:

@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());
    }
}

ट्रेड फेडरेशन में होस्ट-संचालित परीक्षण डिवाइसJUnit4ClassRunner JUnit4 परीक्षण धावक द्वारा संचालित होते हैं। परीक्षण वर्ग की समग्र संरचना नियमित JUnit4 परीक्षण के समान है:

  • @BeforeClass
  • @Before
  • @Test
  • @After
  • @AfterClass
  • Assume , Assert

BaseHostJunit4Test का विस्तार उपयोगी परीक्षण उपयोगिताओं API को प्राप्त करने का एक तरीका है जैसे:

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

ट्रेडफेड डिवाइस ऑब्जेक्ट तक पहुंच भी प्रदान करें:

  • 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 लागू कर सकते हैं।

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

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

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