با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
همانطور که برنامه شما رشد می کند، ممکن است مفید باشد که برخی از اجزای برنامه خود را در فرآیندی غیر از فرآیند اصلی برنامه خود قرار دهید. برای آزمایش اجزای برنامه در این فرآیندهای غیر پیشفرض ، میتوانید از عملکرد Multiprocess Espresso استفاده کنید. این ابزار که در Android 8.0 (سطح API 26) و بالاتر موجود است، به شما امکان میدهد تا تعاملات رابط کاربری برنامه خود را که از مرزهای فرآیند برنامه شما عبور میکند و در عین حال ضمانتهای همگامسازی Espresso را حفظ میکنند، بهطور یکپارچه آزمایش کنید.
هنگام استفاده از اسپرسو Multiprocess، ملاحظات نسخه و محدوده زیر را در نظر داشته باشید:
برنامه شما باید Android 8.0 (سطح API 26) یا بالاتر را هدف قرار دهد.
این ابزار فقط میتواند مؤلفههای برنامهای را که در فرآیندهای بسته برنامه خود قرار میدهید، آزمایش کند. نمی تواند فرآیندهای خارجی را آزمایش کند.
از ابزار استفاده کنید
برای آزمایش فرآیندی در برنامه خود با استفاده از Multiprocess Espresso، یک مرجع به آرتیفکت espresso-remote در فایل build.gradle برنامه خود اضافه کنید:
قطعه قبلی به فریم ورک اندروید نشان می دهد که می خواهید تمام فرآیندهای بسته برنامه شما را آزمایش کند. اگر میخواهید فقط زیرمجموعهای از فرآیندهای برنامه خود را آزمایش کنید، میتوانید به جای آن یک لیست جدا شده با کاما در عنصر targetProcesses مشخص کنید:
هنگامی که برنامه خود را آزمایش میکنید و فرآیند پیشفرض آن را راهاندازی میکنید، ممکن است یک تعامل رابط کاربری، مانند فشار دادن دکمه، انجام دهید که فعالیتی را در یک فرآیند ثانویه شروع میکند. سپس سیستم مراحل زیر را برای فعال کردن تست فرآیند متقابل با استفاده از اسپرسو تکمیل میکند:
Android Framework فرآیند جدیدی را برای پیروی از ساختار ناوبری برنامه شما ایجاد و شروع می کند. هر فرآیند Instrumentation شامل یک نمونه جدید از AndroidJUnitRunner است. در این مرحله، 2 فرآیند ابزار دقیق نمی توانند با یکدیگر ارتباط برقرار کنند.
هر نمونه AndroidJUnitRunner اسپرسو را به عنوان چارچوب آزمایشی خود ثبت می کند.
2 نمونه از AndroidJUnitRunner برای برقراری ارتباط بین یکدیگر یک دست دادن انجام می دهند. در همان زمان، هر نمونه AndroidJUnitRunner همه مشتریان ثبت شده مانند اسپرسو را با همتایان مربوطه خود در فرآیندهای دیگر متصل می کند تا این مشتریان بتوانند یک کانال ارتباطی مستقیم بین خود ایجاد کنند.
هر نمونه AndroidJUnitRunner به جستجوی نمونه های ابزار دقیق اضافه شده و کلاینت های چارچوب آزمایشی ادامه می دهد و در صورت نیاز کانال های ارتباطی اضافی ایجاد می کند.
شکل 1 نتیجه این فرآیند را نشان می دهد:
شکل 1. برقراری ارتباط بین فرآیندهای ابزار دقیق با استفاده از اسپرسو Multiprocess
منابع اضافی
برای کسب اطلاعات بیشتر در مورد این موضوع، به منابع زیر مراجعه کنید.
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-08-08 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-08-08 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Multiprocess Espresso\n\nAs your app grows, you might find it useful to place some of your app components\nin a process other than your app's main process. To test app components in these\n*non-default processes*, you can use the functionality of Multiprocess Espresso.\nThis tool, available on Android 8.0 (API level 26) and higher, allows you to\nseamlessly test your app's UI interactions that cross your app's process\nboundaries while maintaining Espresso's synchronization guarantees.\n\nWhen using Multiprocess Espresso, keep the following versioning and scope\nconsiderations in mind:\n\n- Your app must target Android 8.0 (API level 26) or higher.\n- The tool can only test app components that you include in processes within your app's package. It cannot test external processes.\n\nUse the tool\n------------\n\nTo test a process within your app using Multiprocess Espresso, add a reference\nto the **espresso-remote** artifact in your app's `build.gradle` file:\n\napp/build.gradle \n\n### Groovy\n\n```groovy\ndependencies {\n ...\n androidTestImplementation 'androidx.test.espresso:espresso-remote:3.6.1'\n}\n```\n\n### Kotlin\n\n```kotlin\ndependencies {\n ...\n androidTestImplementation('androidx.test.espresso:espresso-remote:3.6.1')\n}\n```\n\nYou also need to add the following to your app's `androidTest` manifest:\n\n- An `\u003cinstrumentation\u003e` element that defines the process.\n- A `\u003cmeta-data\u003e` element indicating that you want to use Multiprocess Espresso.\n\nThe following code snippet shows how to add these elements:\n\nsrc/androidTest/AndroidManifest.xml \n\n```xml\n\u003cmanifest ... package=\"androidx.test.mytestapp.tests\"\u003e\n \u003cuses-sdk android:targetSdkVersion=\"27\" android:minSdkVersion=\"14\" /\u003e\n \u003cinstrumentation\n android:name=\"androidx.test.runner.AndroidJUnitRunner\"\n android:targetPackage=\"androidx.test.mytestapp\"\n android:targetProcesses=\"*\"\u003e\n \u003cmeta-data\n android:name=\"remoteMethod\"\n android:value=\"androidx.test.espresso.remote.EspressoRemote#remoteInit\" /\u003e\n \u003c/instrumentation\u003e\n\u003c/manifest\u003e\n```\n\nThe previous snippet indicates to the Android framework that you want it to test\nevery process in your app's package. If you want to test only a subset of your\napp's processes, you can specify a comma-separated list within the\n[targetProcesses](/reference/android/content/pm/InstrumentationInfo#targetProcesses) element instead: \n\n \u003cinstrumentation\n ...\n android:targetProcesses=\n \"androidx.test.mytestapp:myFirstAppProcessToTest,\n androidx.test.mytestapp:mySecondAppProcessToTest\" ... /\u003e\n\n| **Note:** Multiprocess Espresso ignores the value of [targetProcesses](/reference/android/content/pm/InstrumentationInfo#targetProcesses) if you set it to your app package's main process.\n\nUnderstand the tool's architecture\n----------------------------------\n\nWhen you test your app and launch its default process, you might perform a UI\ninteraction, such as a button press, that starts an activity in a secondary\nprocess. The system then completes the following steps to enable cross-process\ntesting using Espresso:\n\n1. The Android Framework creates and starts a new process to follow your app's navigational structure. Each [Instrumentation](/reference/android/app/Instrumentation) process includes a new instance of [`AndroidJUnitRunner`](/reference/androidx/test/runner/AndroidJUnitRunner). At this stage, the 2 instrumentation processes cannot communicate with each other.\n2. Each [`AndroidJUnitRunner`](/reference/androidx/test/runner/AndroidJUnitRunner) instance registers Espresso as its testing framework.\n3. The 2 instances of [`AndroidJUnitRunner`](/reference/androidx/test/runner/AndroidJUnitRunner) perform a handshake to establish a connection between each other. At the same time, each [`AndroidJUnitRunner`](/reference/androidx/test/runner/AndroidJUnitRunner) instance connects all registered clients like Espresso with their respective counterparts in other processes so that these clients can form a direct communication channel between themselves.\n4. Each [`AndroidJUnitRunner`](/reference/androidx/test/runner/AndroidJUnitRunner) instance continues to look for newly-added instrumentation instances and testing framework clients, establishing additional communication channels as needed.\n\nFigure 1 illustrates the result of this process:\n**Figure 1.** Establishing communication between multiple instrumentation processes using Multiprocess Espresso\n\nAdditional resources\n--------------------\n\nFor further information on this topic, consult the following resources.\n\n- [Test-Driven Development on Android with the Android Testing Support\n Library](https://www.youtube.com/watch?v=pK7W5npkhho&start=2201) session video from Google I/O 2017, beginning at 36:41."]]