Тестирование скриншотов с помощью тестовых наборов.

Начиная с Android Gradle Plugin (AGP) 9.5.0-alpha03 и Compose Preview Screenshot Testing engine 0.0.1-alpha16 , тестирование скриншотов интегрировано с собственной системой тестовых наборов AGP.

Этот подход заменяет автономный плагин для создания скриншотов ( com.android.compose.screenshot ). Мы рекомендуем использовать тестовые наборы AGP по следующим причинам:

  • Встроенный жизненный цикл задач Gradle : тесты для создания скриншотов интегрируются непосредственно в стандартные циклы тестирования Gradle и AGP, повышая изоляцию задач и надежность выполнения тестов.
  • Поддержка многовариантных и пользовательских наборов тестов : вы можете создавать несколько отдельных наборов тестов для создания скриншотов (например, screenshotTest , uiTests или smokeTests ) в рамках одного модуля и ориентироваться на определенные варианты сборки (например, demoDebug или release ), вместо того чтобы ограничиваться одним предварительно настроенным набором исходных файлов.
  • Повышенная производительность сборки и изоляция : тестовые наборы AGP используют встроенные преобразования артефактов (например, извлечение Layoutlib во время выполнения) и изолированную загрузку классов, с полной поддержкой кэширования конфигурации Gradle и изоляции проекта.

Требования

Для использования функции Compose Screenshot Testing с наборами тестов убедитесь, что ваша среда соответствует следующим требованиям:

  • Android Studio Rabbit 1 Canary 4 или выше.
  • Версия плагина Android Gradle (AGP) — 9.5.0-alpha03 или выше.
  • Compose Screenshot Engine версии 0.0.1-alpha16 или выше.
  • Версия JDK 17 или выше.
  • Включите Compose для вашего проекта. Мы рекомендуем включить Compose с помощью плагина Compose Compiler Gradle .

Настройка и конфигурация

Для настройки тестирования скриншотов в Compose с помощью наборов тестов выполните следующие шаги:

1. Включить экспериментальные флаги

В корневом файле gradle.properties вашего проекта включите тестирование с помощью скриншотов и поддержку набора тестов:

android.experimental.enableScreenshotTest=true
android.experimental.testSuiteSupport=true

2. Настройте набор тестов в файле build.gradle.kts

В файле build.gradle.kts вашего модуля определите набор тестов для создания скриншотов в блоке testOptions :

android {
    testOptions {
        screenshotTests.create("screenshotTest") { // suiteName can be customized (for example, "uiTests")
            engineVersion = "0.0.1-alpha16"
            targetVariants.add("demoDebug") // Add specific variants to test

            dependencies {
                implementation(libs.androidx.compose.ui.tooling)
                implementation("com.android.tools.screenshot:screenshot-validation-api:0.0.1-alpha16")
            }
        }
    }
}

3. Создайте набор исходных файлов для тестирования.

Создайте отдельный каталог для набора исходных файлов, соответствующий названию вашего пакета программ:

{module}/src/{suiteName}/kotlin/

Например, для набора тестов под названием screenshotTest :

feature/foryou/impl/src/screenshotTest/kotlin/com/example/app/ForYouScreenTest.kt

4. Определите составные тесты предварительного просмотра.

Добавляйте аннотации @PreviewTest к составным элементам, а также стандартные аннотации @Preview или аннотации множественного предварительного просмотра:

package com.example.app

import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import com.android.tools.screenshot.PreviewTest
import com.example.app.ui.theme.AppTheme

@PreviewTest
@Preview(showBackground = true)
@Composable
fun ForYouScreenPreview() {
    AppTheme {
        ForYouScreen(isSyncing = false)
    }
}

Запустите тесты скриншотов

Тестовые наборы AGP генерируют отдельные задачи Gradle на основе имени вашего набора, целевого объекта и вариантов.

1. Создайте или обновите эталонные изображения.

Отображайте компонуемые предварительные просмотры и сохраняйте эталонные изображения:

  • Linux и macOS : ./gradlew update{SuiteName}{Target}{Variant}TestSuite (например, ./gradlew updateScreenshotTestDefaultDemoDebugTestSuite )
  • Windows : gradlew updateScreenshotTestDefaultDemoDebugTestSuite

Эталонные изображения создаются и сохраняются по следующему адресу:

{module}/src/{suiteName}{Target}{Variant}/reference/

2. Проверьте и запустите тесты.

Создайте новые скриншоты и сравните их с эталонными изображениями:

  • Linux и macOS : ./gradlew test{SuiteName}{Target}{Variant}TestSuite (например, ./gradlew testScreenshotTestDefaultDemoDebugTestSuite )
  • Windows : gradlew testScreenshotTestDefaultDemoDebugTestSuite

Проверьте протоколы испытаний.

Если обнаруживаются различия или тесты не пройдены, AGP генерирует HTML-отчет о результатах тестирования.

  • Расположение отчета : {module}/build/reports/tests/{taskName}/index.html (например, app/build/reports/tests/testScreenshotTestDefaultDemoDebugTestSuite/index.html )

В обновленный отчет включены следующие сведения:

  • Метаданные заголовка : отображает название теста, метод предварительного просмотра, вариант, набор тестов и значок статуса.
  • Классификация ошибок : Четко Reference Image Missing , Image Size Mismatch или Pixel Mismatch с возможностью копирования трассировки стека.
  • Динамическая визуальная дифференциация : выделяет незначительные изменения с меньшей интенсивностью и существенные изменения с высокой контрастностью, чтобы предотвратить «поглощение» вложенных элементов.

Перейдите с устаревшего автономного плагина.

Для перехода с устаревшего автономного плагина для создания скриншотов на тестовые наборы AGP обновите конфигурацию Gradle и команды задач.

Сравнение DSL-интерфейсов конфигурации сборки

Устаревший автономный плагин (устарел)

// In build.gradle.kts
plugins {
    alias(libs.plugins.screenshot)
}

dependencies {
    screenshotTestImplementation(libs.androidx.compose.ui.tooling)
    screenshotTestImplementation("com.android.tools.screenshot:screenshot-validation-api:0.0.1-alpha16")
}
// In build.gradle.kts
android {
    testOptions {
        screenshotTests.create("screenshotTest") {
            engineVersion = "0.0.1-alpha16"
            targetVariants.add("demoDebug")

            dependencies {
                implementation(libs.androidx.compose.ui.tooling)
                implementation("com.android.tools.screenshot:screenshot-validation-api:0.0.1-alpha16")
            }
        }
    }
}

Составление карты задач и путей

Концепция Устаревшая настройка (неактуально) Рекомендуемые тестовые пакеты AGP
Обновить задачу ./gradlew updateDebugScreenshotTest ./gradlew update{SuiteName}{Target}{Variant}TestSuite
Тестовое задание ./gradlew validateDebugScreenshotTest ./gradlew test{SuiteName}{Target}{Variant}TestSuite
Путь ссылки src/screenshotTestDebug/reference src/{suiteName}{Target}{Variant}/reference
Путь к отчету build/reports/screenshotTest/debug/ build/reports/tests/{taskName}/