কমান্ড লাইন থেকে পরীক্ষা করুন

এই ডকুমেন্ট থেকে জানা যাবে যে কীভাবে সরাসরি কমান্ড লাইন থেকে টেস্ট রান করতে হয়। এই ডকুমেন্ট ধরে নেয় যে আপনি আগে থেকেই জানেন কীভাবে Android অ্যাপ তৈরি করতে হয় এবং আপনার অ্যাপের জন্য টেস্ট লিখতে হয়। আপনার অ্যাপের জন্য টেস্ট কীভাবে তৈরি করবেন সেই সম্পর্কে আরও তথ্যের জন্য, Android-এ অ্যাপ টেস্ট করুন দেখুন।

এই পৃষ্ঠায় বর্ণনা করা কমান্ড-লাইন টুল ও Gradle টাস্ক UI-টুলকিট নিরপেক্ষ। আপনি Compose-এর জন্য UI টেস্ট লিখতে চাইলে, আপনার Compose লেআউট টেস্ট করুন দেখুন। আপনার টেস্ট লেখা হয়ে গেলে, আপনার টার্মিনাল বা রিমোট কন্টিনিউয়াস ইন্টিগ্রেশন এনভায়রনমেন্ট থেকে সেগুলি রান করার জন্য এই নির্দেশিকা অনুসরণ করা চালিয়ে যান।

Gradle বিল্ড সিস্টেম ব্যবহার করে আপনার অ্যাপ তৈরি করার সময়, Android Gradle প্লাগ-ইন আপনাকে কমান্ড লাইন ব্যবহার করে Gradle প্রজেক্ট থেকে টেস্ট রান করতে দেয়। আরও সূক্ষ্ম কন্ট্রোলের জন্য, আপনি Android Debug Bridge (adb) শেল ব্যবহার করে আপনার পরীক্ষা চালানোর বিকল্প বেছে নিতে পারেন। কন্টিনিউয়াস ইন্টিগ্রেশন এনভায়রনমেন্টে পরীক্ষা চালানোর সময় এটি কাজে লাগতে পারে।

ভার্চুয়াল ডিভাইস ব্যবহার করে কমান্ড লাইন থেকে কীভাবে অটোমেটেড ইনস্ট্রুমেন্টেড টেস্ট রান করতে হয় তা জানতে, যা আপনার জন্য Gradle ম্যানেজ করে, Gradle ম্যানেজ করা ডিভাইস দিয়ে আপনার টেস্ট স্কেল করুন দেখুন।

Gradle-এর মাধ্যমে টেস্ট রান করুন

Android Gradle প্লাগ-ইন আপনাকে কমান্ড লাইন ব্যবহার করে আপনার Gradle প্রোজেক্ট থেকে পরীক্ষা চালানোর সুযোগ দেয়।

Gradle-এর মাধ্যমে কীভাবে পরীক্ষা চালানো যায় তা নিচের টেবিলে সংক্ষিপ্তভাবে দেখানো হয়েছে:

টেবিল ১. Gradle-এর মাধ্যমে আপনার পরীক্ষা চালানোর বিভিন্ন উপায়

ইউনিট টেস্টের ধরন যে কমান্ড চালাতে হবে টেস্টের ফলাফলের লোকেশন
লোকাল ইউনিট টেস্ট test টাস্ক রান করুন:

./gradlew test
HTML টেস্ট ফলাফলের ফাইল:
path_to_your_project/module_name/build/reports/tests/ ডিরেক্টরি।

XML টেস্ট ফলাফল ফাইল:
path_to_your_project/module_name/build/test-results/ ডিরেক্টরি।

ইনস্ট্রুমেন্টেড ইউনিট টেস্ট connectedAndroidTest টাস্ক রান করুন:

./gradlew connectedAndroidTest
HTML টেস্ট ফলাফলের ফাইল:
path_to_your_project/module_name/build/reports/androidTests/connected/ ডিরেক্টরি।

XML পরীক্ষার ফলাফল ফাইল:
path_to_your_project/module_name/build/outputs/androidTest-results/connected/ ডিরেক্টরি।

Gradle-এ টাস্কের নামের সংক্ষিপ্ত রূপ কাজ করে। যেমন, আপনি নিম্নলিখিত কমান্ড লিখে connectedAndroidTest টাস্ক শুরু করতে পারেন:

./gradlew cAT

এছাড়াও, আপনি Gradle টাস্ক check ও connectedCheck চালানোর বিকল্প বেছে নিতে পারেন। এই টাস্কগুলি যথাক্রমে আপনার লোকাল বা ইন্সট্রুমেন্টেড টেস্ট রান করে, তবে অন্যান্য Gradle প্লাগ-ইন দ্বারা যোগ করা অন্যান্য চেক অন্তর্ভুক্ত করে।

মডিউলে টেস্ট রান করা

test ও connectedAndroidTest টাস্ক আপনার প্রজেক্টের প্রতিটি মডিউলে টেস্ট চালায়। আপনি কোনও নির্দিষ্ট মডিউলে টেস্ট রান করতে পারেন। এর জন্য test বা connectedAndroidTest টাস্কের আগে মডিউলের নাম এবং একটি কোলন (:) যোগ করুন। যেমন, নিম্নলিখিত কমান্ডটি শুধু mylibrary মডিউলের জন্য ইনস্ট্রুমেন্টেড টেস্ট রান করে:

./gradlew mylibrary:connectedAndroidTest

বিল্ড ভ্যারিয়েন্টে পরীক্ষা চালানো

test এবং connectedAndroidTest টাস্ক আপনার প্রোজেক্টের প্রতিটি বিল্ড ভেরিয়েন্ট-এ টেস্ট রান করে। আপনি নিম্নলিখিত সিনট্যাক্স ব্যবহার করে নির্দিষ্ট বিল্ড ভ্যারিয়েন্টকে টার্গেট করতে পারেন:

  • লোকাল ইউনিট টেস্টের জন্য:
    ./gradlew testVariantNameUnitTest
  • ইনস্ট্রুমেন্টেড টেস্টের জন্য:
    ./gradlew connectedVariantNameAndroidTest

নির্দিষ্ট টেস্ট পদ্ধতি বা ক্লাস রান করা

স্থানীয় ইউনিট টেস্ট চালানোর সময়, Gradle আপনাকে --tests ফ্ল্যাগ ব্যবহার করে নির্দিষ্ট টেস্ট টার্গেট করতে দেয়। যেমন, নিম্নলিখিত কমান্ডটি নির্দিষ্ট বিল্ড ভ্যারিয়েন্টের জন্য sampleTestMethod শুধুমাত্র টেস্ট রান করে। --tests ফ্ল্যাগ ব্যবহার করা সম্পর্কে আরও জানতে, টেস্ট ফিল্টারিং সংক্রান্ত Gradle-এর ডকুমেন্টেশন পড়ুন।


./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'

adb-এর মাধ্যমে টেস্ট রান করা

Android Debug Bridge (adb)-এর মাধ্যমে কমান্ড লাইন থেকে টেস্ট রান করলে, অন্য যেকোনও পদ্ধতির তুলনায় টেস্ট বেছে নেওয়ার আরও বেশি বিকল্প থাকে। আপনি আলাদা আলাদা পরীক্ষা পদ্ধতি বেছে নিতে, কাস্টম অ্যানোটেশন অনুযায়ী পরীক্ষা ফিল্টার করতে অথবা পরীক্ষার বিকল্প নির্দিষ্ট করতে পারবেন। যেহেতু টেস্ট রান সম্পূর্ণভাবে কমান্ড লাইন থেকে কন্ট্রোল করা হয়, তাই আপনি বিভিন্ন উপায়ে শেল স্ক্রিপ্টের মাধ্যমে আপনার টেস্টিং কাস্টমাইজ করতে পারবেন।

কমান্ড লাইন থেকে পরীক্ষা চালানোর জন্য, আপনার ডিভাইস বা এমুলেটরে কমান্ড-লাইন শেল চালু করতে adb shell রান করান। সেই শেল থেকে আপনি am কমান্ড ব্যবহার করে অ্যাক্টিভিটি ম্যানেজারের সাথে ইন্টার‍্যাক্ট করতে এবং আপনার টেস্ট চালানোর জন্য এর instrument সাব-কমান্ড ব্যবহার করতে পারবেন।

শর্টকাট হিসেবে, আপনি adb শেল শুরু করতে, am instrument কল করতে এবং একটি ইনপুট লাইনে কমান্ড-লাইন ফ্ল্যাগ নির্দিষ্ট করতে পারেন। ডিভাইস বা ইমুলেটরে শেল খোলে, আপনার পরীক্ষা চালায়, আউটপুট তৈরি করে এবং তারপরে আপনার কম্পিউটারে কমান্ড লাইনে ফিরে আসে।

am instrument-এর সাথে টেস্ট চালাতে:

  1. আপনার মূল অ্যাপ্লিকেশন ও টেস্ট প্যাকেজ বিল্ড বা আবার বিল্ড করুন।
  2. আপনার বর্তমান Android-চালিত ডিভাইস বা এমুলেটরে আপনার টেস্ট প্যাকেজ এবং প্রধান অ্যাপ্লিকেশন Android প্যাকেজ ফাইল (APK ফাইল) ইনস্টল করুন।
  3. কমান্ড লাইনে, এটি লিখুন:

    adb shell am instrument -w <test_package_name>/<runner_class>

    যেখানে <test_package_name> হল আপনার টেস্ট অ্যাপ্লিকেশনের Android প্যাকেজের নাম এবং <runner_class> হল আপনার ব্যবহার করা Android টেস্ট রানার ক্লাসের নাম। Android প্যাকেজের নাম হল আপনার টেস্ট প্যাকেজের ম্যানিফেস্ট ফাইলে (AndroidManifest.xml) ম্যানিফেস্ট এলিমেন্টের প্যাকেজ অ্যাট্রিবিউটের ভ্যালু।

    Android টেস্ট রানার ক্লাস সাধারণত AndroidJUnitRunner:

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner

আপনার টেস্টের ফলাফল STDOUT-এ দেখা যাবে।

am instrument ফ্ল্যাগ

am instrument কমান্ডের সাথে ব্যবহার করার জন্য সব ফ্ল্যাগের তালিকা খুঁজতে, adb shell am help রান করুন। কিছু গুরুত্বপূর্ণ ফ্ল্যাগ নিচে টেবিলে বর্ণনা করা হয়েছে:

টেবিল ২. গুরুত্বপূর্ণ am instrument ফ্ল্যাগ

পতাকা মান বর্ণনা
-w (কোনো কিছুই নয়) ইনস্ট্রুমেন্টেশন শেষ না হওয়া পর্যন্ত am instrument-কে অপেক্ষা করতে বাধ্য করে, তারপরে এটি শেষ হয়। এটি পরীক্ষা শেষ না হওয়া পর্যন্ত শেল খোলা রাখে। আপনার টেস্টের ফলাফল দেখতে এই ফ্ল্যাগ প্রয়োজন।
-r (কোনো কিছুই নয়) কাঁচা ফর্ম্যাটে ফলাফল আউটপুট করে। আপনি যখন পারফর্ম্যান্স পরিমাপ সংক্রান্ত ডেটা সংগ্রহ করতে চান, তখন এই ফ্ল্যাগ ব্যবহার করুন যাতে সেগুলি টেস্ট ফলাফল হিসেবে ফর্ম্যাট করা না হয়। এই ফ্ল্যাগটি -e perf true ফ্ল্যাগের সাথে ব্যবহার করার জন্য ডিজাইন করা হয়েছে (am ইন্সট্রুমেন্ট বিকল্প বিভাগে ডকুমেন্ট করা হয়েছে)।
-e <test_options> কী-ভ্যালু পেয়ার হিসেবে পরীক্ষার বিকল্প প্রদান করে। am instrument টুলটি এগুলি নির্দিষ্ট ইন্সট্রুমেন্টেশন ক্লাসে পাস করে, এর onCreate() পদ্ধতি ব্যবহার করে। আপনি -e <test_options>-এর একাধিক ঘটনা উল্লেখ করতে পারবেন। কী ও ভ্যালু am ইনস্ট্রুমেন্ট বিকল্প বিভাগে বর্ণনা করা হয়েছে। আপনি এইসব কী-ভ্যালু পেয়ার শুধুমাত্র AndroidJUnitRunner-এর সাথে ব্যবহার করতে পারবেন। অন্য কোনও ক্লাসের সাথে এগুলি ব্যবহার করলে কোনও প্রভাব পড়ে না।
--no-hidden-api-checks (কোনো কিছুই নয়) লুকানো API ব্যবহারের উপর বিধিনিষেধ বন্ধ করে। লুকানো API কী এবং এটি কীভাবে আপনার অ্যাপকে প্রভাবিত করতে পারে সেই সম্পর্কে আরও তথ্য পেতে, নন-SDK ইন্টারফেসের উপর বিধিনিষেধ লিঙ্কটি পড়ুন।

ইন্সট্রুমেন্ট বিকল্প

am instrument টুলটি AndroidJUnitRunner বা InstrumentationTestRunner -এ কী-ভ্যালু পেয়ারের মাধ্যমে টেস্টিং বিকল্প পাস করে, এর জন্য -e ফ্ল্যাগ ব্যবহার করা হয় এবং সিনট্যাক্সটি হল:

-e <key> <value>

কিছু কী একাধিক ভ্যালু গ্রহণ করে। আপনি কমা দিয়ে আলাদা করা তালিকায় একাধিক ভ্যালু উল্লেখ করেন। যেমন, এই ইনভোকেশন AndroidJUnitRunner package কী-এর জন্য একাধিক ভ্যালু প্রদান করে:

adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunner

নিম্নলিখিত সারণীতে আপনার টেস্ট রানারের সাথে ব্যবহার করতে পারবেন এমন কী-ভ্যালু পেয়ারের তালিকা দেওয়া হল:

সারণী ৩. -e ফ্ল্যাগ কী-ভ্যালু পেয়ার যা আপনার টেস্ট রানারের সাথে ব্যবহার করা হবে

কী মান বর্ণনা
package <Java_package_name> টেস্ট অ্যাপ্লিকেশনের একটি প্যাকেজের জন্য সম্পূর্ণ কোয়ালিফায়েড Java প্যাকেজের নাম। এই প্যাকেজের নাম ব্যবহার করে এমন যেকোনও টেস্ট কেস ক্লাস এক্সিকিউট করা হয়। মনে রাখবেন, এটি কোনও Android প্যাকেজের নাম নয়; একটি টেস্ট প্যাকেজে একটি Android প্যাকেজের নাম থাকে, তবে এর মধ্যে একাধিক Java প্যাকেজ থাকতে পারে।
class <class_name> টেস্ট কেস ক্লাসের মধ্যে একটির জন্য সম্পূর্ণভাবে উপযুক্ত জাভা ক্লাস নাম। শুধুমাত্র এই টেস্ট কেস ক্লাস এক্সিকিউট করা হয়।
<class_name>#method name সম্পূর্ণভাবে উপযুক্ত টেস্ট কেস ক্লাস নেম এবং তার একটি পদ্ধতি। শুধুমাত্র এই পদ্ধতিটি কার্যকর করা হয়। ক্লাসের নাম ও মেথডের নামের মধ্যে হ্যাশ চিহ্ন (#) ব্যবহার করা হয়েছে কিনা তা লক্ষ্য করুন।
size [small | medium | large] সাইজ অনুযায়ী অ্যানোটেট করা টেস্ট মেথড রান করে। অ্যানোটেশনগুলি হল @SmallTest, @MediumTest এবং @LargeTest.
debug true ডিবাগ মোডে টেস্ট রান করে।
log true সব নির্দিষ্ট টেস্ট লোড ও লগ করে কিন্তু সেগুলি রান করে না। পরীক্ষা সংক্রান্ত তথ্য STDOUT-এ দেখা যায়। অন্যান্য ফিল্টার ও টেস্ট স্পেসিফিকেশনের কম্বিনেশন যাচাই করতে এটি ব্যবহার করুন।
emma true EMMA কোড কভারেজ বিশ্লেষণ রান করে এবং ডিভাইসে /data/<app_package>/coverage.ec-এ আউটপুট লেখে। ফাইলের লোকেশন ওভাররাইড করতে, নিম্নলিখিত এন্ট্রিতে বর্ণিত coverageFile কী ব্যবহার করুন।

মনে রাখবেন: এই বিকল্পের জন্য EMMA-ইনস্ট্রুমেন্টেড টেস্ট অ্যাপ্লিকেশনের বিল্ড প্রয়োজন, যা আপনি coverage টার্গেটের মাধ্যমে জেনারেট করতে পারবেন।

coverageFile <filename> ডিভাইসে EMMA কভারেজ ফাইলের ডিফল্ট লোকেশন ওভাররাইড করে। UNIX ফর্ম্যাটে পাথ ও ফাইলের নাম হিসেবে এই ভ্যালু উল্লেখ করুন। emma কী-এর এন্ট্রিতে ডিফল্ট ফাইলের নাম বর্ণনা করা আছে।

-e ফ্ল্যাগ ব্যবহার করার সময়, নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

  • am instrument কল করে onCreate(Bundle) একটি Bundle সহ, যাতে কী-ভ্যালু পেয়ার থাকে।
  • class কী-এর চেয়ে package কী বেশি গুরুত্বপূর্ণ। আপনি যদি কোনও প্যাকেজ নির্দিষ্ট করেন এবং তারপরে সেই প্যাকেজের মধ্যে আলাদাভাবে কোনও ক্লাস নির্দিষ্ট করেন, তাহলে Android প্যাকেজের সব টেস্ট রান করে এবং ক্লাস কী উপেক্ষা করে।
  • func কী ও unit কী একে অপরের সাথে ব্যবহার করা যায় না।

ব্যবহারের উদাহরণ

টেস্ট চালানোর জন্য am instrument ব্যবহার করার উদাহরণ নিম্নলিখিত বিভাগে দেওয়া আছে। এগুলি নিম্নলিখিত কাঠামোর উপর ভিত্তি করে তৈরি:

  • টেস্ট প্যাকেজে Android প্যাকেজের নাম com.android.demo.app.tests আছে।
  • দুটি ইনস্ট্রুমেন্টেড টেস্ট ক্লাস:
    • TestClass1, যাতে testMethod1 টেস্ট পদ্ধতি রয়েছে।
    • TestClass2, যার মধ্যে testMethod2 এবং testMethod3 টেস্ট পদ্ধতি রয়েছে।
  • টেস্ট রানার হল AndroidJUnitRunner।

সম্পূর্ণ টেস্ট প্যাকেজ রান করুন

টেস্ট প্যাকেজে সব টেস্ট ক্লাস রান করতে, এটি লিখুন:

adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

টেস্ট কেস ক্লাসে সব টেস্ট রান করা

TestClass1 ক্লাসের সব টেস্ট রান করতে, এটি লিখুন:

adb shell am instrument -w  \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

টেস্টের সাবসেট বেছে নিন

TestClass1 ক্লাস এবং testMethod3 পদ্ধতিতে সব টেস্ট রান করতে TestClass2-এ, লিখুন:

adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

আপনি আরও ব্যবহারের কেস AndroidJUnitRunner API রেফারেন্সে খুঁজে পেতে পারেন।

ইউনিফায়েড টেস্ট রিপোর্ট দেখা

Android Gradle প্লাগ-ইন ইউনিফায়েড টেস্ট টাস্ক প্রদান করে, যা HTML ড্যাশবোর্ড তৈরি করে। এই ড্যাশবোর্ড ইউনিট ও ইনস্ট্রুমেন্টেড টেস্টের ফলাফল মার্জ করে।

পূর্বশর্ত

  • Android Gradle প্লাগ-ইন 9.5.0-alpha05 বা তার পরবর্তী যেকোনও ভার্সন।

সব টেস্ট স্যুট পরীক্ষা করতে, নিম্নলিখিত টাস্কের মধ্যে যেকোনও একটি রান করুন:

অভিযোগের পরিধি Command বর্ণনা লোকেশন রিপোর্ট করুন
বর্তমান মডিউল ./gradlew :module_name:testAllSuites --continue বর্তমান মডিউলের জন্য ইউনিফায়েড টেস্ট রিপোর্ট তৈরি করে, ইউনিট ও ইনস্ট্রুমেন্টেড টেস্ট ফলাফল মার্জ করে। path_to_your_project/module_name/build/reports/testAllSuites/test-report/
বর্তমান মডিউল ও ডিপেন্ডেন্সি ./gradlew :module_name:testAllSuitesWithDependencies --continue বর্তমান মডিউল এবং এর লাইব্রেরি ডিপেন্ডেন্সির জন্য একটি ইউনিফায়েড টেস্ট রিপোর্ট তৈরি করে, ইউনিট এবং ইনস্ট্রুমেন্টেড টেস্ট ফলাফল মার্জ করে। path_to_your_project/module_name/build/reports/testAllSuitesWithDependencies/test-report/