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

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

एक से ज़्यादा डिवाइसों पर क्या फ़र्क़ पड़ता है?

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

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