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

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

एक से ज़्यादा डिवाइस पर क्या अलग है?

Trade Federation में एक से ज़्यादा डिवाइसों के लिए टेस्ट कॉन्फ़िगर करने और चलाने के दौरान, कई चीज़ें अलग होती हैं. इनमें ये चीज़ें शामिल हैं:

एक डिवाइस के लिए मौजूदा कोई भी कॉन्फ़िगरेशन, कई डिवाइसों के मोड के लिए मान्य है.

<! -- TODO: ऊपर दिए गए वाक्य को साफ़ तौर पर समझाने के लिए, एक डिवाइस के इस्तेमाल के उदाहरण को जोड़ें. ऐसा इसलिए, क्योंकि यह दूसरे वाक्य में, एक से ज़्यादा डिवाइसों के मोड से जुड़ा है. -->>

एक से ज़्यादा डिवाइसों के लिए कॉन्फ़िगरेशन

इस दस्तावेज़ में यह माना गया है कि आपको सामान्य TF टेस्ट कॉन्फ़िगरेशन के बारे में पहले से पता है. यहां बताया गया है कि दो डिवाइसों वाला सामान्य टेस्ट कॉन्फ़िगरेशन कैसा दिखता है:

<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, डिवाइसों को कैसे तैयार करता है?

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