Tetap teratur dengan koleksi
Simpan dan kategorikan konten berdasarkan preferensi Anda.
Seiring pertumbuhan aplikasi, akan lebih mudah jika Anda menempatkan beberapa komponen aplikasi dalam proses yang berbeda dari proses utama aplikasi Anda. Untuk menguji komponen aplikasi dalam proses non-default ini, Anda dapat menggunakan fungsionalitas Multiprocess Espresso.
Fitur yang tersedia di Android 8.0 (level API 26) dan yang lebih tinggi ini memungkinkan Anda menguji interaksi UI aplikasi yang melintasi batas proses aplikasi dengan lancar sambil mempertahankan jaminan sinkronisasi Espresso.
Saat menggunakan Multiprocess Espresso, perhatikan cakupan pembuatan versi dan pertimbangan berikut:
Aplikasi Anda harus menargetkan Android 8.0 (API level 26) atau yang lebih tinggi.
Alat ini hanya dapat menguji komponen aplikasi yang Anda sertakan dalam proses di dalam paket aplikasi Anda. Fitur tersebut tidak dapat menguji proses eksternal.
Menggunakan fitur
Untuk menguji suatu proses dalam aplikasi Anda menggunakan Multiprocess Espresso, tambahkan referensi
ke artefak espresso-remote dalam file build.gradle aplikasi Anda:
Cuplikan sebelumnya menunjukkan framework Android yang Anda inginkan untuk menguji setiap proses dalam paket aplikasi Anda. Jika Anda ingin menguji hanya sebagian proses aplikasi, Anda dapat menentukan daftar yang dipisahkan koma dalam elemen targetProcesses sebagai gantinya:
Saat menguji aplikasi dan meluncurkan proses defaultnya, Anda dapat melakukan interaksi UI (misalnya menekan tombol) yang memulai aktivitas dalam proses sekunder. Sistem kemudian menyelesaikan langkah-langkah berikut untuk mengaktifkan pengujian lintas proses menggunakan Espresso:
Framework Android membuat dan memulai proses baru untuk mengikuti struktur navigasi aplikasi Anda. Setiap proses Instrumentation menyertakan instance AndroidJUnitRunner baru.
Pada tahap ini, 2 proses instrumentasi tidak dapat berkomunikasi satu sama lain.
Setiap instance
AndroidJUnitRunner
mendaftarkan Espresso sebagai framework pengujiannya.
2 instance
AndroidJUnitRunner
melakukan handshake untuk terhubung antara satu sama lain. Pada saat yang sama, setiap instance AndroidJUnitRunner menghubungkan semua klien terdaftar seperti Espresso dengan kliennya masing-masing di dalam proses lain sehingga klien tersebut dapat membentuk saluran komunikasi langsung satu sama lain.
Setiap instance AndroidJUnitRunner akan terus mencari instance instrumen yang baru ditambahkan dan menguji framework klien sehingga membangun saluran komunikasi tambahan sesuai kebutuhan.
Gambar 1 menggambarkan hasil dari proses ini:
Gambar 1. Membangun komunikasi antara beberapa proses instrumentasi menggunakan Multiprocess Espresso
Referensi lainnya
Untuk informasi selengkapnya tentang topik ini, lihat referensi berikut.
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2025-08-08 UTC.
[[["Mudah dipahami","easyToUnderstand","thumb-up"],["Memecahkan masalah saya","solvedMyProblem","thumb-up"],["Lainnya","otherUp","thumb-up"]],[["Informasi yang saya butuhkan tidak ada","missingTheInformationINeed","thumb-down"],["Terlalu rumit/langkahnya terlalu banyak","tooComplicatedTooManySteps","thumb-down"],["Sudah usang","outOfDate","thumb-down"],["Masalah terjemahan","translationIssue","thumb-down"],["Masalah kode / contoh","samplesCodeIssue","thumb-down"],["Lainnya","otherDown","thumb-down"]],["Terakhir diperbarui pada 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."]]