मल्टी-डिवाइस परीक्षण

वीटीएस उन परीक्षणों का समर्थन करता है जिनके लिए कई एंड्रॉइड डिवाइसों के बीच इंटरैक्शन की आवश्यकता होती है।

वास्तुकला

वीटीएस मॉड्यूल का परीक्षण करने के लिए डिवाइस सीरियल प्राप्त करने और पास करने के लिए ट्रेडफेड फ्रेमवर्क का उपयोग करता है।

चित्र 1. वीटीएस पासिंग डिवाइस सीरियल।

डिवाइस आवश्यकताएँ, जैसे डिवाइस की संख्या और डिवाइस प्रकार, परीक्षण योजना कॉन्फ़िगरेशन में निर्दिष्ट हैं। उदाहरण के लिए, आप एक परीक्षण योजना निर्दिष्ट कर सकते हैं जिसके लिए सेलफ़िश बिल्ड लक्ष्य वाले दो एंड्रॉइड डिवाइस की आवश्यकता होती है।

डिवाइस आवंटन

परीक्षण अवसंरचना (आमतौर पर परीक्षण अनुसूचक) उपलब्ध उपकरणों को आवंटित करता है जो वीटीएस ढांचे के लिए परीक्षण योजना कॉन्फ़िगरेशन में निर्दिष्ट आवश्यकताओं को पूरा करते हैं। आवंटित उपकरण परीक्षण योजना के लिए आरक्षित हैं, भले ही परीक्षण मॉड्यूल उनका उपयोग नहीं कर रहा हो। वीटीएस एजेंट बायनेरिज़ को तब सभी आवंटित उपकरणों पर धकेल दिया जाता है और चलाया जाता है (जब तक कि विशेष रूप से न चलने का निर्देश न दिया जाए)। यह सुनिश्चित करता है कि शेल कमांड और एचएएल आरपीसी के लिए टीसीपी कनेक्शन एक परीक्षण स्क्रिप्ट में सभी उपकरणों के लिए उपलब्ध हैं।

परीक्षण तैयार करने वाले

फ्रेमवर्क उन सभी उपकरणों के लिए परीक्षण तैयारीकर्ता चलाता है जिनके लिए उसे सीरियल नंबर प्राप्त हुए थे। लक्ष्य तैयार करने वाले एकल या बहु-डिवाइस हो सकते हैं:

  • एकल-डिवाइस लक्ष्य तैयारकर्ता (उदाहरण VtsDeviceInfoCollector पर):
    • केवल आवश्यक डिवाइस सूची के साथ परीक्षण योजना कॉन्फ़िगरेशन में निर्दिष्ट किया जा सकता है (भविष्य के संस्करण मॉड्यूल स्तर कॉन्फ़िगरेशन की अनुमति देंगे)।
    • केवल एक डिवाइस सीरियल प्राप्त करें.
    • किसी विशिष्ट डिवाइस के विरुद्ध तैयारी और सफ़ाई कार्य चलाएँ।
  • मल्टी-डिवाइस लक्ष्य तैयारकर्ता (उदाहरण VtsPythonVirtualenvPreparer पर):
    • परीक्षण योजना कॉन्फ़िगरेशन या परीक्षण मॉड्यूल कॉन्फ़िगरेशन में निर्दिष्ट किया जा सकता है
    • सभी डिवाइस सीरियल प्राप्त करें
    • प्रत्येक डिवाइस या सभी डिवाइस के लिए तैयारी और सफ़ाई कार्य चलाएँ।

परीक्षण मॉड्यूल

परीक्षण तैयार करने वालों द्वारा होस्ट/डिवाइस की स्थापना समाप्त करने के बाद परीक्षण मॉड्यूल को उपकरणों की एक सूची मिलती है। प्रत्येक मल्टी-डिवाइस परीक्षण मॉड्यूल के लिए एक होस्ट-साइड पायथन परीक्षण मॉड्यूल चलता है। आवंटित एंड्रॉइड डिवाइस एंड्रॉइडडिवाइस ऑब्जेक्ट्स की सूची के रूप में पायथन परीक्षण मॉड्यूल से पहुंच योग्य हैं:

devices = self.android_devices
device1 = devices[0]
device1_serial = device1.serial

सभी आवंटित उपकरण परीक्षण योजना के लिए आरक्षित हैं, भले ही योजना में एक परीक्षण मॉड्यूल केवल एक उपकरण का उपयोग कर रहा हो।

परीक्षण के दौरान डिवाइस संचार

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

प्रकार 1: होस्ट-साइड एचएएल परीक्षण

होस्ट-साइड एचएएल परीक्षण वीटीएस एचएएल ड्राइवरों का उपयोग कर सकते हैं जिन्हें डिफ़ॉल्ट रूप से डिवाइस पर धकेल दिया जाता है:

चित्र 2. होस्ट-साइड एचएएल परीक्षण।

इस परिदृश्य में:

  • परीक्षण तर्क होस्ट पर निष्पादित होता है।
  • होस्ट-साइड परीक्षण स्क्रिप्ट प्रत्येक डिवाइस पर ड्राइवरों को RPC कॉल जारी करती है।
  • होस्ट पक्ष डिवाइस इंटरैक्शन का समन्वय करता है।

प्रकार 2: होस्ट-साइड एजेंट-आधारित परीक्षण

डिवाइस पर वीटीएस एजेंटों का उपयोग करने के बजाय, एक होस्ट-साइड परीक्षण प्रत्येक डिवाइस पर अपने स्वयं के एजेंट (ऐप या बाइनरी) को भी भेज सकता है:

चित्र 3. मेजबान-पक्ष, एजेंट-आधारित परीक्षण।

इस परिदृश्य में:

  • परीक्षण तर्क होस्ट पर निष्पादित होता है।
  • एजेंट ऐप (या बाइनरी) प्रत्येक डिवाइस पर इंस्टॉल होता है।
  • होस्ट-साइड टेस्ट स्क्रिप्ट प्रत्येक डिवाइस पर ऐप्स को कमांड जारी करती है।
  • होस्ट पक्ष डिवाइस इंटरैक्शन का समन्वय करता है।

उदाहरण के लिए, वर्तमान वीटीएस रेपो में नेक्स्ट बिलियन उपयोगकर्ता परीक्षण होस्ट-साइड, ऐप-आधारित, मल्टी-डिवाइस परीक्षण हैं।

प्रकार 3: लक्ष्य-पक्ष एचआईडीएल परीक्षण

टारगेट-साइड, मल्टी-डिवाइस एचआईडीएल परीक्षण सभी परीक्षण तर्क को डिवाइस-साइड परीक्षण बायनेरिज़ पर डालते हैं, जिसके लिए परीक्षण निष्पादन के दौरान उपकरणों को सिंक्रनाइज़ करने के लिए परीक्षणों की आवश्यकता होती है:

चित्र 4. लक्ष्य-आधारित एचआईडीएल परीक्षण।

इस परिदृश्य में:

  • परीक्षण तर्क उपकरणों पर निष्पादित होता है।
  • होस्ट-साइड फ्रेमवर्क प्रारंभिक डिवाइस पहचान प्रदान करता है।
  • लक्ष्य-पक्ष परीक्षण बाइनरी को सिंक्रनाइज़ेशन की आवश्यकता है:
    • सभी उपकरणों के लिए समान परीक्षण बाइनरी।
    • प्रत्येक भूमिका के लिए अलग-अलग परीक्षण बायनेरिज़।

उदाहरण: मल्टी-डिवाइस परीक्षण योजना

यह उदाहरण दो उपकरणों के लिए कॉन्फ़िगरेशन निर्दिष्ट करता है:

  • डिवाइस 1 में एक बिल्ड प्रदाता और VtsDeviceInfoCollector लक्ष्य तैयारकर्ता शामिल है।
  • डिवाइस 2 में एक अतिरिक्त FilePusher प्रिपेयरर शामिल है जो होस्ट-संचालित संबंधित फ़ाइलों के एक समूह को डिवाइस पर भेजता है।
<configuration description="VTS Codelab Plan">
  ...
<device name="device1">
<build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
<target_preparer class="com.android.tradefed.targetprep.VtsDeviceInfoCollector" />
</device>
<device name="device2" >
<build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" />
<target_preparer class="com.android.tradefed.targetprep.VtsDeviceInfoCollector" />
<target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher">
<option name="push-group" value="HostDrivenTest.push" />
</target_preparer>
</device>
<option name="compatibility:include-filter" value="VtsCodelabHelloWorldMultiDeviceTest" />
</configuration>

उदाहरण: होस्ट-साइड पायथन परीक्षण स्क्रिप्ट

परीक्षण तैयार करने वालों के विवरण और उदाहरणों के लिए, परीक्षण तैयार करने वाले देखें। संपूर्ण होस्ट-साइड मल्टी-डिवाइस उदाहरण के लिए, hello_world_multi कोडलैब देखें।

def setUpClass(self):
logging.info('number of device: %s', self.android_devices)
asserts.assertEqual(len(self.android_devices), 2, 'number of device is wrong.')
self.dut1 = self.android_devices[0]
self.dut2 = self.android_devices[1]
self.shell1 = self.dut1.shell
self.shell2 = self.dut2.shell

def testSerialNotEqual(self):
'''Checks serial number from two device not being equal.'''
command = 'getprop | grep ro.serial'
res1 = self.shell1.Execute(command)
res2 = self.shell2.Execute(command)

def getSerialFromShellOutput(output):
'''Get serial from getprop query'''
return output[const.STDOUT][0].strip().split(' ')[-1][1:-1]
serial1 = getSerialFromShellOutput(res1)
serial2 = getSerialFromShellOutput(res2)

logging.info('Serial number of device 1 shell output: %s', serial1)
logging.info('Serial number of device 2 shell output: %s', serial2)
asserts.assertNotEqual(serial1, serial2, 'serials from two devices should not be the same')
asserts.assertEqual(serial1, self.dut1.serial, 'serial got from device system property is different from allocated serial')
asserts.assertEqual(serial2, self.dut2.serial, 'serial got from device system property is different from allocated serial')