مع توسّع تطبيقك، قد تجد أنّه من المفيد وضع بعض مكوّنات تطبيقك في عملية أخرى غير العملية الرئيسية لتطبيقك. لاختبار مكوّنات التطبيق في هذه العمليات غير التلقائية، يمكنك استخدام وظيفة 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:
- ينشئ إطار عمل Android عملية جديدة ويبدأها لتتبُّع البنية التنقّلية لتطبيقك. يتضمّن كل إجراء
Instrumentation
نسخة جديدة منAndroidJUnitRunner
. في هذه المرحلة، لا يمكن لعمليتَي قياس الأداء التواصل مع بعضهما البعض. - تسجّل كل نسخة من
AndroidJUnitRunner
Espresso كإطار عمل للاختبار. - تجري النسختان من
AndroidJUnitRunner
عملية تبادل تأكيد الاتصال لإنشاء اتصال بينهما. في الوقت نفسه، يربط كل مثيل منAndroidJUnitRunner
جميع العملاء المسجّلين، مثل Espresso، بنظرائهم في العمليات الأخرى، ما يتيح لهؤلاء العملاء إنشاء قناة اتصال مباشرة بينهم. - يستمر كل
AndroidJUnitRunner
مثيل في البحث عن مثيلات أدوات القياس وعملاء إطار عمل الاختبار المضافة حديثًا، وإنشاء قنوات اتصال إضافية حسب الحاجة.
يوضّح الشكل 1 نتيجة هذه العملية:

مراجع إضافية
لمزيد من المعلومات حول هذا الموضوع، يُرجى الاطّلاع على المراجع التالية.
- فيديو جلسة "التطوير المستند إلى الاختبار على Android باستخدام مكتبة Android Testing Support" من مؤتمر Google I/O 2017، بدءًا من الدقيقة 36:41