Мультипроцесс Эспрессо

По мере роста вашего приложения может оказаться полезным разместить некоторые компоненты вашего приложения в процессе, отличном от основного процесса вашего приложения. Чтобы протестировать компоненты приложения в этих нестандартных процессах , вы можете использовать функциональные возможности Multiprocess Espresso. Этот инструмент, доступный на Android 8.0 (уровень API 26) и выше, позволяет вам беспрепятственно тестировать взаимодействия пользовательского интерфейса вашего приложения, которые выходят за границы процесса вашего приложения, сохраняя при этом гарантии синхронизации Espresso.

При использовании Multiprocess Espresso учитывайте следующие аспекты управления версиями и областью действия:

  • Ваше приложение должно быть ориентировано на Android 8.0 (уровень API 26) или выше.
  • Этот инструмент может тестировать только те компоненты приложения, которые вы включаете в процессы в пакете вашего приложения. Он не может тестировать внешние процессы.

Используйте инструмент

Чтобы протестировать процесс в вашем приложении с помощью Multiprocess Espresso, добавьте ссылку на артефакт espresso-remote в файл build.gradle вашего приложения:

приложение/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> , указывающий, что вы хотите использовать Multiprocess Espresso.

В следующем фрагменте кода показано, как добавить эти элементы:

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>

Предыдущий фрагмент указывает платформе Android, что вы хотите, чтобы она тестировала каждый процесс в пакете вашего приложения. Если вы хотите протестировать только часть процессов вашего приложения, вы можете вместо этого указать список, разделенный запятыми, внутри элемента targetProcesses :

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

Понимание архитектуры инструмента

Когда вы тестируете свое приложение и запускаете его процесс по умолчанию, вы можете выполнить взаимодействие с пользовательским интерфейсом, например нажатие кнопки, которое запускает действие во вторичном процессе. Затем система выполняет следующие шаги, чтобы включить межпроцессное тестирование с помощью Espresso:

  1. Android Framework создает и запускает новый процесс, соответствующий навигационной структуре вашего приложения. Каждый процесс Instrumentation включает новый экземпляр AndroidJUnitRunner . На этом этапе два инструментальных процесса не могут взаимодействовать друг с другом.
  2. Каждый экземпляр AndroidJUnitRunner регистрирует Espresso в качестве своей среды тестирования.
  3. Два экземпляра AndroidJUnitRunner выполняют рукопожатие, чтобы установить соединение друг с другом. В то же время каждый экземпляр AndroidJUnitRunner соединяет всех зарегистрированных клиентов, таких как Espresso, с их соответствующими аналогами в других процессах, чтобы эти клиенты могли формировать прямой канал связи между собой.
  4. Каждый экземпляр AndroidJUnitRunner продолжает искать новые экземпляры инструментов и тестировать клиентов платформы, при необходимости устанавливая дополнительные каналы связи.

Рисунок 1 иллюстрирует результат этого процесса:

Рисунок 1. Установление связи между несколькими инструментальными процессами с помощью Multiprocess Espresso

Дополнительные ресурсы

Для получения дополнительной информации по этой теме обратитесь к следующим ресурсам.