एक से ज़्यादा डिवाइसों से टेस्ट चलाना

इस पेज पर, टेस्टिंग के दौरान एक से ज़्यादा डिवाइसों के साथ 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, डिवाइसों को कैसे तैयार करता है?

एक से ज़्यादा डिवाइसों के लिए, डिवाइस तैयार करने का तरीका ज़्यादातर एक डिवाइस के लिए तैयार करने के तरीके जैसा ही होता है. हर डिवाइस को तैयार करने के लिए, <device> में दिखने के क्रम में <target_preparer> को कॉल किया जाता है.

कॉन्फ़िगरेशन के रूट पर मौजूद <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 के सामान्य एपीआई का इस्तेमाल किया जा सकेगा. ये एपीआई, TF ने टेस्ट लिखने के लिए उपलब्ध कराए हैं.

एक डिवाइस से दूसरे डिवाइस पर कार्रवाइयां करने के लिए, अब तक कोई एपीआई उपलब्ध नहीं है. जैसे, 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 कहा है. अगर हो सके, तो आपको डिवाइस के टाइप के हिसाब से ज़्यादा जानकारी देने वाला नाम देना चाहिए.