مشغّل 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 ActivityTestRuleM<ainActivity;> 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 من خلال إكمال الخطوات التالية:

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

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

يتم تخزين حزمة APK لخدمة Orchestrator في عملية منفصلة عن اختبار APK وحِزمة APK للتطبيق قيد الاختبار:

يتيح لك المنظّم بالتحكّم في اختبارات JUnit.
الشكل 1: بنية APK لنظام Android Test Orchestration.

يجمع برنامج Android Test Orchestrator اختبارات JUnit في بداية الاختبار تشغيل حزمة SDK، ولكنها تنفذ كل اختبار على حدة، في حالتها الخاصة Instrumentation

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

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

مصادر إضافية

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

نماذج

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