همانطور که برنامه شما رشد می کند، ممکن است مفید باشد که برخی از اجزای برنامه خود را در فرآیندی غیر از فرآیند اصلی برنامه خود قرار دهید. برای آزمایش اجزای برنامه در این فرآیندهای غیر پیشفرض ، میتوانید از عملکرد Multiprocess Espresso استفاده کنید. این ابزار که در Android 8.0 (سطح API 26) و بالاتر موجود است، به شما امکان میدهد تا تعاملات رابط کاربری برنامه خود را که از مرزهای فرآیند برنامه شما عبور میکند و در عین حال ضمانتهای همگامسازی Espresso را حفظ میکنند، بهطور یکپارچه آزمایش کنید.
هنگام استفاده از اسپرسو Multiprocess، ملاحظات نسخه و محدوده زیر را در نظر داشته باشید:
- برنامه شما باید Android 8.0 (سطح API 26) یا بالاتر را هدف قرار دهد.
- این ابزار فقط میتواند مؤلفههای برنامهای را که در فرآیندهای بسته برنامه خود قرار میدهید، آزمایش کند. نمی تواند فرآیندهای خارجی را آزمایش کند.
از ابزار استفاده کنید
برای آزمایش فرآیندی در برنامه خود با استفاده از Multiprocess Espresso، یک مرجع به آرتیفکت espresso-remote در فایل build.gradle
برنامه خود اضافه کنید:
شیار
dependencies { ... androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1' }
کاتلین
dependencies { ... androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1') }
همچنین باید موارد زیر را به مانیفست androidTest
برنامه خود اضافه کنید:
- یک عنصر
<instrumentation>
که فرآیند را تعریف می کند. - یک عنصر
<meta-data>
که نشان می دهد می خواهید از اسپرسو چند فرآیندی استفاده کنید.
قطعه کد زیر نحوه اضافه کردن این عناصر را نشان می دهد:
<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>
قطعه قبلی به فریم ورک اندروید نشان می دهد که می خواهید تمام فرآیندهای بسته برنامه شما را آزمایش کند. اگر میخواهید فقط زیرمجموعهای از فرآیندهای برنامه خود را آزمایش کنید، میتوانید به جای آن یک لیست جدا شده با کاما در عنصر targetProcesses
مشخص کنید:
<instrumentation
...
android:targetProcesses=
"androidx.test.mytestapp:myFirstAppProcessToTest,
androidx.test.mytestapp:mySecondAppProcessToTest" ... />
معماری ابزار را درک کنید
هنگامی که برنامه خود را آزمایش میکنید و فرآیند پیشفرض آن را راهاندازی میکنید، ممکن است یک تعامل رابط کاربری، مانند فشار دادن دکمه، انجام دهید که فعالیتی را در یک فرآیند ثانویه شروع میکند. سپس سیستم مراحل زیر را برای فعال کردن تست فرآیند متقابل با استفاده از اسپرسو تکمیل میکند:
- Android Framework فرآیند جدیدی را برای پیروی از ساختار ناوبری برنامه شما ایجاد و شروع می کند. هر فرآیند
Instrumentation
شامل یک نمونه جدید ازAndroidJUnitRunner
است. در این مرحله، 2 فرآیند ابزار دقیق نمی توانند با یکدیگر ارتباط برقرار کنند. - هر نمونه
AndroidJUnitRunner
اسپرسو را به عنوان چارچوب آزمایشی خود ثبت می کند. - 2 نمونه از
AndroidJUnitRunner
برای برقراری ارتباط بین یکدیگر یک دست دادن انجام می دهند. در همان زمان، هر نمونهAndroidJUnitRunner
همه مشتریان ثبت شده مانند اسپرسو را با همتایان مربوطه خود در فرآیندهای دیگر متصل می کند تا این مشتریان بتوانند یک کانال ارتباطی مستقیم بین خود ایجاد کنند. - هر نمونه
AndroidJUnitRunner
به جستجوی نمونه های ابزار دقیق اضافه شده و کلاینت های چارچوب آزمایشی ادامه می دهد و در صورت نیاز کانال های ارتباطی اضافی ایجاد می کند.
شکل 1 نتیجه این فرآیند را نشان می دهد:
منابع اضافی
برای کسب اطلاعات بیشتر در مورد این موضوع، به منابع زیر مراجعه کنید.
- توسعه تست محور در اندروید با ویدیوی جلسه کتابخانه پشتیبانی تست اندروید از Google I/O 2017، شروع در 36:41.