এই ডকুমেন্টে কীভাবে মাল্টি-ডিভাইস মডিউল তৈরি করতে হয় সেই বিষয়ে ধাপে ধাপে নির্দেশাবলী দেওয়া আছে এবং জানা থাকলে বর্তমান সীমাবদ্ধতা সম্পর্কেও বলা আছে।
নমুনা
একটি CTS ওয়াই-ফাই অ্যাওয়ার মাল্টি-ডিভাইস মডিউল প্রদান করা হয়। এটি ওয়াই-ফাইয়ের মাধ্যমে একটি ডিভাইস থেকে মেসেজ পাঠায় এবং অন্য ডিভাইস সেটি পেয়েছে কিনা তা যাচাই করে।
মডিউলের সোর্স এখানে আছে: packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/.
আমরা উদাহরণে যতটা সম্ভব কমেন্ট যোগ করেছি যা আমাদের মনে হয়েছে উপযোগী।
ধাপ ১: মডিউল ফোল্ডার তৈরি করা
সুইটের যে প্রোজেক্টের সাথে এটি যুক্ত, সেখানে আপনার মাল্টি-ডিভাইস মডিউলের জন্য একটি ফোল্ডার তৈরি করার সাজেশন দেওয়া হয়। যেমন: cts/hostsidetests/multidevices/। আমরা এটি সাজেস্ট করি যাতে সব মাল্টি-ডিভাইস মডিউল অন্তত প্রথমেই কোলোকেটেড থাকে, এটি উদাহরণ খুঁজে পাওয়া সহজ করে তুলবে।
এই মডিউলের সব ফাইল নিজস্ব মডিউল ফোল্ডারে রাখতে হবে। যেমন: wifi_aware.
ধাপ ২: পরীক্ষা তৈরি করা
এখানেই আপনি পরীক্ষার লজিক প্রয়োগ করেন। কী পরীক্ষা করা হচ্ছে তার উপর এটি অনেকখানি নির্ভর করে।
Mobly টেস্ট সোর্স তৈরি করুন, যেমন: wifi_aware_test.py.
ধাপ ৩: বিল্ড ফাইল তৈরি করুন: Android.bp
Android.bp ফাইল যোগ করুন, যেমন packages/modules/Wifi/tests/hostsidetests/multidevices/test/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",
],
}
ডেটা ফিল্ড সহ পরীক্ষার জন্য স্নিপেট নির্দিষ্ট করুন, যা বাইনারির সাথে প্যাক করা হবে এবং ATest বা কন্টিনিউয়াস এক্সিকিউশনের মাধ্যমে পরীক্ষায় লোকেট ও ইনস্টল করা যাবে।
Mobly Bundled Snippets Android-এ external/mobly-bundled-snippets/-এ উপলভ্য।
ঐচ্ছিক: কাস্টম স্নিপেট তৈরি করা
কিছু মাল্টি-ডিভাইস মডিউলের জন্য কাস্টম Mobly স্নিপেট প্রয়োজন হতে পারে। স্যাম্পেল টেস্টে ওয়াই-ফাই-অ্যাওয়ার স্নিপেট অন্তর্ভুক্ত থাকে, যা packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java-এ থাকে, এটি Mobly Snippet Lib-এর মাধ্যমে তৈরি করা হয় এবং Android-এ এখানে উপলভ্য: 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
AndroidTest.xml ফাইল যোগ করুন, যেমন packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/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-এর মাধ্যমে ইনস্টল করা হবে। mobly-par-file-nameforMoblyBinaryHostTestঅবশ্যই Android.bp-তে থাকা মডিউলের নামের সাথে মিলতে হবে।- পরীক্ষার জন্য
mobly-test-timeoutউল্লেখ করুন। এটি মিলিসেকেন্ডে এবং সম্পূর্ণ পাইথন বাইনারি এক্সিকিউশনের (সব টেস্ট কেস একসাথে) ক্ষেত্রে প্রযোজ্য। কোনও সমস্যা হলে, টেস্ট কেস যাতে অনন্তকাল ধরে আটকে না থাকে, সেই জন্য এটি প্রয়োজন। - প্রতিটি
deviceট্যাগে প্রতিটি ডিভাইসে একটি স্বতন্ত্র সেটআপ থাকতে পারে, Mobly কনফিগারেশন XML-এ নির্দিষ্ট করা একই ক্রমে সেগুলি পাবে।
স্নিপেট apk ইনস্টলেশন সম্পর্কিত:
- কভারেজ টিমের সাথে কথোপকথনের কারণে target_preparer-এর মাধ্যমে স্নিপেট APK ইনস্টল করার জন্য প্রাথমিক POC আপডেট করা হয়েছে: কভারেজ মাপ যাতে খুব তাড়াতাড়ি মুছে না যায় তা নিশ্চিত করতে, পাইথন বাইনারিতে টেস্ট কোডের পরিবর্তে Harness-এর মাধ্যমে আনইনস্টল করা, টাইমিংয়ের ক্ষেত্রে আরও ভাল গ্যারান্টি প্রদান করে।
ধাপ ৫: লোকালি টেস্ট রান করুন: atest
বর্তমানে, মাল্টি-ডিভাইস টেস্ট শুধুমাত্র ফিজিক্যাল ডিভাইসে রান করে। পরীক্ষা চালানোর আগে, আপনার টেস্ট ডিভাইসগুলি সঠিক অবস্থায় আছে কিনা তা যাচাই করুন। adb
devices কমান্ডটি আপনার কানেক্ট করা ডিভাইসের তালিকা রিপোর্ট করবে। তালিকায় যদি
পরীক্ষার জন্য উপযুক্ত নয় এমন ডিভাইস থাকে, তাহলে -s
ফ্ল্যাগ ব্যবহার করে পরীক্ষার জন্য ডিভাইস নির্দিষ্ট করুন।
ওয়াই-ফাই পরীক্ষার জন্য, ডিভাইস (ফ্যাক্টরি রিসেট করার পরে) ওয়াই-ফাই চালু আছে কিনা তা নিশ্চিত করুন।
আপনি atest কমান্ড ব্যবহার করে লোকালি টেস্ট চালাতে পারবেন:
$ atest CtsWifiAwareTestCases
লেটেস্ট
আউটপুটের সারসংক্ষেপের শীর্ষকে আপনার ব্যবহার করা ডিভাইসের সংখ্যা দেখতে পাবেন, যেমন Test executed with 2 device(s)।
সমস্যার সমাধান
লোকালি চালানোর সময় টেস্ট ব্যর্থ হলে, তার কারণ:
Virtualenv সংক্রান্ত সমস্যা
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।