এই ডকটিতে একাধিক ডিভাইস মডিউল তৈরি করার ধাপে ধাপে নির্দেশাবলী দেওয়া হয়েছে এবং জানা থাকলে বর্তমান সীমাবদ্ধতাগুলোও উল্লেখ করা হয়েছে।
নমুনা
একটি CTS ওয়াইফাই-সচেতন মাল্টি-ডিভাইস মডিউল সরবরাহ করা হয়। এটি একটি ডিভাইস থেকে ওয়াইফাইয়ের মাধ্যমে একটি বার্তা পাঠায় এবং অন্য ডিভাইসটি তা গ্রহণ করেছে কিনা তা যাচাই করে।
মডিউলটির উৎস packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/ -এ অবস্থিত।
আমরা উদাহরণটিতে আমাদের প্রয়োজন অনুযায়ী মন্তব্য যোগ করেছি।
ধাপ ১: মডিউল ফোল্ডারটি তৈরি করুন
আপনার মাল্টি-ডিভাইসেস মডিউলটির জন্য, এটি যে সুইট প্রজেক্টের অন্তর্ভুক্ত, সেখানে একটি ফোল্ডার তৈরি করার পরামর্শ দেওয়া হচ্ছে। উদাহরণস্বরূপ: cts/hostsidetests/multidevices/ । আমরা এই পরামর্শ দিই যাতে সমস্ত মাল্টি-ডিভাইসেস মডিউল অন্তত প্রাথমিকভাবে একই স্থানে থাকে, যা উদাহরণগুলি খুঁজে বের করা সহজ করে তুলবে।
এই মডিউলের সমস্ত ফাইল তাদের নিজস্ব মডিউল ফোল্ডারের অধীনে রাখতে হবে। উদাহরণস্বরূপ: wifi_aware ।
ধাপ ২: পরীক্ষাটি তৈরি করুন
এখানেই আপনি আপনার টেস্ট লজিক প্রয়োগ করবেন। এটি মূলত কী পরীক্ষা করা হচ্ছে তার উপর নির্ভর করে।
Mobly টেস্ট সোর্সটি তৈরি করুন, যেমন: wifi_aware_test.py ।
ধাপ ৩: বিল্ড ফাইল তৈরি করুন: Android.bp
packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp- এর মতো একটি Android.bp ফাইল যোগ করুন। নিম্নলিখিতের অনুরূপ একটি python_test_host মডিউল সংজ্ঞায়িত করুন:
python_test_host {
name: "CtsWifiAwareTestCases",
main: "wifi_aware_test.py",
srcs: ["wifi_aware_test.py"],
test_suites: [
"cts",
"general-tests",
],
test_options: {
unit_test: false,
},
data: [
// Package the snippet with the mobly test
":wifi_aware_snippet",
],
}
`data` ফিল্ডের মাধ্যমে টেস্টের জন্য স্নিপেটগুলো নির্দিষ্ট করুন, যা বাইনারির সাথে প্যাক করা থাকবে এবং ATest-এর মাধ্যমে টেস্টে অথবা কন্টিনিউয়াস এক্সিকিউশনে সনাক্ত ও ইনস্টল করা যাবে।
অ্যান্ড্রয়েডে Mobly Bundled Snippets পাওয়া যায় external/mobly-bundled-snippets/ -এ।
ঐচ্ছিক: কাস্টম স্নিপেট তৈরি করুন
কিছু মাল্টি-ডিভাইস মডিউলের জন্য কাস্টম মব্লি স্নিপেটের প্রয়োজন হতে পারে। নমুনা পরীক্ষাটিতে packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java- তে একটি ওয়াইফাই-অ্যাওয়্যার স্নিপেট অন্তর্ভুক্ত রয়েছে, যা মব্লি স্নিপেট লাইব্রেরি দিয়ে বিল্ড করা হয়েছে এবং অ্যান্ড্রয়েডে external/mobly-snippet-lib/ -এ উপলব্ধ।
স্ট্যান্ডার্ড ইন্সট্রুমেন্টেশনের মতোই Android.bp-তে android_test রুলের মাধ্যমে স্নিপেটটি সংজ্ঞায়িত করতে হবে:
android_test {
name: "wifi_aware_snippet",
sdk_version: "current",
srcs: [
"CallbackUtils.java",
"WifiAwareSnippet.java",
],
manifest: "AndroidManifest.xml",
static_libs: [
"androidx.test.runner",
"guava",
"mobly-snippet-lib",
],
}
ধাপ ৪: মডিউল কনফিগারেশন তৈরি করুন: AndroidTest.xml
packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml- এর মতো একটি AndroidTest.xml ফাইল যোগ করুন। এই টেস্ট কনফিগারেশনে, পরীক্ষার জন্য আপনাকে দুটি ডিভাইস নির্দিষ্ট করতে হবে, যেমনটি নিচে দেখানো হলো:
<configuration description="Config for CTS Wifi Aware test cases">
<option name="test-suite-tag" value="cts" />
<option name="config-descriptor:metadata" key="component" value="wifi" />
<option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
<option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
<option name="config-descriptor:metadata" key="parameter" value="not_secondary_user" />
<device name="device1">
<!-- For coverage to work, the APK should not be uninstalled until after coverage is pulled.
So it's a lot easier to install APKs outside the python code.
-->
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="wifi_aware_snippet.apk" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.PythonVirtualenvPreparer">
<!-- Any python dependencies can be specified and will be installed with pip -->
<option name="dep-module" value="mobly" />
</target_preparer>
</device>
<device name="device2">
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="wifi_aware_snippet.apk" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
</target_preparer>
</device>
<test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
<!-- The mobly-par-file-name should match the module name -->
<option name="mobly-par-file-name" value="CtsWifiAwareTestCases" />
<!-- Timeout limit in milliseconds for all test cases of the python binary -->
<option name="mobly-test-timeout" value="60000" />
</test>
</configuration>
লক্ষ্য করুন যে:
- এই নমুনা পরীক্ষাটি Mobly-এর উপর নির্ভরশীল।
PythonVirtualenvPreparerজন্য যেকোনো নির্ভরতা নির্দিষ্ট করা যেতে পারে এবং তা pip-এর মাধ্যমে ইনস্টল হয়ে যাবে। -
MoblyBinaryHostTestএর জন্যmobly-par-file-nameঅবশ্যই Android.bp-তে থাকা মডিউল নামের সাথে মিলতে হবে। - টেস্টের জন্য একটি
mobly-test-timeoutঅবশ্যই নির্দিষ্ট করে দিন। এটি মিলিসেকেন্ডে পরিমাপ করা হয় এবং সম্পূর্ণ পাইথন বাইনারি এক্সিকিউশনের (সব টেস্ট কেস একসাথে) ক্ষেত্রে প্রযোজ্য। কোনো সমস্যার কারণে টেস্ট কেসগুলো যাতে অনির্দিষ্টকালের জন্য আটকে না যায়, সেজন্য এটি প্রয়োজন। - প্রতিটি
deviceট্যাগে প্রতিটি ডিভাইসের জন্য আলাদা সেটআপ থাকতে পারে, Mobly কনফিগ সেগুলোকে XML-এ নির্দিষ্ট করা একই ক্রমে গ্রহণ করবে।
স্নিপেট এপিকে ইনস্টলেশন সম্পর্কিত:
- কভারেজ টিমের সাথে আলোচনার ফলে প্রাথমিক POC-টি target_preparer-এর মাধ্যমে স্নিপেট apk ইনস্টল করার জন্য আপডেট করা হয়েছে: কভারেজ পরিমাপগুলো যাতে খুব তাড়াতাড়ি মুছে না যায়, তা নিশ্চিত করার জন্য পাইথন বাইনারিতে টেস্ট কোডের পরিবর্তে Harness-এর মাধ্যমে আনইনস্টল করা হলে টাইমিংয়ের দিক থেকে আরও ভালো নিশ্চয়তা পাওয়া যায়।
ধাপ ৫: স্থানীয়ভাবে পরীক্ষাটি চালান: atest
বর্তমানে, একাধিক ডিভাইসের পরীক্ষা শুধুমাত্র ফিজিক্যাল ডিভাইসেই চলে। পরীক্ষা চালানোর আগে, আপনার পরীক্ষার ডিভাইসগুলো সঠিক অবস্থায় আছে কিনা তা যাচাই করে নিন। adb devices কমান্ডটি আপনার সংযুক্ত ডিভাইসগুলোর তালিকা দেখাবে। যদি তালিকায় পরীক্ষার জন্য নয় এমন ডিভাইস থাকে, তাহলে `-s` ফ্ল্যাগ ব্যবহার করে পরীক্ষার জন্য ডিভাইসগুলো নির্দিষ্ট করে দিন।
ওয়াইফাই পরীক্ষার জন্য, ডিভাইসগুলোতে ওয়াইফাই চালু আছে কিনা তা নিশ্চিত করুন (ফ্যাক্টরি রিসেট করার পর)।
আপনি atest ব্যবহার করে স্থানীয়ভাবে পরীক্ষাটি চালাতে পারেন:
$ atest CtsWifiAwareTestCases
atest আউটপুটের সামারি হেডিং-এ ব্যবহৃত ডিভাইসের সংখ্যা দেখতে পাবেন, যা দেখতে অনেকটা Test executed with 2 device(s) এর মতো হবে।
সমস্যা সমাধান
যদি স্থানীয়ভাবে চালানোর সময় পরীক্ষাটি নিম্নলিখিত কারণে ব্যর্থ হয়:
ভার্চুয়ালএনভ ত্রুটি
java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory
অনুগ্রহ করে নিশ্চিত করুন যে virtualenv আপনার PATH-এ আছে। PATH-এ "~/.local/bin" যোগ করলে সমস্যাটির সমাধান হয়ে যাবে। যদি virtualenv ইনস্টল করা না থাকে, তবে এই লিঙ্কটি অনুসরণ করুন: https://virtualenv.pypa.io/en/latest/installation.html
কমপক্ষে ২টি কন্ট্রোলার অবজেক্ট পাওয়ার কথা ছিল, পাওয়া গেছে ১টি।
টেস্ট মডিউলগুলো হয় একাধিক-ডিভাইস অথবা একক-ডিভাইস, কোনো মিশ্র-মডিউল নেই। আপনি যদি একাধিক ডিভাইস ছাড়া একটি একাধিক-ডিভাইস মডিউল চালানোর চেষ্টা করেন, তাহলে আপনি এই ত্রুটিটি দেখতে পাবেন:
Expected to get at least 2 controller objects, got 1
মডিউলটি মাল্টি-ডিভাইস মোডে চালালে সমস্যাটির সমাধান হয়ে যাবে।
CTS-এর জন্য: আপনি শার্ডিং ব্যবহার করে এটি চালু করতে পারেন (উদাহরণস্বরূপ: --shard-count 2) অথবা run cts-multidevces ।