জটিল পরীক্ষার কনফিগারেশন

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

  • টেস্ট এপিকে ছাড়াও অন্যান্য এপিকে ইনস্টল করুন।
  • ডিভাইসে কিছু ফাইল পুশ করুন
  • কমান্ড চালান (যেমন adb shell pm ...)

অতীতে, কম্পোনেন্ট টিমগুলো সাধারণত এই ধরনের কাজ সম্পাদনের জন্য হোস্ট সাইড টেস্ট লিখে থাকতো, যার জন্য ট্রেড ফেডারেশন হারনেস সম্পর্কে ধারণা থাকা প্রয়োজন এবং যা সাধারণত একটি টেস্ট মডিউলের জটিলতা বাড়িয়ে দেয়।

CTS থেকে ধারণা নিয়ে, আমরা এই ধরনের কাজগুলোকে সমর্থন করার জন্য টেস্ট মডিউল কনফিগের ধারণাটি চালু করেছি। উপরে তালিকাভুক্ত সাধারণ কাজগুলো মাত্র কয়েকটি কনফিগ লাইনের মাধ্যমেই সম্পন্ন করা যায়। সর্বোচ্চ নমনীয়তার জন্য, আপনি ITargetPreparer বা ITargetCleaner দ্বারা সংজ্ঞায়িত আপনার নিজস্ব টার্গেট প্রিপারারও প্রয়োগ করতে পারেন এবং সেগুলোকে আপনার নিজের টেস্ট মডিউল কনফিগে ব্যবহারের জন্য কনফিগার করতে পারেন।

একটি টেস্ট মডিউলের জন্য টেস্ট মডিউল কনফিগ হলো একটি আবশ্যক XML ফাইল, যা টপ লেভেল মডিউল সোর্স ফোল্ডারে যুক্ত করা হয় এবং এর নাম 'AndroidTest.xml'। এই XML ফাইলটি ট্রেড ফেডারেশন টেস্ট অটোমেশন হারনেস দ্বারা ব্যবহৃত কনফিগারেশন ফাইলের ফরম্যাট অনুসরণ করে। বর্তমানে টেস্ট মডিউল কনফিগের মাধ্যমে প্রধানত “target_preparer” এবং "test" ট্যাগগুলো ব্যবহৃত হয়।

লক্ষ্য প্রস্তুতকারীরা

“target_preparer” ট্যাগ, যেমনটি এর নাম থেকে বোঝা যায়, একটি টার্গেট প্রিপারার (দেখুন ITargetPreparer ) সংজ্ঞায়িত করে, যার একটি সেটআপ মেথড থাকে, যা টেস্টিংয়ের জন্য টেস্ট মডিউলটি এক্সিকিউট করার আগে কল করা হয়; এবং যদি “target_preparer” ট্যাগে উল্লেখিত ক্লাসটি ITargetCleaner- ও ইমপ্লিমেন্ট করে, তাহলে টেস্ট মডিউলটি শেষ হওয়ার পরে এর টিয়ারডাউন মেথডটি কল করা হবে।

বিল্ট-ইন কমন মডিউল কনফিগ ব্যবহার করতে, আপনার টেস্ট মডিউলের টপ লেভেল ফোল্ডারে 'AndroidTest.xml' নামে একটি নতুন ফাইল যোগ করুন এবং নিম্নলিখিত কন্টেন্ট দিয়ে এটি পূরণ করুন:

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

উদাহরণস্বরূপ, আমরা উপরের “insert” কমেন্টে নিম্নলিখিত অপশন ট্যাগগুলো যোগ করতে পারি:

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

এই অপশনগুলো টেস্ট হারনেসটিকে নিম্নরূপে কনফিগার করবে:

  1. টেস্ট মডিউল চালু করার আগে, ডিভাইসে “settings put secure accessibility_enabled 1” শেল কমান্ডটি চালান।
  2. টেস্ট মডিউল শেষ হলে, “settings put secure accessibility_enabled 0” শেল কমান্ডটি চালান।

এই নির্দিষ্ট উদাহরণে, টেস্ট মডিউল এক্সিকিউশনের আগে/পরে যথাক্রমে অ্যাক্সেসিবিলিটি চালু/বন্ধ করা হয়। একটি সহজ উদাহরণ দেখানোর মাধ্যমে, “option” ট্যাগটি কীভাবে ব্যবহৃত হয় সে সম্পর্কে আরও বিস্তারিত আলোচনা করা প্রয়োজন। উপরে যেমন দেখানো হয়েছে, ট্যাগটির দুটি অ্যাট্রিবিউট থাকতে পারে: name, value। name অ্যাট্রিবিউটটি অবশ্যই প্রস্তুতকারকের দেওয়া অপশনগুলোর মধ্যে একটিকে নির্দেশ করবে।

ভ্যালু ফিল্ডের সুনির্দিষ্ট উদ্দেশ্য নির্ভর করে প্রস্তুতকারক কীভাবে অপশনটি সংজ্ঞায়িত করেছেন তার উপর: এটি একটি স্ট্রিং, একটি সংখ্যা, একটি বুলিয়ান, বা এমনকি একটি ফাইল পাথও হতে পারে। এখানে তিনটি সাধারণ টার্গেট প্রস্তুতকারকের একটি সারসংক্ষেপ দেওয়া হলো:

  • ক্লাসের নাম: পুশফাইলপ্রিপারার

    • সংক্ষিপ্ত নাম : পুশ-ফাইল
    • ফাংশন : টেস্ট কেস ফোল্ডারের অধীনে থাকা যেকোনো ফাইল ডিভাইসের নির্দিষ্ট গন্তব্যে পুশ করে।
    • নোট :
      • এই প্রিপারারটি এক ফোল্ডার থেকে অন্য ফোল্ডারে, অথবা এক ফাইল থেকে অন্য ফাইলে ফাইল পুশ করতে পারে; অর্থাৎ, আপনি ডিভাইসের কোনো ফোল্ডারের অধীনে ফাইল পুশ করতে পারবেন না: আপনাকে অবশ্যই সেই ফোল্ডারের অধীনে গন্তব্য ফাইলের নামও উল্লেখ করতে হবে।
    • বিকল্পসমূহ :
      • পুশ-ফাইল: একটি পুশ-স্পেক, যা ডিভাইসে ফাইলটি পুশ করার জন্য লোকাল ফাইলের পাথ নির্দিষ্ট করে। এটির পুনরাবৃত্তি করা যেতে পারে। যদি একই রিমোট পাথে একাধিক ফাইল পুশ করার জন্য কনফিগার করা থাকে, তবে সর্বশেষ ফাইলটি পুশ করা হবে।
      • push: (অপ্রচলিত) একটি push-spec, যা ' /path/to/srcfile.txt->/path/to/destfile.txt ' অথবা ' /path/to/srcfile.txt->/path/to/destdir/ ' ফরম্যাটে থাকে। এটির পুনরাবৃত্তি হতে পারে। এই পাথটি টেস্ট মডিউল ডিরেক্টরি অথবা আউট ডিরেক্টরির সাপেক্ষে হতে পারে।
      • পোস্ট-পুশ: সমস্ত পুশ প্রচেষ্টা সম্পন্ন হওয়ার পর ডিভাইসে চালানোর জন্য একটি কমান্ড (` adb shell <your command> ` ব্যবহার করে)। এর সাধারণ ব্যবহার হলো পারমিশনের জন্য chmod ব্যবহার করা।
  • ক্লাসের নাম: InstallApkSetup

    • সংক্ষিপ্ত নাম: ইনস্টল-এপিকে
    • ফাংশন: ডিভাইসের নির্দিষ্ট গন্তব্যে যেকোনো এপিকে ফাইল পুশ করে।
    • বিকল্পসমূহ:
      • টেস্ট-ফাইল-নাম: ডিভাইসে ইনস্টল করার জন্য এপিকে ফাইলের নাম।
      • install-arg: pm install কমান্ডে যোগ করার জন্য অতিরিক্ত আর্গুমেন্ট, যার শুরুতে একটি ড্যাশ থাকতে পারে, যেমন “-d”। এটির পুনরাবৃত্তি করা যেতে পারে।
  • ক্লাসের নাম: রানকমান্ডটার্গেটপ্রিপারার

    • সংক্ষিপ্ত নাম: রান-কমান্ড
    • ফাংশন: টেস্ট মডিউল নির্বাহের আগে বা পরে যেকোনো শেল কমান্ড কার্যকর করে।
    • বিকল্পসমূহ:
      • রান-কমান্ড: চালানোর জন্য adb শেল কমান্ড। এটির পুনরাবৃত্তি করা যেতে পারে।
      • teardown-command: টিয়ারডাউন পর্বের সময় চালানোর জন্য adb শেল কমান্ড। এটির পুনরাবৃত্তি করা যেতে পারে।

পরীক্ষার শ্রেণী

পরীক্ষাটি সম্পাদনের জন্য ব্যবহৃত ট্রেড ফেডারেশন ক্লাসটিই হলো একটি টেস্ট ক্লাস।

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

এখানে তিনটি সাধারণ পরীক্ষার শ্রেণী রয়েছে:

  • ক্লাসের নাম: GTest

    • সংক্ষিপ্ত নাম: gtest
    • ফাংশন: একটি টেস্ট যা প্রদত্ত ডিভাইসে একটি নেটিভ টেস্ট প্যাকেজ চালায়।
    • বিকল্পসমূহ:
      • নেটিভ-টেস্ট-ডিভাইস-পাথ: ডিভাইসের সেই পাথ যেখানে নেটিভ টেস্টগুলো অবস্থিত।
  • ক্লাসের নাম: ইন্সট্রুমেন্টেশনটেস্ট

    • সংক্ষিপ্ত নাম: যন্ত্রসংগীত
    • ফাংশন: একটি পরীক্ষা যা প্রদত্ত ডিভাইসে একটি ইন্সট্রুমেন্টেশন টেস্ট প্যাকেজ চালায়।
    • বিকল্পসমূহ:
      • প্যাকেজ: যে অ্যান্ড্রয়েড টেস্ট অ্যাপ্লিকেশনটি চালানো হবে, তার ম্যানিফেস্ট প্যাকেজের নাম।
      • ক্লাস: যে টেস্টটি চালানো হবে তার ক্লাসের নাম।
      • পদ্ধতি: যে টেস্টটি চালানো হবে তার নাম।
  • ক্লাসের নাম: AndroidJUnitTest

    • ফাংশন: একটি টেস্ট যা android.support.test.runner.AndroidJUnitRunner ব্যবহার করে প্রদত্ত ডিভাইসে একটি ইন্সট্রুমেন্টেশন টেস্ট প্যাকেজ চালায়। একটি ইন্সট্রুমেন্টেশন টেস্ট চালানোর এটিই প্রধান উপায়।