Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Uygulamanız büyüdükçe, uygulama bileşenlerinizin bir kısmını uygulamanızın ana işlemi dışında bir işleme yerleştirmenin faydalı olduğunu görebilirsiniz. Uygulama bileşenlerini bu varsayılan olmayan işlemlerde test etmek için çok işlemli Espresso'nun işlevini kullanabilirsiniz.
Android 8.0 (API düzeyi 26) ve sonraki sürümlerde kullanılabilen bu araç, Espresso'nun senkronizasyon garantilerini korurken uygulamanızın süreç sınırlarını aşan kullanıcı arayüzü etkileşimlerini sorunsuz bir şekilde test etmenizi sağlar.
Çoklu işlem Espresso'yu kullanırken aşağıdaki sürüm oluşturma ve kapsamla ilgili hususları göz önünde bulundurun:
Uygulamanız Android 8.0 (API düzeyi 26) veya sonraki sürümleri hedeflemelidir.
Araç yalnızca uygulamanızın paketindeki işlemlere dahil ettiğiniz uygulama bileşenlerini test edebilir. Harici işlemleri test edemez.
Aracı kullanma
Çoklu işlem Espresso'yu kullanarak uygulamanızdaki bir süreci test etmek için uygulamanızın build.gradle dosyasındaki espresso-remote yapıtına bir referans ekleyin:
Önceki snippet, Android çerçevesine uygulamanızın paketindeki her işlemin test edilmesini istediğinizi belirtir. Uygulamanızın yalnızca bir alt küme işlemlerini test etmek istiyorsanız bunun yerine targetProcesses öğesinde virgülle ayrılmış bir liste belirtebilirsiniz:
Uygulamanızı test edip varsayılan işlemini başlattığınızda, ikincil bir işlemde etkinlik başlatan bir kullanıcı arayüzü etkileşimi (ör. düğmeye basma) gerçekleştirebilirsiniz. Sistem daha sonra Espresso kullanarak süreçler arası testleri etkinleştirmek için aşağıdaki adımları tamamlar:
Android Framework, uygulamanızın gezinme yapısını takip etmek için yeni bir işlem oluşturup başlatır. Her Instrumentation işlemi, AndroidJUnitRunner öğesinin yeni bir örneğini içerir.
Bu aşamada, 2 enstrümantasyon işlemi birbiriyle iletişim kuramaz.
Her AndroidJUnitRunner örneği, Espresso'yu test çerçevesi olarak kaydeder.
AndroidJUnitRunner'ın 2 örneği, birbirleriyle bağlantı kurmak için el sıkışma işlemi gerçekleştirir. Aynı zamanda her AndroidJUnitRunner örneği, Espresso gibi tüm kayıtlı istemcileri diğer işlemlerdeki karşılıklarıyla bağlar. Böylece bu istemciler kendi aralarında doğrudan bir iletişim kanalı oluşturabilir.
Her AndroidJUnitRunner
örneği, yeni eklenen enstrümantasyon örneklerini ve test çerçevesi istemcilerini aramaya devam eder ve gerektiğinde ek iletişim kanalları oluşturur.
Şekil 1'de bu sürecin sonucu gösterilmektedir:
1. şekil. Çoklu işlem Espresso'yu kullanarak birden fazla enstrümantasyon süreci arasında iletişim kurma
Ek kaynaklar
Bu konu hakkında daha fazla bilgi için aşağıdaki kaynaklara göz atın.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-08-08 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-08-08 UTC."],[],[],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."]]