Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

Начните с инструментальных тестов

Оптимизируйте свои подборки Сохраняйте и классифицируйте контент в соответствии со своими настройками.

В этом руководстве описывается, как подготовить и запустить инструментальный тест с помощью Firebase Test Lab. Чтобы использовать это руководство, вам понадобится инструментальный тест (написанный вами или вашей командой), который использует платформы тестирования Android Espresso или UI Automator . Инструментальные тесты могут выполняться до 45 минут на физических устройствах и до 60 минут на виртуальных устройствах .

Далее вы загрузите APK своего приложения и APK вашего теста в Firebase.

(Необязательно) Добавьте библиотеку снимков экрана в свое приложение.

Firebase Test Lab включает в себя библиотеку (testlab-instr-lib), которую можно использовать для обработки любых снимков экрана, сделанных с помощью AndroidX ScreenCapture при выполнении инструментальных тестов, таких как тесты, написанные с использованием среды тестирования Espresso . В этом разделе описывается, как создавать объекты ScreenCapture с помощью библиотеки AndroidX и как их обрабатывать с помощью testlab-instr-lib.

После запуска инструментального теста вы можете просмотреть сделанные снимки экрана в консоли Firebase.

Попробуйте пример приложения

Загрузите пример приложения «Блокнот », чтобы опробовать эту функцию. Возможность делать скриншоты уже заложена в проекте NotePad.

Шаг 1. Добавьте библиотеку скриншотов в свой проект

  1. В файле Gradle корневого уровня (уровня проекта) вашего тестового проекта ( build.gradle ) добавьте репозиторий Google Maven в каждый раздел репозиториев:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. В файле Gradle модуля (уровня приложения) (обычно app/build.gradle ) добавьте зависимость для библиотеки скриншотов Test Lab.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2'
      // ...
    }
  3. В файле AndroidManifest.xml своего теста зарегистрируйте FirebaseScreenCaptureProcessor в теге метаданных в элементе <instrumentation> . Вместо этого вы также можете указать процессор в качестве аргумента в AndroidJUnitRunner (см . справочную документацию AndroidJUnitRunner, чтобы узнать, как это сделать).

    <instrumentation
      // Check that you have the following line (if not, add it):
      android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner
      android:targetPackage="com.your.package.name">
    
    // Add the following:
    <meta-data
      android:name="screenCaptureProcessors"
      android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" />
    </instrumentation>
    ...
    
  4. В файле AndroidManifest.xml вашего приложения добавьте следующие строки в элемент <manifest> :

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. В файле AndroidManifest.xml укажите системные разрешения для вашего приложения, добавив следующие строки в <manifest> . Если вы тестируете Android 10 (уровень API 29) или выше , не указывайте разрешение WRITE_EXTERNAL_STORAGE (вашему приложению не требуется это разрешение для чтения и записи снимков экрана на устройство).

    <manifest ... >
        <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        ...
    </manifest>

Шаг 2. Делайте скриншоты во время теста

В любой момент теста, когда вы хотите сделать снимок экрана, вызовите метод Screenshot.capture() из библиотеки AndroidX. Это создает объект ScreenCapture . Когда вы вызываете process() для объекта ScreenCapture , он обрабатывается с помощью ScreenCaptureProcessor , зарегистрированного в вашем AndroidManifest.xml . Обратите внимание, что BasicScreenCaptureProcessor используется, если процессоры не зарегистрированы. Поскольку вы зарегистрировали FirebaseScreenCaptureProcessor , ваши скриншоты будут обрабатываться с помощью FirebaseScreenCaptureProcessor и будут доступны вам вместе с вашими результатами при запуске теста в Firebase Test Lab.

Примеры использования для создания ScreenCapture :

  • Сделайте полный снимок экрана для API Build.VERSION_CODES.JELLY_BEAN_MR2 и выше:

    Screenshot.capture()
    
  • Сделайте ScreenCapture активности на любом уровне API. Обратите внимание, что это единственный вариант для устройств ниже Build.VERSION_CODES.JELLY_BEAN_MR2.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

Примеры использования для обработки ScreenCapture

  • Обработайте ScreenCapture с помощью FirebaseScreenCaptureProcessor :

    Screenshot.capture().process();
    
  • Обработайте ScreenCapture через указанный ScreenCaptureProcessor (это позволяет пропустить регистрацию процессора):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Установите имя и формат ScreenCapture и обработайте его с помощью зарегистрированного процессора:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

Шаг 3. Создайте и запустите тест

  1. Создайте свое приложение и протестируйте APK (инструкции см. в разделе Тестирование приложения ).

  2. Загрузите файлы APK на панель инструментов Test Lab консоли Firebase.

  3. Наконец, запустите свой тест.

Шаг 4. Просмотрите свои тестовые скриншоты

После завершения теста вы можете просмотреть любые скриншоты, сделанные в консоли Firebase.

  1. На вкладке « Тесты » выберите завершенный тест, затем щелкните вкладку « Результаты ».

  2. Снова выберите свой тест, затем щелкните появившуюся вкладку « Снимки экрана ».

(Необязательно) Включить дополнительные функции тестирования

Вы можете включить следующие функции в своем тесте, прежде чем запускать его с помощью Test Lab:

Включить Оркестратор

Android Test Orchestrator — это инструмент, который запускает каждый инструментальный тест вашего приложения независимо. Test Lab всегда использует последнюю версию Orchestrator.

Чтобы включить Orchestrator for Test Lab, в настройке инструментального тестирования щелкните Дополнительные параметры > Запустить с Orchestrator .

Преимущества и недостатки

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

Включить сегментирование

Разделение тестов делит набор тестов на подгруппы (сегменты), которые выполняются отдельно изолированно. Test Lab автоматически запускает каждый сегмент параллельно с использованием нескольких устройств и выполняет весь набор тестов за меньшее время.

Как работает шардинг тестов

Допустим, вы создаете N осколков. Для каждого выбранного вами устройства Test Lab запускает N идентичных устройств и запускает подмножество тестов на каждом устройстве. Это означает, что сегментированные тестовые наборы могут привести к выполнению нескольких тестов на одном устройстве, в отличие от несегментированных тестовых наборов, которые всегда приводят к одному выполнению теста на устройство (краткий обзор ключевых понятий в Test Lab см. в разделе Основные понятия ).

Вы можете включить тестовое сегментирование в консоли Firebase:

  1. В настройке инструментального теста щелкните Дополнительные параметры .

  2. В разделе Sharding введите количество сегментов, которые вы хотите запустить.

Выставление счетов за тестовые шарды

Test Lab реализует ваши сегменты, используя встроенный механизм сегментирования AndroidJUnitRunner. Чтобы избежать взимания платы за раскручивание пустых сегментов (осколков без назначенных тестовых наборов), количество создаваемых вами сегментов должно быть меньше общего количества тестовых наборов. В зависимости от того, сколько времени требуется для выполнения каждого тестового примера, обычно рекомендуется назначать от 2 до 10 тестовых случаев на сегмент.

Дополнительные сведения о выставлении счетов см. в статье Использование, квоты и выставление счетов .

,

В этом руководстве описывается, как подготовить и запустить инструментальный тест с помощью Firebase Test Lab. Чтобы использовать это руководство, вам понадобится инструментальный тест (написанный вами или вашей командой), который использует платформы тестирования Android Espresso или UI Automator . Инструментальные тесты могут выполняться до 45 минут на физических устройствах и до 60 минут на виртуальных устройствах .

Далее вы загрузите APK своего приложения и APK вашего теста в Firebase.

(Необязательно) Добавьте библиотеку снимков экрана в свое приложение.

Firebase Test Lab включает в себя библиотеку (testlab-instr-lib), которую можно использовать для обработки любых снимков экрана, сделанных с помощью AndroidX ScreenCapture при выполнении инструментальных тестов, таких как тесты, написанные с использованием среды тестирования Espresso . В этом разделе описывается, как создавать объекты ScreenCapture с помощью библиотеки AndroidX и как их обрабатывать с помощью testlab-instr-lib.

После запуска инструментального теста вы можете просмотреть сделанные снимки экрана в консоли Firebase.

Попробуйте образец приложения

Загрузите пример приложения «Блокнот », чтобы опробовать эту функцию. Возможность делать скриншоты уже заложена в проекте NotePad.

Шаг 1. Добавьте библиотеку скриншотов в свой проект

  1. В файле Gradle корневого уровня (уровня проекта) вашего тестового проекта ( build.gradle ) добавьте репозиторий Google Maven в каждый раздел репозиториев:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. В файле Gradle модуля (уровня приложения) (обычно app/build.gradle ) добавьте зависимость для библиотеки скриншотов Test Lab.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2'
      // ...
    }
  3. В файле AndroidManifest.xml своего теста зарегистрируйте FirebaseScreenCaptureProcessor в теге метаданных в элементе <instrumentation> . Вместо этого вы также можете указать процессор в качестве аргумента в AndroidJUnitRunner (см . справочную документацию AndroidJUnitRunner, чтобы узнать, как это сделать).

    <instrumentation
      // Check that you have the following line (if not, add it):
      android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner
      android:targetPackage="com.your.package.name">
    
    // Add the following:
    <meta-data
      android:name="screenCaptureProcessors"
      android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" />
    </instrumentation>
    ...
    
  4. В файле AndroidManifest.xml вашего приложения добавьте следующие строки в элемент <manifest> :

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. В файле AndroidManifest.xml укажите системные разрешения для вашего приложения, добавив следующие строки в <manifest> . Если вы тестируете Android 10 (уровень API 29) или выше , не указывайте разрешение WRITE_EXTERNAL_STORAGE (вашему приложению не требуется это разрешение для чтения и записи снимков экрана на устройство).

    <manifest ... >
        <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. -->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.INTERNET"/>
        ...
    </manifest>

Шаг 2. Делайте скриншоты во время теста

В любой момент теста, когда вы хотите сделать снимок экрана, вызовите метод Screenshot.capture() из библиотеки AndroidX. Это создает объект ScreenCapture . Когда вы вызываете process() для объекта ScreenCapture , он обрабатывается с помощью ScreenCaptureProcessor , зарегистрированного в вашем AndroidManifest.xml . Обратите внимание, что BasicScreenCaptureProcessor используется, если процессоры не зарегистрированы. Поскольку вы зарегистрировали FirebaseScreenCaptureProcessor , ваши скриншоты будут обрабатываться с помощью FirebaseScreenCaptureProcessor и будут доступны вам вместе с вашими результатами при запуске теста в Firebase Test Lab.

Примеры использования для создания ScreenCapture :

  • Сделайте полный снимок экрана для API Build.VERSION_CODES.JELLY_BEAN_MR2 и выше:

    Screenshot.capture()
    
  • Сделайте ScreenCapture активности на любом уровне API. Обратите внимание, что это единственный вариант для устройств ниже Build.VERSION_CODES.JELLY_BEAN_MR2.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

Примеры использования для обработки ScreenCapture

  • Обработайте ScreenCapture с помощью FirebaseScreenCaptureProcessor :

    Screenshot.capture().process();
    
  • Обработайте ScreenCapture через указанный ScreenCaptureProcessor (это позволяет пропустить регистрацию процессора):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Установите имя и формат ScreenCapture и обработайте его с помощью зарегистрированного процессора:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

Шаг 3. Создайте и запустите тест

  1. Создайте свое приложение и протестируйте APK (инструкции см. в разделе Тестирование приложения ).

  2. Загрузите файлы APK на панель инструментов Test Lab консоли Firebase.

  3. Наконец, запустите свой тест.

Шаг 4. Просмотрите свои тестовые скриншоты

После завершения теста вы можете просмотреть любые скриншоты, сделанные в консоли Firebase.

  1. На вкладке « Тесты » выберите завершенный тест, затем щелкните вкладку « Результаты ».

  2. Снова выберите свой тест, затем щелкните появившуюся вкладку « Снимки экрана ».

(Необязательно) Включить дополнительные функции тестирования

Вы можете включить следующие функции в своем тесте, прежде чем запускать его с помощью Test Lab:

Включить Оркестратор

Android Test Orchestrator — это инструмент, который запускает каждый инструментальный тест вашего приложения независимо. Test Lab всегда использует последнюю версию Orchestrator.

Чтобы включить Orchestrator for Test Lab, в настройке инструментального тестирования щелкните Дополнительные параметры > Запустить с Orchestrator .

Преимущества и недостатки

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

Включить сегментирование

Разделение тестов делит набор тестов на подгруппы (сегменты), которые выполняются отдельно изолированно. Test Lab автоматически запускает каждый сегмент параллельно с использованием нескольких устройств и выполняет весь набор тестов за меньшее время.

Как работает шардинг тестов

Допустим, вы создаете N осколков. Для каждого выбранного вами устройства Test Lab запускает N идентичных устройств и запускает подмножество тестов на каждом устройстве. Это означает, что сегментированные тестовые наборы могут привести к выполнению нескольких тестов на одном устройстве, в отличие от несегментированных тестовых наборов, которые всегда приводят к одному выполнению теста на устройство (краткий обзор ключевых понятий в Test Lab см. в разделе Основные понятия ).

Вы можете включить тестовое сегментирование в консоли Firebase:

  1. В настройке инструментального теста щелкните Дополнительные параметры .

  2. В разделе Sharding введите количество сегментов, которые вы хотите запустить.

Выставление счетов за тестовые шарды

Test Lab реализует ваши сегменты, используя встроенный механизм сегментирования AndroidJUnitRunner. Чтобы избежать взимания платы за раскручивание пустых сегментов (осколков без назначенных тестовых наборов), количество создаваемых вами сегментов должно быть меньше общего количества тестовых наборов. В зависимости от того, сколько времени требуется для выполнения каждого тестового примера, обычно рекомендуется назначать от 2 до 10 тестовых случаев на сегмент.

Дополнительные сведения о выставлении счетов см. в статье Использование, квоты и выставление счетов .