इस पेज पर, टेस्टिंग के दौरान एक से ज़्यादा डिवाइसों के साथ Trade Federation Test Harness का इस्तेमाल करने का तरीका बताया गया है.आपको सबसे पहले, एंड-टू-एंड उदाहरण में बताए गए सामान्य इस्तेमाल के बारे में जानकारी होनी चाहिए.
एक से ज़्यादा डिवाइसों के साथ क्या फ़र्क़ है?
Trade Federation में एक से ज़्यादा डिवाइसों पर टेस्ट कॉन्फ़िगर और चलाने के दौरान, कई चीज़ें अलग होती हैं. खास तौर पर:
एक डिवाइस के लिए किया गया कोई भी मौजूदा कॉन्फ़िगरेशन, मल्टी-डिवाइस मोड के लिए मान्य है.
<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>
एक से ज़्यादा डिवाइस कॉन्फ़िगर करना
इस दस्तावेज़ में यह माना गया है कि आपको टीएफ़ टेस्ट के सामान्य कॉन्फ़िगरेशन के बारे में पहले से पता है. यहां दो डिवाइसों के साथ टेस्ट कॉन्फ़िगरेशन का एक उदाहरण दिया गया है:
<configuration description="A simple multi-devices example in Tradefed">
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
</device>
<device name="device2">
<target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
</device>
<option name="log-level" value="verbose" />
<test class="com.android.tradefed.HelloWorldMultiDevices" />
<logger class="com.android.tradefed.log.FileLogger" />
<result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />
</configuration>
स्ट्रक्चर के बारे में कई बातें बताना ज़रूरी है:
- हर उस डिवाइस के लिए
<device>
ज़रूरी है जिसकी ज़रूरत होगी. - अगर ज़रूरत हो, तो
<build_provider>
,<target_preparer>
,<device_recovery>
,<device_requirements>
, और<device_options>
को<device>
टैग में शामिल करना ज़रूरी है. ऐसा न करने पर, अपवाद दिखेगा. <device>
के लिएname
एट्रिब्यूट की वैल्यू देना ज़रूरी है. साथ ही, कॉन्फ़िगरेशन में मौजूद सभी डिवाइसों के लिए, इसकी वैल्यू यूनीक होनी चाहिए. इसका इस्तेमाल, इससे जुड़े किसी डिवाइस का रेफ़रंस देने के लिए किया जाता है. इससे आपके टेस्ट को किसी खास डिवाइस को टारगेट करने की अनुमति मिलती है.<option>
का स्कोप ग्लोबल हो सकता है. ऐसा तब होता है, जब यह कॉन्फ़िगरेशन के रूट में मौजूद हो. इसके अलावा, इसका स्कोप डिवाइस तक सीमित हो सकता है. ऐसा तब होता है, जब इसे<device>
टैग में शामिल किया गया हो.
एक डिवाइस के कॉन्फ़िगरेशन पर लागू होने वाले अन्य सभी नियम, यहां भी लागू होते हैं. ज़्यादा जानकारी के लिए, नीचे दिया गया Hello World का उदाहरण देखें.
कमांड लाइन का इस्तेमाल करके अपडेट करना
TF कमांड लाइन पर विकल्प तय करते समय, {<device name>}
का इस्तेमाल करके डिवाइस स्कोप भी तय किया जा सकता है. यहां <device name>
, एक्सएमएल कॉन्फ़िगरेशन में तय किया गया नाम है.
ऊपर दिए गए उदाहरण में, इन विकल्पों को अनुमति दी गई थी:
--com.android.tradefed.targetprep.DeviceSetup:disable
--device-setup:disable
डिवाइस के नाम का इस्तेमाल करके, डिवाइस build_provider
ऑब्जेक्ट में से सिर्फ़ एक को टारगेट किया जा सकता है. जैसे:
--{device2}device-setup:disable
इस उदाहरण में, device2
डिवाइस सेटअप करने की प्रोसेस को स्किप कर देता है, जबकि device1
ऐसा नहीं करता.
TF, डिवाइसों को कैसे चुनता है?
Trade Federation, कॉन्फ़िगरेशन में डिवाइस के दिखने के क्रम के हिसाब से, device_requirements
से मेल खाने वाला डिवाइस ढूंढता है. आम तौर पर, यह डिवाइस का फ़्लेवर, प्रॉडक्ट वगैरह होता है. जब किसी डिवाइस को असाइन किया जाता है, तो TF अगले डिवाइस को असाइन करने की कोशिश करता है. अगर सभी डिवाइसों को असाइन नहीं किया जा सकता, तो उन्हें रिलीज़ कर दिया जाएगा. इसके बाद, जब सभी डिवाइस मैच हो जाएंगे, तब निर्देश को फिर से लागू करने की कोशिश की जाएगी.
TF, डिवाइसों को कैसे तैयार करता है?
एक से ज़्यादा डिवाइसों के लिए, तैयारी करने का तरीका काफ़ी हद तक एक ही डिवाइस के लिए तैयारी करने के तरीके जैसा होता है.
हर डिवाइस को <target_preparer>
में दिखने के क्रम के हिसाब से <target_preparer>
को कॉल करके तैयार किया जाता है.<device>
कॉन्फ़िगरेशन के रूट पर मौजूद <multi_target_preparer>
का इस्तेमाल भी किया जा सकता है. इससे तैयारी के ऐसे चरण पूरे किए जा सकते हैं जिनके लिए एक से ज़्यादा डिवाइसों की ज़रूरत होती है. जैसे, डिवाइसों को पेयर करना. यह target_preparer
चरण के बाद चलता है.
इसके अलावा, <pre_multi_target_preparer>
का इस्तेमाल किया जा सकता है. यह target_preparer
चरण से पहले चलता है.
<pre_multi_target_preparer>
का इस्तेमाल ऐसे सेटअप के लिए किया जाना चाहिए जिसे हर डिवाइस के सेटअप से पहले ज़रूर पूरा किया जाना चाहिए.<multi_target_preparer>
का इस्तेमाल ऐसे सेटअप के लिए किया जाना चाहिए जिन्हें हर डिवाइस के सेटअप के बाद पूरा करना ज़रूरी है.
उदाहरण के लिए:
डिवाइस 1 को फ़्लैश करें (target_preparer) डिवाइस 2 को फ़्लैश करें (target_preparer) ब्लूटूथ दोनों डिवाइसों को कनेक्ट करें (multi_target_preparer)
एक से ज़्यादा डिवाइसों पर टेस्ट करने के लिए स्क्रिप्ट लिखना
किसी एक डिवाइस पर टेस्ट लिखने के लिए, IDeviceTest इंटरफ़ेस लागू करें.
जांच के लिए डिवाइस पाने के लिए, IMultiDeviceTest या IInvocationContextReceiver में से किसी एक को लागू किया जा सकता है.
IMultiDeviceTest से आपको डिवाइस को उसके IBuildInfo पर सीधे तौर पर मैप करने की सुविधा मिलती है. वहीं, IInvocationContextReceiver से आपको बाद में पूरा कॉन्टेक्स्ट (डिवाइस, IBuildInfo, और मेटाडेटा) मिलता है.
इसके बाद, सामान्य ITestDevice एपीआई का इस्तेमाल किया जा सकेगा. ये एपीआई, टीएफ़ ने टेस्ट लिखने के लिए उपलब्ध कराए हैं.
एक डिवाइस से दूसरे डिवाइस पर कार्रवाइयां करने के लिए, अब तक कोई एपीआई उपलब्ध नहीं है. जैसे, device1.sync(device2)
. अगर आपको लगता है कि आपके पास इस्तेमाल का कोई ऐसा उदाहरण है जिसके लिए सहायता दी जानी चाहिए, तो android-platform सूची में इसकी वजह बताएं.
एक से ज़्यादा डिवाइसों के लिए, Hello World का उदाहरण
हमने Hello World जैसा कॉन्फ़िगरेशन जोड़ा है:
multi-devices.xml
multi_target_preparer
को लागू करने का एक उदाहरण भी दिया गया है
HelloWorldMultiTargetPreparer
इससे पता चलता है कि डिवाइसों और उनके बिल्ड की सूची कैसे मिलती है.
यह एक पूरा उदाहरण है, जिसमें ये शामिल हैं:
- दो डिवाइसों को ऐक्सेस देना
- दोनों डिवाइसों को
multi_target_preparer
के ज़रिए ऐक्सेस करना - ऐसे टेस्ट को चलाना जिसमें दोनों डिवाइसों का इस्तेमाल किया जाता है
Tradefed बनाने के बाद, TF शेल में इस निर्देश का इस्तेमाल किया जा सकता है:
run example/multi-devices
आपको कुछ ऐसा आउटपुट दिखेगा जिसमें यह जानकारी शामिल होगी:
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'
ऊपर दी गई सुविधा को चलाने के लिए, आपको दो डिवाइसों को कनेक्ट करना होगा. इसे यहां जाकर देखा जा सकता है: adb devices
आवाहन की प्रोसेस के दौरान, list i
और list d
की मदद से, इसे सिंगल डिवाइस की तरह मॉनिटर किया जा सकता है:
tf >list i
Command Id Exec Time Device State
1 0m:35 [00b4e73b4cbcd162, LP5A390056] fetching build
tf >list d
Serial State Product Variant Build Battery
00b4e73b4cbcd162 Allocated bullhead bullhead NRD90O 100
LP5A390056 Allocated shamu shamu NRD90I 100
आपको हर इनवोकेशन में शामिल डिवाइसों के साथ-साथ, सभी उपलब्ध डिवाइस और उनकी स्थिति दिखनी चाहिए.
ध्यान दें कि इस उदाहरण में, हमने कॉन्फ़िगरेशन में मौजूद दो डिवाइसों को device1
और device2
नाम दिया है. अगर हो सके, तो आपको डिवाइस के टाइप के हिसाब से ज़्यादा जानकारी देने वाला नाम देना चाहिए.