Начиная с 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")
}
Рекомендуемые тестовые пакеты AGP
// 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}/ |