إسبريسو متعدد العمليات

مع توسّع تطبيقك، قد تجد أنّه من المفيد وضع بعض مكوّنات تطبيقك في عملية أخرى غير العملية الرئيسية لتطبيقك. لاختبار مكوّنات التطبيق في هذه العمليات غير التلقائية، يمكنك استخدام وظيفة Multiprocess Espresso. تتيح لك هذه الأداة، المتوفّرة على الإصدار 8.0 من نظام التشغيل Android (المستوى 26 من واجهة برمجة التطبيقات) والإصدارات الأحدث، اختبار تفاعلات واجهة المستخدم في تطبيقك بسلاسة والتي تتجاوز حدود عملية تطبيقك مع الحفاظ على ضمانات المزامنة في Espresso.

عند استخدام Multiprocess Espresso، يجب مراعاة ما يلي بشأن تحديد الإصدار والنطاق:

  • يجب أن يستهدف تطبيقك الإصدار 8.0 من نظام التشغيل Android (المستوى 26 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث.
  • لا يمكن للأداة اختبار مكوّنات التطبيق التي تضمّنها في العمليات ضمن حزمة تطبيقك. ولا يمكنها اختبار العمليات الخارجية.

استخدام الأداة

لاختبار عملية داخل تطبيقك باستخدام Multiprocess Espresso، أضِف مرجعًا إلى العنصر espresso-remote في ملف build.gradle الخاص بتطبيقك:

app/build.gradle

Groovy

dependencies {
    ...
    androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1'
}

Kotlin

dependencies {
    ...
    androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1')
}

عليك أيضًا إضافة ما يلي إلى androidTest بيان تطبيقك:

  • تمثّل هذه السمة عنصر <instrumentation> يحدّد العملية.
  • عنصر <meta-data> يشير إلى أنّك تريد استخدام Multiprocess Espresso.

يوضّح مقتطف الرمز التالي كيفية إضافة هذه العناصر:

src/androidTest/AndroidManifest.xml

<manifest ... package="androidx.test.mytestapp.tests">
  <uses-sdk android:targetSdkVersion="27" android:minSdkVersion="14" />
  <instrumentation
    android:name="androidx.test.runner.AndroidJUnitRunner"
    android:targetPackage="androidx.test.mytestapp"
    android:targetProcesses="*">
    <meta-data
      android:name="remoteMethod"
      android:value="androidx.test.espresso.remote.EspressoRemote#remoteInit" />
  </instrumentation>
</manifest>

يشير المقتطف السابق إلى إطار عمل Android بأنّك تريد اختبار كل عملية في حزمة تطبيقك. إذا أردت اختبار مجموعة فرعية فقط من عمليات تطبيقك، يمكنك تحديد قائمة مفصولة بفواصل ضمن العنصر targetProcesses بدلاً من ذلك:

<instrumentation
    ...
    android:targetProcesses=
            "androidx.test.mytestapp:myFirstAppProcessToTest,
             androidx.test.mytestapp:mySecondAppProcessToTest" ... />

فهم بنية الأداة

عند اختبار تطبيقك وتشغيل عمليته التلقائية، قد تنفّذ تفاعلاً مع واجهة المستخدم، مثل الضغط على زر، ما يؤدي إلى بدء نشاط في عملية ثانوية. بعد ذلك، يُكمل النظام الخطوات التالية لتفعيل الاختبارات التي تجري على مستوى عمليات متعددة باستخدام Espresso:

  1. ينشئ إطار عمل Android عملية جديدة ويبدأها لتتبُّع البنية التنقّلية لتطبيقك. يتضمّن كل إجراء Instrumentation نسخة جديدة من AndroidJUnitRunner. في هذه المرحلة، لا يمكن لعمليتَي قياس الأداء التواصل مع بعضهما البعض.
  2. تسجّل كل نسخة من AndroidJUnitRunner Espresso كإطار عمل للاختبار.
  3. تجري النسختان من AndroidJUnitRunner عملية تبادل تأكيد الاتصال لإنشاء اتصال بينهما. في الوقت نفسه، يربط كل مثيل من AndroidJUnitRunner جميع العملاء المسجّلين، مثل Espresso، بنظرائهم في العمليات الأخرى، ما يتيح لهؤلاء العملاء إنشاء قناة اتصال مباشرة بينهم.
  4. يستمر كل AndroidJUnitRunner مثيل في البحث عن مثيلات أدوات القياس وعملاء إطار عمل الاختبار المضافة حديثًا، وإنشاء قنوات اتصال إضافية حسب الحاجة.

يوضّح الشكل 1 نتيجة هذه العملية:

الشكل 1. إعداد اتصال بين عمليات أدوات متعددة باستخدام Multiprocess Espresso

مراجع إضافية

لمزيد من المعلومات حول هذا الموضوع، يُرجى الاطّلاع على المراجع التالية.