ومع توسع تطبيقك، قد تجد أنه من المفيد وضع بعض مكونات تطبيقك في عملية أخرى غير العملية الرئيسية لتطبيقك. لاختبار مكوّنات التطبيق من خلال هذه العمليات غير التلقائية، يمكنك استخدام وظيفة إسبرسو متعدد العمليات. تتوفّر هذه الأداة على نظام التشغيل Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) والإصدارات الأحدث، وتتيح لك اختبار تفاعلات واجهة المستخدم الخاصة بالتطبيق التي تتجاوز حدود عمليات تطبيقك مع الحفاظ على ضمانات المزامنة في Espresso.
عند استخدام قهوة الإسبريسو متعدد العمليات، يُرجى مراعاة الاعتبارات التالية المتعلقة بتحديد الإصدارات والنطاق:
- يجب أن يستهدف تطبيقك الإصدار Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) أو الإصدارات الأحدث.
- لا يمكن للأداة اختبار سوى مكونات التطبيق التي تُدرجها في العمليات ضمن حزمة تطبيقك. ولا يمكنه اختبار العمليات الخارجية.
استخدام الأداة
لاختبار عملية داخل تطبيقك باستخدام قهوة إسبريسو متعددة العمليات، أضِف مرجعًا
إلى العنصر espresso-remote في ملف build.gradle
لتطبيقك:
app/build.grale
رائع
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>
يشير إلى أنّك تريد استخدام قهوة إسبريسو متعدّدة العمليات
يوضّح مقتطف الرمز التالي كيفية إضافة هذه العناصر:
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" ... />
فهم بنية الأداة
عند اختبار تطبيقك وبدء عمليته الافتراضية، يمكنك تنفيذ تفاعل بين واجهة المستخدم، مثل الضغط على زر، لبدء نشاط في عملية ثانوية. بعد ذلك، يُكمل النظام الخطوات التالية لتفعيل الاختبار المتعدّد العمليات باستخدام الإسبريسو:
- ينشئ إطار عمل Android ويبدأ عملية جديدة لاتّباع بنية التنقّل في تطبيقك. تتضمن كل عملية
Instrumentation
مثيلاً جديدًا منAndroidJUnitRunner
. في هذه المرحلة، لا يمكن لعمليتَي القياس التواصل مع بعضهما البعض. - ويسجّل كل
AndroidJUnitRunner
Espresso كإطار عمل للاختبار. - تُجري مثيلا
AndroidJUnitRunner
تأكيد الاتصال لإنشاء اتصال بين بعضهما البعض. في الوقت نفسه، يعمل كل مثيلAndroidJUnitRunner
على ربط كل العملاء المسجَّلين مثل Espresso بشركاتهم الأخرى في عمليات أخرى حتى يتمكّن هؤلاء العملاء من إنشاء قناة تواصل مباشر فيما بينهم. - يواصل كل مثيل
AndroidJUnitRunner
البحث عن مثيلات الأدوات المُضافة حديثًا واختبار عملاء أُطر العمل، وإنشاء قنوات اتصال إضافية حسب الحاجة.
يوضح الشكل 1 نتيجة هذه العملية:
![](https://developer.android.com/static/images/training/testing/multiprocess_espresso.png?authuser=7&hl=ar)
مراجع إضافية
لمزيد من المعلومات حول هذا الموضوع، ارجع إلى الموارد التالية.
- التطوير المستند إلى الاختبار على Android مع فيديو جلسة مكتبة دعم اختبارات Android من مؤتمر Google I/O لعام 2017، بدءًا من 36:41.