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

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

عند استخدام قهوة الإسبريسو متعدد العمليات، يُرجى مراعاة الاعتبارات التالية المتعلقة بتحديد الإصدارات والنطاق:

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

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

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

app/build.grale

رائع

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

Kotlin

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

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

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

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

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" ... />

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

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

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

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

الشكل 1. التواصل بين عمليات متعددة من عمليات قياس حالة التطبيق باستخدام إسبريسو متعدد العمليات

مراجع إضافية

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