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

এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে কীভাবে সরাসরি কমান্ড লাইন থেকে টেস্ট চালানো যায়। এই ডকুমেন্টটি ধরে নেয় যে আপনি ইতিমধ্যেই একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করতে এবং আপনার অ্যাপের জন্য টেস্ট লিখতে জানেন। আপনার অ্যাপের জন্য কীভাবে টেস্ট তৈরি করবেন সে সম্পর্কে আরও তথ্যের জন্য, "অ্যান্ড্রয়েডে অ্যাপ পরীক্ষা করুন" দেখুন।

যখন আপনি গ্রেডল বিল্ড সিস্টেম ব্যবহার করে আপনার অ্যাপ বিল্ড করেন, তখন অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপনাকে কমান্ড লাইন ব্যবহার করে আপনার গ্রেডল প্রজেক্ট থেকে টেস্ট চালানোর সুযোগ দেয়। আরও সূক্ষ্ম নিয়ন্ত্রণের জন্য, আপনি অ্যান্ড্রয়েড ডিবাগ ব্রিজ (adb) শেলের মাধ্যমে আপনার টেস্টগুলো চালানোর বিকল্পটি বেছে নিতে পারেন। কন্টিনিউয়াস ইন্টিগ্রেশন পরিবেশে টেস্ট চালানোর ক্ষেত্রে এটি বেশ কার্যকর হতে পারে।

Gradle দ্বারা পরিচালিত ভার্চুয়াল ডিভাইস ব্যবহার করে কমান্ড লাইন থেকে কীভাবে স্বয়ংক্রিয় ইনস্ট্রুমেন্টেড টেস্ট চালানো যায় তা জানতে, “Scale your tests with Gradle Managed Devices” দেখুন।

Gradle দিয়ে পরীক্ষা চালান

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

নিচের সারণিতে গ্রেডল (Gradle) ব্যবহার করে আপনার টেস্টগুলো কীভাবে চালাবেন তার একটি সংক্ষিপ্ত বিবরণ দেওয়া হলো:

সারণি ১. গ্রেডল দিয়ে আপনার টেস্টগুলো চালানোর বিভিন্ন উপায়

ইউনিট পরীক্ষার ধরণ চালানোর কমান্ড পরীক্ষার ফলাফলের অবস্থান
স্থানীয় ইউনিট পরীক্ষা test টাস্কটি চালান:

./gradlew test
এইচটিএমএল পরীক্ষার ফলাফল ফাইল:
path_to_your_project / module_name /build/reports/tests/ ডিরেক্টরি।

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

যন্ত্রসজ্জিত ইউনিট পরীক্ষা connectedAndroidTest টাস্কটি চালান:

./gradlew connectedAndroidTest
এইচটিএমএল পরীক্ষার ফলাফল ফাইল:
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

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

একটি মডিউলে পরীক্ষা চালান

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

./gradlew mylibrary:connectedAndroidTest

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

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

  • স্থানীয় ইউনিট পরীক্ষার জন্য:
    ./gradlew testVariantNameUnitTest
  • যন্ত্রচালিত পরীক্ষার জন্য:
    ./gradlew connectedVariantNameAndroidTest

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

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


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

adb দিয়ে পরীক্ষা চালান

When you run tests from the command line with Android Debug Bridge (adb) , there are more options for choosing the tests to run than with any other method. You can select individual test methods, filter tests according to a custom annotation, or specify testing options. Since the test run is controlled entirely from the command line, you can customize your testing with shell scripts in various ways.

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

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

একটি am instrument দিয়ে পরীক্ষা চালানোর জন্য:

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

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

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

    অ্যান্ড্রয়েড টেস্ট রানার ক্লাসটি সাধারণত AndroidJUnitRunner হয়ে থাকে।

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

আপনার পরীক্ষার ফলাফল STDOUT এ দেখা যাবে।

এএম যন্ত্রের পতাকা

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

সারণি ২. গুরুত্বপূর্ণ am instrument ফ্ল্যাগসমূহ

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

এএম যন্ত্রের বিকল্প

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

-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> টেস্ট অ্যাপ্লিকেশনের প্যাকেজগুলোর মধ্যে একটির সম্পূর্ণ জাভা প্যাকেজ নাম। যে কোনো টেস্ট কেস ক্লাস যা এই প্যাকেজ নামটি ব্যবহার করে, তা এক্সিকিউট করা হয়। লক্ষ্য করুন যে এটি কোনো অ্যান্ড্রয়েড প্যাকেজ নাম নয়; একটি টেস্ট প্যাকেজের একটিমাত্র অ্যান্ড্রয়েড প্যাকেজ নাম থাকে, কিন্তু এর ভেতরে একাধিক জাভা প্যাকেজ থাকতে পারে।
class <class_name> টেস্ট কেস ক্লাসগুলোর মধ্যে একটির পূর্ণাঙ্গ জাভা ক্লাসের নাম। শুধুমাত্র এই টেস্ট কেস ক্লাসটিই নির্বাহ করা হয়।
<class_name> # method name একটি পূর্ণাঙ্গ টেস্ট কেস ক্লাসের নাম এবং এর একটি মেথড। শুধুমাত্র এই মেথডটিই এক্সিকিউট করা হয়। ক্লাসের নাম এবং মেথডের নামের মাঝে হ্যাশ চিহ্ন (#) লক্ষ্য করুন।
func true InstrumentationTestCase এক্সটেন্ড করে এমন সমস্ত টেস্ট ক্লাস রান করে।
unit true সেই সমস্ত টেস্ট ক্লাস চালায় যেগুলো InstrumentationTestCase বা PerformanceTestCase কোনোটিকেই এক্সটেন্ড করে না
size [ small | medium | large ] সাইজ দ্বারা অ্যানোটেশন করা একটি টেস্ট মেথড রান করে। অ্যানোটেশনগুলো হলো @SmallTest , @MediumTest , এবং @LargeTest
perf true PerformanceTestCase ইমপ্লিমেন্ট করে এমন সমস্ত টেস্ট ক্লাস রান করে। এই অপশনটি ব্যবহার করার সময়, am instrument এর জন্য -r ফ্ল্যাগটি নির্দিষ্ট করুন, যাতে আউটপুটটি র ফরম্যাটে রাখা হয় এবং টেস্ট রেজাল্ট হিসেবে রিফরম্যাট না হয়।
debug true ডিবাগ মোডে পরীক্ষাগুলো চালায়।
log true নির্দিষ্ট করা সমস্ত টেস্ট লোড করে এবং লগ করে, কিন্তু সেগুলো চালায় না। টেস্টের তথ্য STDOUT এ দেখা যায়। অন্যান্য ফিল্টার এবং টেস্ট স্পেসিফিকেশনের সংমিশ্রণ যাচাই করতে এটি ব্যবহার করুন।
emma true Runs an EMMA code coverage analysis and writes the output to /data/<app_package>/coverage.ec on the device. To override the file location, use the coverageFile key that is described in the following entry.

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

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

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

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

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

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

  • টেস্ট প্যাকেজটির অ্যান্ড্রয়েড প্যাকেজ নেম হলো 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 ক্লাসের সমস্ত টেস্ট এবং TestClass2 এর testMethod3 মেথডটি রান করার জন্য, লিখুন:

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 রেফারেন্সে এর আরও ব্যবহার খুঁজে পেতে পারেন।

একীভূত পরীক্ষার প্রতিবেদন দেখুন

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

পূর্বশর্ত

  • অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৯.২.০-আলফা০৭ বা উচ্চতর সংস্করণ।

একীভূত পরীক্ষার প্রতিবেদন তৈরি করতে, নিম্নলিখিত কাজগুলোর মধ্যে একটি চালান:

প্রতিবেদনের পরিধি আদেশ বর্ণনা প্রতিবেদনের অবস্থান
বর্তমান মডিউল ./gradlew : module_name :createTestReport ইউনিট এবং ইনস্ট্রুমেন্টেড পরীক্ষার ফলাফল একত্রিত করে বর্তমান মডিউলের জন্য একটি সমন্বিত পরীক্ষা প্রতিবেদন তৈরি করে। path_to_your_project / module_name /build/reports/tests/test-report/
বর্তমান মডিউল এবং নির্ভরতা ./gradlew : module_name :createAggregatedTestReport বর্তমান অ্যাপ মডিউল এবং এর লাইব্রেরি নির্ভরতাগুলোর জন্য একটি সমন্বিত পরীক্ষা প্রতিবেদন তৈরি করে। path_to_your_project / module_name /build/reports/tests/aggregated-test-report/