الفئة AndroidJUnitRunner
هي عبارة عن مشغِّل اختبار JUnit
إجراء اختبارات آلية على JUnit 4 على أجهزة Android
بما في ذلك المستخدمون الذين يستخدمون Espresso وUI Automator وCompose
وأطر الاختبار.
تعمل وحدة تشغيل الاختبار على تحميل حزمة الاختبار والتطبيق قيد الاختبار جهازك وإجراء اختباراتك والإبلاغ عن نتائج الاختبارات.
يدعم برنامج تشغيل الاختبار هذا العديد من مهام الاختبار الشائعة، بما في ذلك ما يلي:
كتابة اختبارات JUnit
يوضح مقتطف الرمز التالي كيفية كتابة أداة JUnit 4 أداة
للتحقّق من أنّ عملية changeText
في ChangeTextBehavior
الفئة تعمل بشكل صحيح:
Kotlin
@RunWith(AndroidJUnit4::class) // Only needed when mixing JUnit 3 and 4 tests @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))) } }
Java
@RunWith(AndroidJUnit4.class) // Only needed when mixing JUnit 3 and 4 tests @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
). تتضمن هذه الفئة الفئة
Instrumentation
، الكائن المستهدف Context
، الاختبار
للتطبيق Context
، ووسيطات سطر الأوامر التي تم تمريرها إلى الاختبار.
فلترة الاختبارات
في اختبارات JUnit 4.x، يمكنك استخدام التعليقات التوضيحية لضبط عملية إجراء الاختبار. هذا النمط إلى تقليل الحاجة إلى إضافة رمز نموذجي وشرطي في الاختبار. بالإضافة إلى التعليقات التوضيحية القياسية التي تدعمها JUnit 4، يمكن اختبار يتوافق مع التعليقات التوضيحية الخاصة بنظام التشغيل Android، بما في ذلك التالي:
@RequiresDevice
: للإشارة إلى أنّ الاختبار يجب أن يُجري على الأجهزة وليس على المحاكيات.@SdkSuppress
: لمنع الاختبار من التنفيذ على واجهة برمجة تطبيقات Android أقل المستوى عن المستوى المحدد. على سبيل المثال، لمنع الاختبارات على جميع مستويات واجهة برمجة التطبيقات الأدنى التعليقات التوضيحية التي تتجاوز 23 من التشغيل،@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
استخدام Android Test Orchestrator
يسمح لك Android Test Orchestrator بإجراء جميع اختبارات التطبيق ضمن
استدعاء خاص لـ Instrumentation
. عند استخدام الإصدار 1.0 من AndroidJUnitRunner
أو أعلى، يمكنك الوصول إلى Android Test Orchestrator.
يقدِّم برنامج Android Test Orchestrator المزايا التالية للاختبار البيئة:
- الحدّ الأدنى من حالة المشاركة: يتم إجراء كل اختبار في
Instrumentation
الخاص به. مثال. وبالتالي، إذا كانت اختباراتك تشارك حالة التطبيق، سيكون معظم تلك الحالة المشتركة من وحدة المعالجة المركزية (CPU) للجهاز أو ذاكرة الجهاز بعد كل اختبار. لإزالة جميع الحالات المشتركة من وحدة المعالجة المركزية (CPU) والذاكرة في جهازك بعد كل حالة: الاختبار، فاستخدم العلامةclearPackageData
. اطّلِع على زر التفعيل من Gradle. للحصول على مثال. - الأعطال يتم عزلها: حتى إذا تعطّل أحد الاختبارات، فإنه يزيل
المثيل الخاص لـ
Instrumentation
. هذا يعني أن الاختبارات الأخرى في استمرار تشغيل مجموعتك، ما يوفر نتائج اختبار كاملة.
ينتج عن هذا العزل زيادة محتملة في وقت تنفيذ الاختبار يعيد برنامج Android Test Orchestrator تشغيل التطبيق بعد كل اختبار.
ينسّق كل من "استوديو Android" وFirebase Test Lab عددًا من خبراء تنظيم الاختبار على Android. "مثبتة مسبقًا"، إلا أنه يجب عليك تمكين الميزة في Android الاستوديو.
التفعيل من Gradle
لتفعيل برنامج Android Test Orchestrator باستخدام أداة سطر الأوامر Gradle، يُرجى إكمال الخطوات التالية:
- الخطوة 1: تعديل ملف 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'
}
- الخطوة 2: شغِّل تطبيق Android Test Orchestrator من خلال تنفيذ الأمر التالي:
./gradlew connectedCheck
التفعيل من "استوديو Android"
لتفعيل برنامج Android Test Orchestrator في "استوديو Android"، أضِف العبارات المعروضة
في التفعيل من 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 من سطر الأوامر.
هندسة معمارية
يتم تخزين حزمة APK لخدمة Orchestrator في عملية منفصلة عن اختبار APK وحِزمة APK للتطبيق قيد الاختبار:
يجمع برنامج Android Test Orchestrator اختبارات JUnit في بداية الاختبار
تشغيل حزمة SDK، ولكنها تنفذ كل اختبار على حدة، في حالتها الخاصة
Instrumentation
مزيد من المعلومات
لمزيد من المعلومات عن استخدام AndroidJUnitRunner، يمكنك الاطّلاع على مرجع واجهة برمجة التطبيقات.
مصادر إضافية
لمزيد من المعلومات عن استخدام "AndroidJUnitRunner
"، يُرجى الرجوع إلى ما يلي:
الموارد.
نماذج
- AndroidJunitRunnerSample: يعرض التعليقات التوضيحية التجريبية، وإجراء اختبارات ذات معلمات وإنشاء مجموعة اختبارية.