مشغّل AndroidJUnitRunner

فئة 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" من خلال إكمال الخطوات التالية:

  1. ضمِّن الحِزم اللازمة في ملف إصدار تطبيقك.
  2. يمكنك تفعيل Android Test Orchestrator من سطر الأوامر.

هندسة معمارية

يتم تخزين حزمة APK لخدمة الأوركسترا في عملية منفصلة عن حزمة APK التجريبية وحزمة APK للتطبيق قيد الاختبار:

يسمح لك الأوركسترا بالتحكّم في اختبارات JUnit
الشكل 1: بنية حزمة APK لتنفيذ اختبار Android.

تجمع خدمة Android Test Orchestrator اختبارات JUnit في بداية تشغيل مجموعة الاختبار، ولكنها تنفّذ كل اختبار بشكل منفصل في النسخة الخاصة بها من Instrumentation.

مزيد من المعلومات

للمزيد من المعلومات حول استخدام AndroidJUnitRunner، يُرجى الاطّلاع على مرجع واجهة برمجة التطبيقات.

مراجع إضافية

لمزيد من المعلومات حول استخدام AndroidJUnitRunner، يُرجى الرجوع إلى الموارد التالية.

عيّنات

  • AndroidJunitRunnerSample: يعرض التعليقات التوضيحية التجريبية والاختبارات المكوَّنة من معلَمات وإنشاء مجموعة الاختبار.