اسپرسو چند فرآیندی

همانطور که برنامه شما رشد می کند، ممکن است مفید باشد که برخی از اجزای برنامه خود را در فرآیندی غیر از فرآیند اصلی برنامه خود قرار دهید. برای آزمایش اجزای برنامه در این فرآیندهای غیر پیش‌فرض ، می‌توانید از عملکرد Multiprocess Espresso استفاده کنید. این ابزار که در Android 8.0 (سطح API 26) و بالاتر موجود است، به شما امکان می‌دهد تا تعاملات رابط کاربری برنامه خود را که از مرزهای فرآیند برنامه شما عبور می‌کند و در عین حال ضمانت‌های همگام‌سازی Espresso را حفظ می‌کنند، به‌طور یکپارچه آزمایش کنید.

هنگام استفاده از اسپرسو Multiprocess، ملاحظات نسخه و محدوده زیر را در نظر داشته باشید:

  • برنامه شما باید Android 8.0 (سطح API 26) یا بالاتر را هدف قرار دهد.
  • این ابزار فقط می‌تواند مؤلفه‌های برنامه‌ای را که در فرآیندهای بسته برنامه خود قرار می‌دهید، آزمایش کند. نمی تواند فرآیندهای خارجی را آزمایش کند.

از ابزار استفاده کنید

برای آزمایش فرآیندی در برنامه خود با استفاده از Multiprocess Espresso، یک مرجع به آرتیفکت espresso-remote در فایل build.gradle برنامه خود اضافه کنید:

app/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> که نشان می دهد می خواهید از اسپرسو چند فرآیندی استفاده کنید.

قطعه کد زیر نحوه اضافه کردن این عناصر را نشان می دهد:

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>

قطعه قبلی به فریم ورک اندروید نشان می دهد که می خواهید تمام فرآیندهای بسته برنامه شما را آزمایش کند. اگر می‌خواهید فقط زیرمجموعه‌ای از فرآیندهای برنامه خود را آزمایش کنید، می‌توانید به جای آن یک لیست جدا شده با کاما در عنصر targetProcesses مشخص کنید:

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

معماری ابزار را درک کنید

هنگامی که برنامه خود را آزمایش می‌کنید و فرآیند پیش‌فرض آن را راه‌اندازی می‌کنید، ممکن است یک تعامل رابط کاربری، مانند فشار دادن دکمه، انجام دهید که فعالیتی را در یک فرآیند ثانویه شروع می‌کند. سپس سیستم مراحل زیر را برای فعال کردن تست فرآیند متقابل با استفاده از اسپرسو تکمیل می‌کند:

  1. Android Framework فرآیند جدیدی را برای پیروی از ساختار ناوبری برنامه شما ایجاد و شروع می کند. هر فرآیند Instrumentation شامل یک نمونه جدید از AndroidJUnitRunner است. در این مرحله، 2 فرآیند ابزار دقیق نمی توانند با یکدیگر ارتباط برقرار کنند.
  2. هر نمونه AndroidJUnitRunner اسپرسو را به عنوان چارچوب آزمایشی خود ثبت می کند.
  3. 2 نمونه از AndroidJUnitRunner برای برقراری ارتباط بین یکدیگر یک دست دادن انجام می دهند. در همان زمان، هر نمونه AndroidJUnitRunner همه مشتریان ثبت شده مانند اسپرسو را با همتایان مربوطه خود در فرآیندهای دیگر متصل می کند تا این مشتریان بتوانند یک کانال ارتباطی مستقیم بین خود ایجاد کنند.
  4. هر نمونه AndroidJUnitRunner به جستجوی نمونه های ابزار دقیق اضافه شده و کلاینت های چارچوب آزمایشی ادامه می دهد و در صورت نیاز کانال های ارتباطی اضافی ایجاد می کند.

شکل 1 نتیجه این فرآیند را نشان می دهد:

شکل 1. برقراری ارتباط بین فرآیندهای ابزار دقیق با استفاده از اسپرسو Multiprocess

منابع اضافی

برای کسب اطلاعات بیشتر در مورد این موضوع، به منابع زیر مراجعه کنید.