AndroidJUnitRunner
ক্লাস হল একটি JUnit টেস্ট রানার যা আপনাকে এসপ্রেসো , UI অটোমেটর এবং কম্পোজ টেস্টিং ফ্রেমওয়ার্কগুলি সহ Android ডিভাইসগুলিতে ইন্সট্রুমেন্টেড JUnit 4 পরীক্ষা চালাতে দেয়৷
টেস্ট রানার আপনার টেস্ট প্যাকেজ এবং অ্যাপটিকে একটি ডিভাইসে পরীক্ষার অধীনে লোড করা, আপনার পরীক্ষা চালানো এবং পরীক্ষার ফলাফল রিপোর্ট করা পরিচালনা করে।
এই পরীক্ষা রানার নিম্নলিখিত সহ বেশ কয়েকটি সাধারণ পরীক্ষার কাজগুলিকে সমর্থন করে:
JUnit পরীক্ষা লিখুন
নিম্নলিখিত কোড স্নিপেটটি দেখায় যে আপনি ChangeTextBehavior
ক্লাসে changeText
অপারেশন সঠিকভাবে কাজ করে তা যাচাই করার জন্য আপনি কীভাবে একটি যন্ত্রযুক্ত JUnit 4 পরীক্ষা লিখতে পারেন:
কোটলিন
@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
: প্রদত্ত স্তরের চেয়ে কম অ্যান্ড্রয়েড API স্তরে চালানো থেকে পরীক্ষাকে দমন করে। উদাহরণস্বরূপ, চলমান থেকে 23-এর কম সমস্ত API স্তরের পরীক্ষাগুলিকে দমন করতে,@SDKSuppress(minSdkVersion=23)
টীকাটি ব্যবহার করুন। -
@SmallTest
,@MediumTest
, এবং@LargeTest
: একটি পরীক্ষা চালানোর জন্য কতক্ষণ সময় লাগবে তা শ্রেণিবদ্ধ করুন এবং ফলস্বরূপ, আপনি কত ঘন ঘন পরীক্ষা চালাতে পারবেন।android.testInstrumentationRunnerArguments.size
প্রপার্টি সেট করে কোন পরীক্ষাগুলি চালানো হবে তা ফিল্টার করতে আপনি এই টীকাটি ব্যবহার করতে পারেন:
-Pandroid.testInstrumentationRunnerArguments.size=small
শার্ড পরীক্ষা
আপনি যদি আপনার পরীক্ষাগুলিকে সমান্তরাল করতে চান, সেগুলিকে একাধিক সার্ভারে ভাগ করে দ্রুত চালানোর জন্য, আপনি সেগুলিকে গোষ্ঠী বা শার্ডগুলিতে বিভক্ত করতে পারেন৷ টেস্ট রানার একটি একক টেস্ট স্যুটকে একাধিক শার্ডে বিভক্ত করতে সমর্থন করে, যাতে আপনি সহজেই একই শার্ডের সাথে একটি গ্রুপ হিসাবে একসাথে পরীক্ষা চালাতে পারেন। প্রতিটি শার্ড একটি সূচক নম্বর দ্বারা চিহ্নিত করা হয়। পরীক্ষা চালানোর সময়, তৈরি করার জন্য পৃথক শার্ডের সংখ্যা নির্দিষ্ট করতে -e numShards
বিকল্পটি ব্যবহার করুন এবং কোন শার্ড চালানো হবে তা নির্দিষ্ট করতে -e shardIndex
বিকল্পটি ব্যবহার করুন।
উদাহরণস্বরূপ, টেস্ট স্যুটটিকে 10টি শার্ডে বিভক্ত করতে এবং শুধুমাত্র দ্বিতীয় শার্ডে গোষ্ঠীভুক্ত পরীক্ষা চালানোর জন্য, নিম্নলিখিত adb কমান্ডটি ব্যবহার করুন:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর ব্যবহার করুন
অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর আপনাকে আপনার অ্যাপের প্রতিটি পরীক্ষা তার নিজস্ব Instrumentation
মধ্যে চালানোর অনুমতি দেয়। AndroidJUnitRunner সংস্করণ 1.0 বা উচ্চতর ব্যবহার করার সময়, আপনার Android টেস্ট অর্কেস্ট্রেটরে অ্যাক্সেস থাকবে।
অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর আপনার পরীক্ষার পরিবেশের জন্য নিম্নলিখিত সুবিধাগুলি অফার করে:
- ন্যূনতম ভাগ করা অবস্থা: প্রতিটি পরীক্ষা তার নিজস্ব
Instrumentation
উদাহরণে চলে। অতএব, যদি আপনার পরীক্ষাগুলি অ্যাপের স্থিতি ভাগ করে তবে সেই ভাগ করা অবস্থার বেশিরভাগই প্রতিটি পরীক্ষার পরে আপনার ডিভাইসের CPU বা মেমরি থেকে সরানো হয়। প্রতিটি পরীক্ষার পরে আপনার ডিভাইসের CPU এবং মেমরি থেকে সমস্ত ভাগ করা অবস্থা সরাতে,clearPackageData
পতাকা ব্যবহার করুন। উদাহরণের জন্য Gradle থেকে Enable বিভাগটি দেখুন। - ক্র্যাশগুলি বিচ্ছিন্ন হয়: এমনকি যদি একটি পরীক্ষা ক্র্যাশ হয়, তবে এটি কেবল তার নিজস্ব
Instrumentation
উদাহরণকে নিচে নিয়ে যায়। এর মানে হল যে আপনার স্যুটের অন্যান্য পরীক্ষাগুলি এখনও চলছে, সম্পূর্ণ পরীক্ষার ফলাফল প্রদান করে।
এই বিচ্ছিন্নতার ফলে পরীক্ষা সম্পাদনের সময় সম্ভাব্য বৃদ্ধি পায় কারণ অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর প্রতিটি পরীক্ষার পরে অ্যাপ্লিকেশনটি পুনরায় চালু করে৷
অ্যান্ড্রয়েড স্টুডিও এবং ফায়ারবেস টেস্ট ল্যাব উভয়েই অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর আগে থেকে ইনস্টল করা আছে, যদিও আপনাকে অ্যান্ড্রয়েড স্টুডিওতে বৈশিষ্ট্যটি সক্ষম করতে হবে।
Gradle থেকে সক্ষম করুন
গ্রেডল কমান্ড-লাইন টুল ব্যবহার করে অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর সক্ষম করতে, এই পদক্ষেপগুলি সম্পূর্ণ করুন:
- ধাপ 1 : গ্রেডল ফাইল পরিবর্তন করুন। আপনার প্রকল্পের
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'
}
- ধাপ 2 : নিম্নলিখিত কমান্ডটি কার্যকর করে অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর চালান:
./gradlew connectedCheck
অ্যান্ড্রয়েড স্টুডিও থেকে সক্ষম করুন
অ্যান্ড্রয়েড স্টুডিওতে অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর সক্ষম করতে, আপনার অ্যাপের build.gradle
ফাইলে Enable from Gradle এ দেখানো বিবৃতি যোগ করুন।
কমান্ড লাইন থেকে সক্ষম করুন
কমান্ড লাইনে অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর ব্যবহার করতে, একটি টার্মিনাল উইন্ডোতে নিম্নলিখিত কমান্ডগুলি চালান:
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'
কমান্ড সিনট্যাক্স দেখায়, আপনি অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর ইনস্টল করুন, তারপর এটি সরাসরি ব্যবহার করুন।
adb shell pm list instrumentation
বিভিন্ন টুলচেইন ব্যবহার করে
আপনি যদি আপনার অ্যাপ পরীক্ষা করার জন্য একটি ভিন্ন টুলচেন ব্যবহার করেন, তাহলেও আপনি নিম্নলিখিত ধাপগুলি সম্পূর্ণ করে Android টেস্ট অর্কেস্ট্রেটর ব্যবহার করতে পারেন:
- আপনার অ্যাপের বিল্ড ফাইলে প্রয়োজনীয় প্যাকেজগুলি অন্তর্ভুক্ত করুন।
- কমান্ড লাইন থেকে অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর সক্ষম করুন৷
স্থাপত্য
অর্কেস্ট্রেটর পরিষেবা APK একটি প্রক্রিয়ার মধ্যে সংরক্ষণ করা হয় যা পরীক্ষার APK এবং পরীক্ষার অধীনে অ্যাপের APK থেকে পৃথক:
অ্যান্ড্রয়েড টেস্ট অর্কেস্ট্রেটর আপনার টেস্ট স্যুট চালানোর শুরুতে JUnit পরীক্ষাগুলি সংগ্রহ করে, কিন্তু তারপরে এটি প্রতিটি পরীক্ষা আলাদাভাবে সম্পাদন করে, তার নিজস্ব Instrumentation
।
আরও তথ্য
AndroidJUnitRunner ব্যবহার সম্পর্কে আরও জানতে, API রেফারেন্স দেখুন।
অতিরিক্ত সম্পদ
AndroidJUnitRunner
ব্যবহার সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত সংস্থানগুলি দেখুন৷
নমুনা
- AndroidJunitRunnerSample : পরীক্ষার টীকা, প্যারামিটারাইজড পরীক্ষা এবং টেস্ট স্যুট তৈরির প্রদর্শন করে।