মাল্টি-ডিভাইস মডিউল

এই ডকটি কীভাবে মাল্টি-ডিভাইস মডিউল তৈরি করতে হয় সে সম্পর্কে ধাপে ধাপে নির্দেশাবলী প্রদান করে এবং পরিচিত হলে বর্তমান সীমাবদ্ধতাগুলিকে কল করে।

নমুনা

একটি CTS ওয়াইফাই-সচেতন মাল্টি-ডিভাইস মডিউল প্রদান করা হয়েছে। এটি ওয়াইফাইয়ের মাধ্যমে একটি ডিভাইস থেকে একটি বার্তা পাঠায় এবং অন্য ডিভাইসটি এটি গ্রহণ করেছে তা যাচাই করে।

মডিউলটির উৎস হল প্যাকেজ/মডিউল/ওয়াইফাই/টেস্ট/হোস্টসাইডটেস্ট/মাল্টিডিভাইস/টেস্ট/সচেতন/

আমরা যতটা উপযোগী মনে করি ততটুকু মন্তব্য সহ উদাহরণটি টীকা করেছি।

ধাপ 1: মডিউল ফোল্ডার তৈরি করুন

আপনার মাল্টি-ডিভাইস মডিউলের জন্য এটি যে স্যুট প্রোজেক্টের অন্তর্গত সেটিতে একটি ফোল্ডার তৈরি করার পরামর্শ দেওয়া হয়। যেমন: cts/hostsidetests/multidevices/ । আমরা এটি সুপারিশ করি যাতে সমস্ত মাল্টি-ডিভাইস মডিউল অন্তত প্রথমে সংযোজিত থাকে যা উদাহরণগুলি আবিষ্কার করা সহজ করে তুলবে।

এই মডিউলের জন্য সমস্ত ফাইল তাদের নিজস্ব মডিউল ফোল্ডারের অধীনে রাখা উচিত। উদাহরণস্বরূপ: wifi_aware

ধাপ 2: পরীক্ষা তৈরি করুন

এখানেই আপনি আপনার পরীক্ষার যুক্তি প্রয়োগ করেন। এটি কি পরীক্ষা করা হচ্ছে তার উপর অত্যন্ত নির্ভরশীল।

Mobly পরীক্ষার উৎস তৈরি করুন, যেমন: wifi_aware_test.py

ধাপ 3: বিল্ড ফাইল তৈরি করুন: 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/ এ উপলব্ধ।

ঐচ্ছিক: কাস্টম স্নিপেট তৈরি করুন

কিছু মাল্টি-ডিভাইস মডিউলের জন্য কাস্টম মোবলি স্নিপেট প্রয়োজন হতে পারে। নমুনা পরীক্ষায় প্যাকেজ/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",
    ],
}

ধাপ 4: মডিউল কনফিগারেশন তৈরি করুন: AndroidTest.xml

একটি AndroidTest.xml ফাইল যোগ করুন যেমন packages/modules/Wifi/tests/hostsidetest/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 জন্য যেকোন নির্ভরতা নির্দিষ্ট করা যেতে পারে এবং পিপ দিয়ে ইনস্টল করা হবে।
  • MoblyBinaryHostTest এর mobly-par-file-name অবশ্যই Android.bp-এর মতো মডিউল নামের সাথে মিলতে হবে।
  • পরীক্ষার জন্য একটি mobly-test-timeout নির্দিষ্ট করুন। এটি মিলিসেকেন্ডে এবং সম্পূর্ণ পাইথন বাইনারি এক্সিকিউশনে প্রযোজ্য (সমস্ত পরীক্ষার ক্ষেত্রে একসাথে)। কিছু সমস্যার ক্ষেত্রে পরীক্ষার ক্ষেত্রে চিরতরে ঝুলে থাকা এড়াতে এটি প্রয়োজন।
  • প্রতিটি device ট্যাগ প্রতিটি ডিভাইসে একটি স্বতন্ত্র সেটআপ ধারণ করতে পারে, Mobly কনফিগার XML-এ উল্লেখ করা একই ক্রমে সেগুলি গ্রহণ করবে।

স্নিপেট apk ইনস্টলেশনের সাথে সম্পর্কিত:

  • কভারেজ টিমের সাথে কথোপকথনের কারণে target_preparer-এর মাধ্যমে স্নিপেট apks ইনস্টল করার জন্য প্রাথমিক POC আপডেট করা হয়েছে: কভারেজ পরিমাপগুলি খুব তাড়াতাড়ি মুছে ফেলা না হয় তা নিশ্চিত করার জন্য, পাইথন বাইনারিগুলিতে পরীক্ষার কোডের পরিবর্তে হারনেস দ্বারা আনইনস্টল করা সময়ের পরিপ্রেক্ষিতে আরও ভাল গ্যারান্টি দেয়।

ধাপ 5: স্থানীয়ভাবে পরীক্ষা চালান: 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

কমপক্ষে 2টি কন্ট্রোলার অবজেক্ট পাওয়ার প্রত্যাশিত, 1টি পেয়েছে

টেস্ট মডিউল হয় মাল্টি-ডিভাইস বা একক-ডিভাইস, কোনো মিশ্র-মডিউল নেই। আপনি একাধিক ডিভাইস ছাড়া একটি মাল্টি-ডিভাইস মডিউল চালানোর চেষ্টা করলে আপনি এই ত্রুটিটি দেখতে পাবেন:

Expected to get at least 2 controller objects, got 1

মাল্টি-ডিভাইস মোডে মডিউলটি কার্যকর করা সমস্যার সমাধান করবে।

CTS-এর জন্য: আপনি এটিকে ট্রিগার করতে শার্ডিং ব্যবহার করতে পারেন (উদাহরণস্বরূপ: --shard-count 2) অথবা run cts-multidevces