AndroidJUnitRunner ক্লাস হল একটি JUnit টেস্ট রানার যা
আপনাকে Android ডিভাইসে ইনস্ট্রুমেন্টেড JUnit 4 টেস্ট চালাতে দেয়,
যার মধ্যে Espresso, UI Automator এবং Compose
টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করা হয়।
টেস্ট রানার আপনার টেস্ট প্যাকেজ এবং ডিভাইসে টেস্ট করা হচ্ছে এমন অ্যাপ লোড করা, আপনার টেস্ট রান করা এবং টেস্টের ফলাফল রিপোর্ট করার কাজ ম্যানেজ করে।
এই টেস্ট রানার বেশ কিছু সাধারণ টেস্টিং টাস্ক সাপোর্ট করে, যার মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:
JUnit টেস্ট লিখুন
নিচের কোড স্নিপেট থেকে আপনি জানতে পারবেন যে ChangeTextBehavior ক্লাসে changeText অপারেশন সঠিকভাবে কাজ করছে কিনা তা যাচাই করার জন্য কীভাবে ইনস্ট্রুমেন্টেড JUnit 4 টেস্ট লিখতে হয়:
Kotlin
@RunWith(AndroidJUnit4::class) @LargeTest // Optional runner annotation class ChangeTextBehaviorTest { val stringToBeTyped = "Espresso" // ActivityTestRule accesses context through the runner @get:Rule val activityRule = ActivityTestRule(MainActivity::class.java) @Test fun changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()) onView(withId(R.id.changeTextBt)).perform(click()) // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))) } }
জাভা
@RunWith(AndroidJUnit4.class) @LargeTest // Optional runner annotation public class ChangeTextBehaviorTest { private static final String stringToBeTyped = "Espresso"; @Rule public ActivityTestRule<MainActivity>; activityRule = new ActivityTestRule<>;(MainActivity.class); @Test public void changeText_sameActivity() { // Type text and then press the button. onView(withId(R.id.editTextUserInput)) .perform(typeText(stringToBeTyped), closeSoftKeyboard()); onView(withId(R.id.changeTextBt)).perform(click()); // Check that the text was changed. onView(withId(R.id.textToBeChanged)) .check(matches(withText(stringToBeTyped))); } }
অ্যাপ্লিকেশনের কন্টেক্সট অ্যাক্সেস করা
আপনার টেস্ট রান করার জন্য AndroidJUnitRunner ব্যবহার করলে, আপনি স্ট্যাটিক ApplicationProvider.getApplicationContext() মেথড কল করে টেস্টের অধীনে থাকা অ্যাপের জন্য কনটেক্সট অ্যাক্সেস করতে পারবেন। আপনি যদি নিজের অ্যাপে Application-এর কাস্টম
সাবক্লাস তৈরি করে থাকেন, তাহলে এই পদ্ধতি আপনার কাস্টম
সাবক্লাসের কন্টেক্সট ফিরিয়ে দেয়।
আপনি টুল ইমপ্লিমেন্টার হলে, InstrumentationRegistry ক্লাস ব্যবহার করে লো-লেভেল টেস্টিং API অ্যাক্সেস করতে পারবেন। এই ক্লাসে
Instrumentation অবজেক্ট, টার্গেট অ্যাপ Context অবজেক্ট, টেস্ট
অ্যাপ Context অবজেক্ট এবং আপনার টেস্টে পাস করা কমান্ড লাইন আর্গুমেন্ট অন্তর্ভুক্ত থাকে।
টেস্ট ফিল্টার করুন
আপনার JUnit 4.x টেস্টে, টেস্ট রান কনফিগার করতে আপনি অ্যানোটেশন ব্যবহার করতে পারবেন। এই ফিচার আপনার টেস্টে বয়লারপ্লেট ও কন্ডিশনাল কোড যোগ করার প্রয়োজনীয়তা কম করে। JUnit 4-এ কাজ করে এমন স্ট্যান্ডার্ড অ্যানোটেশন ছাড়াও, টেস্ট রানার Android-নির্দিষ্ট অ্যানোটেশনে কাজ করে, যার মধ্যে নিম্নলিখিতগুলি অন্তর্ভুক্ত:
@RequiresDevice: উল্লেখ করে যে টেস্টটি শুধুমাত্র ফিজিক্যাল ডিভাইসে রান করা উচিত, এমুলেটরে নয়।@SdkSuppress: প্রদত্ত লেভেলের চেয়ে কম Android API লেভেলে টেস্ট রান করা বন্ধ করে। যেমন, ২৩-এর কম API লেভেলে টেস্ট রান করা বন্ধ করতে,@SDKSuppress(minSdkVersion=23)অ্যানোটেশন ব্যবহার করুন।@SmallTest,@MediumTest, এবং@LargeTest: একটি টেস্ট রান করতে কতক্ষণ সময় লাগা উচিত এবং ফলস্বরূপ, আপনি কত ঘন ঘন টেস্ট রান করতে পারবেন তা শ্রেণীবদ্ধ করুন। কোন টেস্ট রান করতে হবে তা ফিল্টার করতে আপনি এই অ্যানোটেশন ব্যবহার করতে পারেন,android.testInstrumentationRunnerArguments.sizeপ্রপার্টি সেট করা:
-Pandroid.testInstrumentationRunnerArguments.size=small
শার্ড টেস্ট
আপনার টেস্টের এক্সিকিউশন প্যারালালাইজ করতে হলে, একাধিক সার্ভার জুড়ে সেগুলি শেয়ার করে
আরও দ্রুত রান করাতে, আপনি সেগুলিকে গ্রুপে বা
শার্ডে ভাগ করতে পারেন। টেস্ট রানার একটি টেস্ট স্যুটকে একাধিক শার্ডে বিভক্ত করতে সাহায্য করে, যাতে আপনি সহজেই একই শার্ডের অন্তর্গত টেস্টগুলি একসাথে একটি গ্রুপ হিসেবে চালাতে পারেন। প্রতিটি শার্ড একটি ইন্ডেক্স নম্বর দ্বারা শনাক্ত করা হয়। টেস্ট চালানোর সময়, -e numShards বিকল্প ব্যবহার করে কতগুলি আলাদা শার্ড তৈরি করতে হবে তা উল্লেখ করুন এবং
-e shardIndex বিকল্প ব্যবহার করে কোন শার্ড চালাতে হবে তা উল্লেখ করুন।
যেমন, টেস্ট স্যুটকে ১০টি শার্ডে ভাগ করতে এবং শুধুমাত্র দ্বিতীয় শার্ডে গ্রুপ করা টেস্ট রান করতে, নিম্নলিখিত adb কমান্ড ব্যবহার করুন:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
Android Test Orchestrator ব্যবহার করা
Android Test Orchestrator আপনাকে নিজের অ্যাপের প্রতিটি টেস্ট Instrumentation-এর নিজস্ব ইনভোকেশনের
মধ্যে চালাতে দেয়। AndroidJUnitRunner ভার্সন 1.0 বা তার পরবর্তী ভার্সন ব্যবহার করার সময়, আপনার কাছে Android Test Orchestrator-এর অ্যাক্সেস থাকে।
Android Test Orchestrator আপনার টেস্টিং এনভায়রনমেন্টের জন্য নিম্নলিখিত সুবিধা অফার করে:
- ন্যূনতম শেয়ার করা স্টেট: প্রতিটি টেস্ট তার নিজস্ব
Instrumentationইনস্ট্যান্সে রান করে। তাই, আপনার টেস্ট যদি অ্যাপের স্টেট শেয়ার করে, তাহলে সেই শেয়ার করা স্টেটের বেশিরভাগ অংশই প্রতিটি টেস্টের পরে আপনার ডিভাইসের সিপিইউ বা মেমরি থেকে মুছে ফেলা হয়। প্রতিটি টেস্টের পরে আপনার ডিভাইসের CPU এবং মেমরি থেকে সব শেয়ার করা স্টেট সরাতে,clearPackageDataফ্ল্যাগ ব্যবহার করুন। উদাহরণ দেখতে Gradle থেকে চালু করুন বিভাগ দেখুন। - ক্র্যাশ আলাদা করা হয়: কোনও একটি টেস্ট ক্র্যাশ করলেও, এটি শুধুমাত্র
Instrumentation-এর নিজস্ব ইনস্ট্যান্স বন্ধ করে দেয়। এর অর্থ হল, আপনার সুইটের অন্যান্য পরীক্ষা এখনও চলছে, যা সম্পূর্ণ পরীক্ষার ফলাফল প্রদান করে।
এই আইসোলেশনের ফলে টেস্ট এক্সিকিউশন টাইম বেড়ে যেতে পারে কারণ Android Test Orchestrator প্রতিটি টেস্টের পরে অ্যাপ্লিকেশন রিস্টার্ট করে।
Android Studio এবং Firebase Test Lab, দুটিতেই Android Test Orchestrator আগে থেকে ইনস্টল করা থাকে, তবে আপনাকে Android Studio-তে ফিচারটি চালু করতে হবে।
Gradle থেকে চালু করুন
Gradle কমান্ড-লাইন টুল ব্যবহার করে Android Test Orchestrator চালু করতে, এইসব ধাপ সম্পূর্ণ করুন:
- ধাপ ১: Gradle ফাইল পরিবর্তন করুন। আপনার প্রোজেক্টের
build.gradleফাইলে নিম্নলিখিত স্টেটমেন্ট যোগ করুন:
android {
defaultConfig {
...
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
}
dependencies {
androidTestImplementation 'androidx.test:runner:1.1.0'
androidTestUtil 'androidx.test:orchestrator:1.1.0'
}
- ধাপ ২: নিম্নলিখিত কমান্ড এক্সিকিউট করে Android Test Orchestrator রান করুন:
./gradlew connectedCheck
Android Studio থেকে চালু করুন
Android Studio-তে Android Test Orchestrator চালু করতে, Gradle থেকে চালু করুন বিকল্পে দেখানো স্টেটমেন্টগুলি
আপনার অ্যাপের build.gradle ফাইলে যোগ করুন।
কমান্ড লাইন থেকে চালু করুন
কমান্ড লাইনে Android Test Orchestrator ব্যবহার করতে, টার্মিনাল উইন্ডোতে এই কমান্ডগুলি রান করুন:
DEVICE_API_LEVEL=$(adb shell getprop ro.build.version.sdk)
FORCE_QUERYABLE_OPTION=""
if [[ $DEVICE_API_LEVEL -ge 30 ]]; then
FORCE_QUERYABLE_OPTION="--force-queryable"
fi
# uninstall old versions
adb uninstall androidx.test.services
adb uninstall androidx.test.orchestrator
# Install the test orchestrator.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/orchestrator/1.4.2/orchestrator-1.4.2.apk
# Install test services.
adb install $FORCE_QUERYABLE_OPTION -r path/to/m2repository/androidx/test/services/test-services/1.4.2/test-services-1.4.2.apk
# Replace "com.example.test" with the name of the package containing your tests.
# Add "-e clearPackageData true" to clear your app's data in between runs.
adb shell 'CLASSPATH=$(pm path androidx.test.services) app_process / \
androidx.test.services.shellexecutor.ShellMain am instrument -w -e \
targetInstrumentation com.example.test/androidx.test.runner.AndroidJUnitRunner \
androidx.test.orchestrator/.AndroidTestOrchestrator'
কমান্ড সিনট্যাক্স অনুযায়ী, আপনি Android Test Orchestrator ইনস্টল করে সরাসরি ব্যবহার করতে পারবেন।
adb shell pm list instrumentation
বিভিন্ন টুলচেন ব্যবহার করা
আপনার অ্যাপ পরীক্ষা করার জন্য আপনি অন্য টুলচেন ব্যবহার করলে, নিম্নলিখিত ধাপগুলি সম্পূর্ণ করে আপনি এখনও Android Test Orchestrator ব্যবহার করতে পারবেন:
- আপনার অ্যাপের বিল্ড ফাইলে প্রয়োজনীয় প্যাকেজ অন্তর্ভুক্ত করুন।
- কমান্ড-লাইন থেকে Android Test Orchestrator চালু করুন।
স্থাপত্যশিল্প
Orchestrator পরিষেবা APK এমন একটি প্রসেসে স্টোর করা হয় যা টেস্ট APK এবং টেস্ট করা হচ্ছে এমন অ্যাপের APK থেকে আলাদা:
Android Test Orchestrator আপনার টেস্ট স্যুট রান করার শুরুতে JUnit টেস্ট সংগ্রহ করে, কিন্তু তারপর এটি প্রতিটি টেস্ট আলাদাভাবে, Instrumentation-এর নিজস্ব ইনস্ট্যান্সে এক্সিকিউট করে।
আরও তথ্য
AndroidJUnitRunner ব্যবহার করার ব্যাপারে আরও জানতে, API রেফারেন্স দেখুন।
অতিরিক্ত রিসোর্স
AndroidJUnitRunner ব্যবহার করার ব্যাপারে আরও তথ্যের জন্য, নিম্নলিখিত রিসোর্স
দেখুন।
নমুনা
- AndroidJunitRunnerSample: টেস্ট অ্যানোটেশন, প্যারামিটারাইজড টেস্ট ও টেস্ট স্যুট তৈরি করা দেখায়।