একাধিক ডিভাইস দিয়ে পরীক্ষা চালানো

এই পৃষ্ঠাটি আপনাকে পরীক্ষার সময় একাধিক ডিভাইসের সাথে ট্রেড ফেডারেশন টেস্ট হারনেস ব্যবহার করতে সাহায্য করে। আপনাকে প্রথমে এন্ড-টু-এন্ড উদাহরণ-এ বর্ণিত স্বাভাবিক ব্যবহারের সাথে পরিচিত হতে হবে।

একাধিক ডিভাইসের ক্ষেত্রে কী আলাদা?

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. -->>

একাধিক ডিভাইস কনফিগারেশন

এই ডকুমেন্ট ধরে নেয় যে আপনি আগে থেকেই সাধারণ 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> হল XML কনফিগারেশনে নির্দিষ্ট করা নাম।

উপরের উদাহরণে, নিম্নলিখিত বিকল্পগুলি অনুমোদিত ছিল:

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

আপনি ডিভাইস নাম ব্যবহার করে ডিভাইস build_provider অবজেক্টের মধ্যে শুধুমাত্র একটিকে টার্গেট করতে পারেন, যেমন:

--{device2}device-setup:disable

এই উদাহরণে, device2 ডিভাইস সেট-আপ করার প্রসেস এড়িয়ে যায়, কিন্তু device1 তা করে না।

TF কীভাবে ডিভাইস বেছে নেয়?

ট্রেড ফেডারেশন 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> সেট-আপের জন্য ব্যবহার করা উচিত যা প্রতিটি ডিভাইস সেট-আপ করার পরে অবশ্যই করতে হবে।

যেমন:

flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)

মাল্টি-ডিভাইস টেস্ট লেখা

সাধারণ সিঙ্গেল-ডিভাইস টেস্ট লেখার সময়, আপনি IDeviceTest ইন্টারফেস প্রয়োগ করেন।

পরীক্ষার জন্য, পরীক্ষা করা হচ্ছে এমন ডিভাইস পেতে, আপনি এগুলির মধ্যে যেকোনও একটি প্রয়োগ করতে পারেন IMultiDeviceTest অথবা IInvocationContextReceiver.

IMultiDeviceTest আপনাকে ডিভাইসের সাথে সরাসরি ম্যাপ করার সুবিধা দেয় IBuildInfo যেখানে IInvocationContextReceiver পরে আপনাকে সম্পূর্ণ প্রসঙ্গ (ডিভাইস, IBuildInfo এবং মেটাডেটা) দেয়।

তারপরে, আপনি সাধারণ ITestDevice API ব্যবহার করতে পারবেন যা TF টেস্ট লেখার জন্য ডিসপোজাল করে।

একটি ডিভাইস থেকে অন্য ডিভাইসে অপারেশন চালানোর জন্য এখনও কোনও API নেই, যেমন 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 নামে ডেকেছি; আপনি যে ধরনের ডিভাইস সেট করতে চান তার উপর নির্ভর করে সম্ভব হলে আরও বর্ণনামূলক নাম দেওয়া উচিত।