এই ডকুমেন্টটিতে বর্ণনা করা হয়েছে কীভাবে সরাসরি কমান্ড লাইন থেকে টেস্ট চালানো যায়। এই ডকুমেন্টটি ধরে নেয় যে আপনি ইতিমধ্যেই একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করতে এবং আপনার অ্যাপের জন্য টেস্ট লিখতে জানেন। আপনার অ্যাপের জন্য কীভাবে টেস্ট তৈরি করবেন সে সম্পর্কে আরও তথ্যের জন্য, "অ্যান্ড্রয়েডে অ্যাপ পরীক্ষা করুন" দেখুন।
যখন আপনি গ্রেডল বিল্ড সিস্টেম ব্যবহার করে আপনার অ্যাপ বিল্ড করেন, তখন অ্যান্ড্রয়েড গ্রেডল প্লাগইন আপনাকে কমান্ড লাইন ব্যবহার করে আপনার গ্রেডল প্রজেক্ট থেকে টেস্ট চালানোর সুযোগ দেয়। আরও সূক্ষ্ম নিয়ন্ত্রণের জন্য, আপনি অ্যান্ড্রয়েড ডিবাগ ব্রিজ (adb) শেলের মাধ্যমে আপনার টেস্টগুলো চালানোর বিকল্পটি বেছে নিতে পারেন। কন্টিনিউয়াস ইন্টিগ্রেশন পরিবেশে টেস্ট চালানোর ক্ষেত্রে এটি বেশ কার্যকর হতে পারে।
Gradle দ্বারা পরিচালিত ভার্চুয়াল ডিভাইস ব্যবহার করে কমান্ড লাইন থেকে কীভাবে স্বয়ংক্রিয় ইনস্ট্রুমেন্টেড টেস্ট চালানো যায় তা জানতে, “Scale your tests with Gradle Managed Devices” দেখুন।
Gradle দিয়ে পরীক্ষা চালান
অ্যান্ড্রয়েড গ্র্যাডল প্লাগইন আপনাকে কমান্ড লাইন ব্যবহার করে আপনার গ্র্যাডল প্রজেক্ট থেকে টেস্ট চালানোর সুযোগ দেয়।
নিচের সারণিতে গ্রেডল (Gradle) ব্যবহার করে আপনার টেস্টগুলো কীভাবে চালাবেন তার একটি সংক্ষিপ্ত বিবরণ দেওয়া হলো:
সারণি ১. গ্রেডল দিয়ে আপনার টেস্টগুলো চালানোর বিভিন্ন উপায়
| ইউনিট পরীক্ষার ধরণ | চালানোর কমান্ড | পরীক্ষার ফলাফলের অবস্থান |
|---|---|---|
| স্থানীয় ইউনিট পরীক্ষা | test টাস্কটি চালান: | এইচটিএমএল পরীক্ষার ফলাফল ফাইল:path_to_your_project / module_name /build/reports/tests/ ডিরেক্টরি। XML পরীক্ষার ফলাফল ফাইল: |
| যন্ত্রসজ্জিত ইউনিট পরীক্ষা | connectedAndroidTest টাস্কটি চালান: | এইচটিএমএল পরীক্ষার ফলাফল ফাইল:path_to_your_project / module_name /build/reports/androidTests/connected/ ডিরেক্টরি। XML পরীক্ষার ফলাফল ফাইল: |
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 দিয়ে পরীক্ষা চালান
অ্যান্ড্রয়েড ডিবাগ ব্রিজ (adb) ব্যবহার করে কমান্ড লাইন থেকে টেস্ট চালানোর সময়, অন্য যেকোনো পদ্ধতির চেয়ে টেস্ট বেছে নেওয়ার জন্য আরও বেশি বিকল্প থাকে। আপনি স্বতন্ত্র টেস্ট মেথড নির্বাচন করতে পারেন, একটি কাস্টম অ্যানোটেশন অনুযায়ী টেস্ট ফিল্টার করতে পারেন, অথবা টেস্টিং অপশন নির্দিষ্ট করে দিতে পারেন। যেহেতু টেস্ট রান সম্পূর্ণরূপে কমান্ড লাইন থেকে নিয়ন্ত্রিত হয়, তাই আপনি বিভিন্ন উপায়ে শেল স্ক্রিপ্ট ব্যবহার করে আপনার টেস্টিং কাস্টমাইজ করতে পারেন।
কমান্ড লাইন থেকে কোনো টেস্ট চালানোর জন্য, আপনার ডিভাইস বা এমুলেটরে একটি কমান্ড-লাইন শেল চালু করতে adb shell চালান। সেই শেলের ভেতরে আপনি am কমান্ড ব্যবহার করে অ্যাক্টিভিটি ম্যানেজারের সাথে ইন্টারঅ্যাক্ট করতে পারবেন এবং এর instrument সাবকমান্ড ব্যবহার করে আপনার টেস্টগুলো চালাতে পারবেন।
একটি শর্টকাট হিসেবে, আপনি একটিমাত্র ইনপুট লাইনেই adb শেল চালু করতে, am instrument কল করতে এবং কমান্ড-লাইন ফ্ল্যাগ নির্দিষ্ট করতে পারেন। শেলটি ডিভাইস বা এমুলেটরে খোলে, আপনার পরীক্ষাগুলো চালায়, আউটপুট তৈরি করে এবং তারপর আপনার কম্পিউটারের কমান্ড লাইনে ফিরে আসে।
একটি am instrument দিয়ে পরীক্ষা চালানোর জন্য:
- আপনার মূল অ্যাপ্লিকেশন এবং টেস্ট প্যাকেজটি বিল্ড বা রি-বিল্ড করুন।
- আপনার টেস্ট প্যাকেজ এবং মূল অ্যাপ্লিকেশন অ্যান্ড্রয়েড প্যাকেজ ফাইলগুলো (এপিকে ফাইল) আপনার বর্তমান অ্যান্ড্রয়েড ডিভাইস বা এমুলেটরে ইনস্টল করুন ।
কমান্ড লাইনে লিখুন:
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 | (কিছুই না) | হিডেন এপিআই (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 | একটি EMMA কোড কভারেজ বিশ্লেষণ চালায় এবং এর আউটপুট ডিভাইসের /data/<app_package>/coverage.ec এ লিখে রাখে। ফাইলের অবস্থান পরিবর্তন করতে, নিম্নলিখিত এন্ট্রিতে বর্ণিত coverageFile কী-টি ব্যবহার করুন। দ্রষ্টব্য: এই বিকল্পটির জন্য টেস্ট অ্যাপ্লিকেশনটির একটি EMMA-ইনস্ট্রুমেন্টেড বিল্ড প্রয়োজন, যা আপনি |
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/ |