এই পৃষ্ঠাটি আপনাকে পরীক্ষার সময় একাধিক ডিভাইসের সাথে ট্রেড ফেডারেশন টেস্ট হারনেস ব্যবহার করতে সাহায্য করে। আপনার প্রথমে এন্ড-টু-এন্ড উদাহরণে বর্ণিত সাধারণ ব্যবহার সম্পর্কে পরিচিত হওয়া উচিত।
একাধিক ডিভাইসের ক্ষেত্রে পার্থক্যটা কী?
ট্রেড ফেডারেশনে একাধিক ডিভাইস পরীক্ষা কনফিগার ও চালানোর ক্ষেত্রে বেশ কিছু বিষয় ভিন্ন হয়, বিশেষ করে:
যেকোনো বিদ্যমান একক-ডিভাইস কনফিগারেশন মাল্টি-ডিভাইস মোডের জন্য বৈধ।
<! -- করণীয়: দ্বিতীয় একটি বাক্যে মাল্টি-ডিভাইস মোডের সাথে সম্পর্কিত একটি একক-ডিভাইস ব্যবহারের উদাহরণ যোগ করে ঠিক উপরের বাক্যটি স্পষ্ট করুন। -->>
একাধিক ডিভাইস কনফিগারেশন
এই ডকুমেন্টটি ধরে নেয় যে আপনি সাধারণ 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>ট্যাগের মধ্যে অন্তর্ভুক্ত করতে হবে; অন্যথায় একটি ব্যতিক্রম (exception) প্রদর্শিত হবে। -
<device>এর জন্যnameঅ্যাট্রিবিউটটি বাধ্যতামূলক এবং কনফিগারেশনে উপস্থিত সমস্ত ডিভাইসের মধ্যে এটি অনন্য হওয়া উচিত। এর সাথে যুক্ত নির্দিষ্ট ডিভাইসটিকে নির্দেশ করার জন্য এটি ব্যবহৃত হয়। এটি আপনার পরীক্ষাকে একটি নির্দিষ্ট ডিভাইসকে লক্ষ্যবস্তু করতে সাহায্য করে। - কনফিগারেশনের মূলে থাকলে
<option>এর স্কোপ গ্লোবাল হতে পারে, অথবা<device>ট্যাগের ভিতরে নির্দিষ্ট করা হলে তা ডিভাইস স্কোপে সীমাবদ্ধ থাকতে পারে।
একক-ডিভাইস কনফিগারেশনের ক্ষেত্রে প্রযোজ্য অন্যান্য সমস্ত নিয়ম এখানেও প্রযোজ্য। আরও বিস্তারিত জানতে নিচের হ্যালো ওয়ার্ল্ড উদাহরণটি দেখুন।
কমান্ড লাইন আপডেট
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 (সাধারণত ডিভাইসের ফ্লেভার, প্রোডাক্ট, ইত্যাদি) এর সাথে মেলে এমন একটি ডিভাইস খুঁজে থাকে। প্রতিবার একটি ডিভাইস বরাদ্দ করা হলে, টিএফ পরবর্তীটি বরাদ্দ করার চেষ্টা করে। যদি সমস্ত ডিভাইস বরাদ্দ করা সম্ভব না হয়, তবে সেগুলোকে রিলিজ করে দেওয়া হবে এবং সমস্ত ডিভাইস মিলে গেলে কমান্ডটি পুনরায় চেষ্টা করা হবে।
টিএফ কীভাবে ডিভাইসগুলো প্রস্তুত করে?
একাধিক ডিভাইসের জন্য প্রস্তুতির ধাপটি মূলত একক ডিভাইসের মতোই। প্রতিটি ডিভাইসকে <device> এর ভিতরে উপস্থিতির ক্রমানুসারে <target_preparer> কল করার মাধ্যমে প্রস্তুত করা হয়।
আপনি কনফিগারেশনের রুটে নির্দিষ্ট করা <multi_target_preparer> ব্যবহার করতে পারেন, যা একাধিক ডিভাইসের প্রয়োজন হয় এমন প্রস্তুতিমূলক ধাপগুলো, যেমন ডিভাইস পেয়ারিং, সক্ষম করে। এটি target_preparer ধাপের পরে চলে।
এর একটি বিকল্প হলো <pre_multi_target_preparer> , যা target_preparer ধাপের আগে চলে।
- যেসব সেটআপ প্রতিটি ডিভাইসের সেটআপের আগে অবশ্যই করতে হবে , সেগুলোর জন্য
<pre_multi_target_preparer>ব্যবহার করা উচিত। - প্রতিটি ডিভাইসের সেটআপের পরে যে সেটআপ অবশ্যই করতে হবে, তার জন্য
<multi_target_preparer>ব্যবহার করা উচিত।
উদাহরণস্বরূপ:
ফ্ল্যাশ ডিভাইস ১ (টার্গেট_প্রিপেয়ারার) ফ্ল্যাশ ডিভাইস ২ (টার্গেট_প্রিপেয়ারার) ব্লুটুথের মাধ্যমে উভয় ডিভাইস সংযুক্ত করুন (মাল্টি_টার্গেট_প্রিপেয়ারার)
একাধিক ডিভাইস পরীক্ষা লিখুন
একটি সাধারণ একক-ডিভাইস টেস্ট লেখার সময়, আপনাকে IDeviceTest ইন্টারফেসটি ইমপ্লিমেন্ট করতে হয়।
পরীক্ষাধীন ডিভাইসগুলো গ্রহণ করার জন্য, আপনি IMultiDeviceTest অথবা IInvocationContextReceiver ইমপ্লিমেন্ট করতে পারেন।
IMultiDeviceTest আপনাকে ডিভাইস থেকে তার IBuildInfo- এর একটি সরাসরি ম্যাপ দেয়, অপরদিকে IInvocationContextReceiver আপনাকে সম্পূর্ণ কনটেক্সট (ডিভাইস, IBuildInfo ও মেটাডেটা) প্রদান করে।
এরপর আপনি টেস্ট লেখার জন্য TF কর্তৃক উপলব্ধ সাধারণ ITestDevice API-গুলো ব্যবহার করতে পারবেন।
এক ডিভাইস থেকে অন্য ডিভাইসে অপারেশন পরিচালনা করার জন্য, যেমন device1.sync(device2) , এখনও কোনো API নেই। যদি আপনার মনে হয় যে সমর্থনের জন্য আপনার কাছে কোনো জোরালো ব্যবহারের ক্ষেত্র (use case) আছে, তাহলে আপনার যুক্তি android-platform তালিকায় পাঠান।
একাধিক ডিভাইসের হ্যালো ওয়ার্ল্ড উদাহরণ
আমরা একটি হ্যালো ওয়ার্ল্ড-এর মতো উদাহরণ কনফিগারেশন যোগ করেছি: multi-devices.xml। এছাড়াও helloWorldMultiTargetPreparer নামে multi_target_preparer ইমপ্লিমেন্টেশনের একটি উদাহরণ রয়েছে, যা দেখায় কীভাবে ডিভাইস এবং তাদের বিল্ডের তালিকা গ্রহণ করতে হয়।
এটি একটি পূর্ণাঙ্গ উদাহরণ, যার মধ্যে অন্তর্ভুক্ত রয়েছে:
- দুটি ডিভাইস বরাদ্দ করা
- একটি
multi_target_preparerমাধ্যমে উভয় ডিভাইস অ্যাক্সেস করা - দুটি ডিভাইস ব্যবহার করে একটি পরীক্ষা চালানো হচ্ছে
একবার ট্রেডফেড তৈরি করে ফেললে, আপনি টিএফ শেল-এ নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারবেন:
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 নাম দিয়েছি; আপনি আসলে কোন ধরনের ডিভাইস সেট করতে চাইছেন, তার উপর নির্ভর করে সম্ভব হলে আরও বর্ণনামূলক একটি নাম দেওয়া উচিত।