فئة 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 التجريبي"
تسمح لك "أداة Android Test Orchestrator" بإجراء كل اختبار من اختبارات تطبيقك ضمن عملية استدعاء Instrumentation
الخاصة به. عند استخدام الإصدار 1.0 من AndroidJUnitRunner
أو الإصدارات الأحدث، يمكنك الوصول إلى Android Test Orchestrator.
تقدّم "أوركسترا اختبار Android" المزايا التالية لبيئة الاختبار:
- الحد الأدنى من الحالة المشتركة: يتم تشغيل كل اختبار في مثيل
Instrumentation
الخاص به. وبالتالي، إذا كانت اختباراتك تشارك حالة التطبيق، ستتم إزالة معظم هذه الحالة المشتركة من وحدة المعالجة المركزية (CPU) أو الذاكرة في جهازك بعد كل اختبار. لإزالة جميع الحالات المشتركة من وحدة المعالجة المركزية (CPU) والذاكرة في جهازك بعد كل اختبار، استخدِم العلامةclearPackageData
. للاطّلاع على مثال، راجِع القسم التفعيل من Gradle. - الأعطال معزولة: حتى في حال تعطُّل أحد الاختبارات، تتم إزالة
المثيل الخاص بها من
Instrumentation
فقط. وهذا يعني أنّ الاختبارات الأخرى في مجموعتك لا تزال قيد التشغيل، ما يوفّر نتائج اختبار كاملة.
وينتج عن هذا العزل زيادة محتملة في وقت تنفيذ الاختبار، إذ يعيد فريق "أوركسترا اختبار Android" إعادة تشغيل التطبيق بعد كل اختبار.
يكون تطبيق Android Test Orchestrator مثبتًا بشكل مسبق على كل من Android Studio وFirebase Test Lab، ولكن عليك تفعيل هذه الميزة في "استوديو Android".
التفعيل من Gradle
لتفعيل Android Test Orchestrator باستخدام أداة سطر أوامر Gradle، عليك إكمال الخطوات التالية:
- الخطوة 1: تعديل ملف Grale. أضف الإقرارات التالية إلى
ملف
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" من خلال إكمال الخطوات التالية:
- ضمِّن الحِزم اللازمة في ملف إصدار تطبيقك.
- يمكنك تفعيل Android Test Orchestrator من سطر الأوامر.
هندسة معمارية
يتم تخزين حزمة APK لخدمة الأوركسترا في عملية منفصلة عن حزمة APK التجريبية وحزمة APK للتطبيق قيد الاختبار:
![يسمح لك الأوركسترا بالتحكّم في اختبارات JUnit](https://developer.android.com/static/training/testing/instrumented-tests/androidx-test-libraries/orchestrator.png?authuser=6&hl=ar)
تجمع خدمة Android Test Orchestrator اختبارات JUnit في بداية تشغيل مجموعة
الاختبار، ولكنها تنفّذ كل اختبار بشكل منفصل في النسخة الخاصة بها من
Instrumentation
.
مزيد من المعلومات
للمزيد من المعلومات حول استخدام AndroidJUnitRunner، يُرجى الاطّلاع على مرجع واجهة برمجة التطبيقات.
مراجع إضافية
لمزيد من المعلومات حول استخدام AndroidJUnitRunner
، يُرجى الرجوع إلى الموارد التالية.
عيّنات
- AndroidJunitRunnerSample: يعرض التعليقات التوضيحية التجريبية والاختبارات المكوَّنة من معلَمات وإنشاء مجموعة الاختبار.