TF-এ হোস্ট-সাইড ডিভাইসলেস টেস্ট লিখুন

এই পৃষ্ঠা থেকে আপনি জানতে পারবেন যে কীভাবে এমন একটি হোস্ট-সাইড টেস্ট লিখতে হয় যার জন্য কোনও ডিভাইসের প্রয়োজন হয় না, যেমন একটি Linux GCE ইনস্ট্যান্সে রান করে এমন টেস্ট। (ডিভাইসের প্রয়োজন হয় এমন হোস্ট-পরিচালিত টেস্ট লেখা সম্পর্কে বিস্তারিত জানতে, Trade Federation-এ হোস্ট-পরিচালিত টেস্ট লেখা দেখুন।)

হোস্ট-সাইড টেস্টের ধরন

আপনি Trade Federation (TF)-এর মাধ্যমে বিভিন্ন ধরনের হোস্ট-সাইড টেস্ট চালাতে পারবেন।

নেটিভ (gtest) টেস্ট

কোনও প্ল্যাটফর্ম পরীক্ষা করার জন্য নেটিভ টেস্ট (gtests) তৈরি করুন। পরীক্ষার জন্য কোনও ডিভাইস না লাগলে, সেটি কোনও হোস্টে চালান; এইভাবে পরীক্ষাটি অনেক দ্রুত চালানো যাবে। টেস্ট হোস্টের উপর এই ধরনের টেস্ট রান করার জন্য TF রানার HostGTest ব্যবহার করুন।

এটি হল TradeFed টেস্ট কনফিগারেশনের একটি নমুনা:

<configuration description="Runs hello_world_test.">
    <option name="null-device" value="true" />
    <test class="com.android.tradefed.testtype.HostGTest" >
        <option name="module-name" value="hello_world_test" />
    </test>
</configuration>

টেস্ট কনফিগারেশন হোস্টের উপর gtest টেস্ট (hello_world_test) রান করে। উদাহরণ টেস্ট কনফিগ অটোমেটিক জেনারেট করা যেতে পারে। আপনার পরীক্ষার জন্য বিশেষ সেট-আপ বা ক্লিন-আপের প্রয়োজন না হলে, সঠিক TF টেস্ট কনফিগারেশন তৈরি করার জন্য আপনি অটোমেটিক টেস্ট-কনফিগারেশন জেনারেশনের উপর ভরসা করতে পারেন।

হোস্ট-সাইড gtest কনফিগার করতে এবং অটোমেটিক টেস্ট-কনফিগার জেনারেশন চালু করতে, Android.bp-এ host_supported-এর মান true হিসেবে সেট করুন, যেমন hello_world_test-এ করা হয়েছে।

নেটিভ টেস্ট লেখা সম্পর্কে আরও তথ্য পেতে, নতুন নেটিভ টেস্ট যোগ করা উদাহরণ দেখুন।

JAR হোস্ট টেস্ট

JAR (Java) হোস্ট টেস্ট, যেমন JUnit, হল এমন টেস্ট যা ডিভাইসে রান করানোর প্রয়োজন হয় না এবং যা আপনার Java প্রজেক্টের কোড কভারেজ প্রদান করে। এই ধরনের পরীক্ষাগুলি রানার HostTest ব্যবহার করে টেস্ট হোস্টে চালানোর জন্য কনফিগার করা যেতে পারে।

TradeFed টেস্ট কনফিগারেশনের নমুনা

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.HostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

টেস্ট কনফিগারেশন HelloWorldHostTest-এর একটি হোস্ট-সাইড JUnit টেস্ট রান করে। মনে রাখবেন, উপরে উল্লেখ করা টেস্ট কনফিগারেশন অটোমেটিক তৈরি করা যেতে পারে। আপনার পরীক্ষার জন্য বিশেষ সেট-আপ বা ক্লিন-আপের প্রয়োজন না হলে, সঠিক TradeFed পরীক্ষা কনফিগারেশন তৈরি করতে অটোমেটিক টেস্ট-কনফিগার জেনারেশনের উপর নির্ভর করুন।

JAR হোস্ট টেস্ট কীভাবে লিখতে হয় সেই সম্পর্কে আরও জানতে, JAR (Java) হোস্ট টেস্ট পৃষ্ঠা দেখুন।

আইসোলেটেড জাভা হোস্ট টেস্ট

ডিভাইস ছাড়া Java টেস্ট সামান্য পারফর্ম্যান্স খরচের বিনিময়ে আইসোলেশন এনভায়রনমেন্টে চালানো যেতে পারে। তবে, এই এনভায়রনমেন্ট ব্যবহার করার আগে কিছু গুরুত্বপূর্ণ বিষয় বিবেচনা করতে হবে।

  • এটি Robolectric এবং JUnit ইউনিট টেস্টের জন্য ব্যবহৃত ডিফল্ট রানার
  • Tradefed আইসোলেশন এনভায়রনমেন্টে শুধু JUnit টেস্ট সাপোর্ট করে।
  • শুধুমাত্র স্ট্যাটিক্যালি লিঙ্ক করা ডিপেন্ডেন্সি কাজ করে। lib-এর সাথে কোনও নির্ভরতা ঘোষণা করা হয়নি যা ক্লাসপাথে অন্তর্ভুক্ত।
  • আইসোলেশন রানার শুধুমাত্র শিম রানার এবং আপনার টেস্ট জারকে ক্লাসপাথে রাখে।
  • এই রানারের মাধ্যমে এক্সিকিউট করা প্রতিটি টেস্ট রানের জন্য নির্দিষ্ট পরিমাণ ওভারহেড আছে।

Tradefed টেস্ট কনফিগারেশনের নমুনা (আইসোলেটেড)

<configuration description="Executes HelloWorldHostTest">
    <test class="com.android.tradefed.testtype.IsolatedHostTest" >
        <option name="jar" value="HelloWorldHostTest.jar" />
    </test>
</configuration>

অটোমেটিক জেনারেশনের জন্য Soong কনফিগারেশনের নমুনা

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

java_test_host {
    name: "HelloWorldHostTest",

    test_options: {
        unit_test: true,
    },

    test_suites: ["general-tests"],

    srcs: ["test/**/*.java"],

    static_libs: [
        "junit",
    ],
}

Robolectric পরীক্ষা

Robolectric টেস্ট, আইসোলেটেড হোস্ট টেস্টের মতো একই রানার ব্যবহার করে, তবে এতে কিছু বিশেষ বিকল্প থাকে।

  • robolectric-resources বিকল্পটি সাবপ্রসেসে পাস করার জন্য কিছু Robolectric-নির্দিষ্ট কমান্ড লাইন বিকল্প চালু করে এবং সাবপ্রসেস ক্লাসপাথে android-all-এর ট্রি বিল্ড যোগ করে। অন্য দুটি পেশাদার পদ্ধতি হলেও, Robolectric টেস্ট সফলভাবে চালানোর জন্য এই বিকল্পটি বাধ্যতামূলক।
  • java-folder বিকল্পটি সাবপ্রসেস দ্বারা ব্যবহৃত Java রানটাইম পরিবর্তন করার অনুমতি দেয়। Robolectric নির্দিষ্ট Java ভার্সন পছন্দ করে যা হোস্ট সিস্টেমের পছন্দসই JVM-এর সাথে নাও মিলতে পারে, তাই এটি প্রয়োজনীয়।
  • exclude-paths বিকল্পটি সাবপ্রসেস রানারকে কোনও নির্দিষ্ট মডিউল লোড করা এড়াতে দেয় যা JAR-এর সাথে অতিরিক্ত ক্লাস থাকলে কাজে লাগে, কারণ এটি লোড করার সময় সমস্যা তৈরি করতে পারে। SecurityException ব্যতিক্রম এড়াতে java. হল একটি সাধারণ বর্জন।

Robolectric কনফিগারেশনের নমুনা

<configuration description="Executes a Sample Robolectric Test">
    <option name="java-folder" value="prebuilts/jdk/jdk9/linux-x86/" />
    <option name="exclude-paths" value="java" />
    <option name="use-robolectric-resources" value="true" />
    <test class="com.android.tradefed.testtype.IsolatedHostTest">
        <option name="jar" value="RobolectricExampleTest.jar" />
    </test>
</configuration>

Robolectric অটো-জেনারেশনের জন্য নমুনা Soong কনফিগারেশন

উপরে দেখানো টেস্ট কনফিগের মতো ম্যানুয়ালি তৈরি করার পরিবর্তে, Soong এই উদাহরণের মতো একটি ঘোষণা ব্যবহার করে কনফিগারেশন অটোমেটিক তৈরি করতে পারে।

android_robolectric_test {
    name: "HelloWorldRoboTest",
    srcs: [
        "src/**/*.java",
    ],

    // Include the testing libraries
    static_libs: [
        "mockito-robolectric-prebuilt",
        "platform-test-annotations",
        "testng",
        "truth-prebuilt",
    ],

    instrumentation_for: "HelloWorldApp",
}

Python টেস্ট

টেস্ট লজিক Python-এ লেখা হলে, python_test_host বিল্ড টাইপ ব্যবহার করে par ফাইল তৈরি করুন যা TF PythonBinaryHostTest-এর মাধ্যমে রান করা যাবে।

TradeFed টেস্ট কনফিগারেশনের নমুনা

<configuration description="Config to run atest unittests">
    <test class="com.android.tradefed.testtype.python.PythonBinaryHostTest" >
        <option name="par-file-name" value="atest_unittests" />
        <option name="test-timeout" value="2m" />
    </test>
</configuration>

টেস্ট স্যুট সেটিং

কোনও নির্দিষ্ট বিল্ডের জন্য হোস্ট-সাইড টেস্ট যাতে TF-এর মাধ্যমে অ্যাক্সেস করা যায়, তার জন্য টেস্ট মডিউল `test_suites` সেটিংকে `general-tests` হিসেবে সেট করুন:

test_suites: ["general-tests"],

এই সেটিংয়ের মাধ্যমে, test_suites টার্গেটে general-tests.zip পরীক্ষা প্যাকেজ করা হয়।