मल्टी-डिवाइस टेस्टिंग

वीटीएस ऐसे टेस्ट के साथ काम करता है जिनके लिए कई Android के बीच इंटरैक्शन की ज़रूरत होती है डिवाइस.

भवन निर्माण

VTS, ट्रेडFed फ़्रेमवर्क का इस्तेमाल करके, डिवाइस के सीरियल नंबर पाने और उन्हें टेस्ट करने के लिए इस्तेमाल करता है मॉड्यूल देखें.

पहली इमेज. वीटीएस पासिंग डिवाइस के सीरियल नंबर.

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

डिवाइस का बंटवारा

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

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

यह फ़्रेमवर्क उन सभी डिवाइसों के लिए टेस्ट की तैयारी करता है जिनके लिए इसे मिला है सीरियल नंबर. टारगेट तैयार करने वाले लोग, एक या कई डिवाइस वाले हो सकते हैं:

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

टेस्ट मॉड्यूल

टेस्ट की तैयारी करने वाले लोगों के सेट अप होने के बाद, टेस्ट मॉड्यूल को डिवाइसों की सूची मिलती है होस्ट/डिवाइस. हर मल्टी-डिवाइस के लिए एक होस्ट-साइड Python टेस्ट मॉड्यूल चलता है टेस्ट मॉड्यूल. असाइन किए गए Android डिवाइस, Python टेस्ट मॉड्यूल से ऐक्सेस किए जा सकते हैं की सूची के रूप में Androidडिवाइस ऑब्जेक्ट:

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

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

जांच के दौरान डिवाइस में होने वाली बातचीत

असरदार मल्टी-Android टेस्ट में, ऐप्लिकेशन के इस्तेमाल के लिए तय डिवाइस. इस तरह के टेस्ट तैयार करते समय, आपको यह तय करना होगा कि असाइन किए गए डिवाइसों के बीच कम्यूनिकेशन हो. इन सेक्शन में बातचीत के तीन उदाहरण हैं (हालांकि, टेस्ट डेवलपर मॉडल).

टाइप 1: होस्ट-साइड एचएएल टेस्ट

होस्ट-साइड एचएएल टेस्ट में वीटीएस एचएएल ड्राइवर का इस्तेमाल किया जा सकता है. इन ड्राइवरों को इसकी मदद से डिवाइसों पर भेजा जाता है डिफ़ॉल्ट:

दूसरी इमेज. होस्ट-साइड एचएएल टेस्ट.

इस स्थिति में:

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

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

डिवाइस पर वीटीएस एजेंट का इस्तेमाल करने के बजाय, होस्ट-साइड टेस्ट से भी अपने-आप एजेंट (ऐप्लिकेशन या बाइनरी) को हर डिवाइस पर भेजना:

तीसरी इमेज. होस्ट-साइड, एजेंट-आधारित टेस्ट.

इस स्थिति में:

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

उदाहरण के लिए, आगे बढ़ें मौजूदा वीटीएस रेपो में, अरबों उपयोगकर्ताओं की जांच होस्ट-साइड, ऐप्लिकेशन पर आधारित, और मल्टी-डिवाइस टेस्ट.

टाइप 3: टारगेट-साइड HIDL टेस्ट

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

चौथी इमेज. टारगेट पर आधारित HIDL टेस्ट.

इस स्थिति में:

  • टेस्ट लॉजिक, डिवाइसों पर लागू होता है.
  • होस्ट-साइड फ़्रेमवर्क, शुरुआती डिवाइस की पहचान करने की सुविधा देता है.
  • टारगेट-साइड टेस्ट बाइनरी को सिंक करने की ज़रूरत है:
    • सभी डिवाइसों के लिए, टेस्ट बाइनरी एक ही होनी चाहिए.
    • हर रोल के लिए अलग-अलग टेस्ट बाइनरी.

उदाहरण: मल्टी-डिवाइस टेस्ट प्लान

इस उदाहरण में दो डिवाइसों के कॉन्फ़िगरेशन के बारे में बताया गया है:

  • डिवाइस 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>

उदाहरण: होस्ट-साइड Python टेस्ट स्क्रिप्ट

परीक्षा की तैयारी करने वाले लोगों की जानकारी और उदाहरण देखने के लिए, यह देखें टेस्ट की तैयारी करने वाले लोग. पूरी होस्ट-साइड के लिए मल्टी-डिवाइस का उदाहरण देखें, तो नमस्ते_दुनिया_कई कोडलैब (कोड बनाना सीखना).

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')