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

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