Les tests de captures d'écran sont un moyen efficace de vérifier l'apparence de votre UI pour les utilisateurs. L'outil de test des captures d'écran d'aperçu Compose combine la simplicité et les fonctionnalités des aperçus de composables avec les gains de productivité liés à l'exécution de tests de capture d'écran côté hôte. Les tests de captures d'écran de l'aperçu de Compose sont conçus pour être aussi faciles à utiliser que les aperçus de composables.
Un test de capture d'écran est un test automatisé qui prend une capture d'écran d'un élément de l'interface utilisateur, puis la compare à une image de référence précédemment approuvée. Si les images ne correspondent pas, le test échoue et génère un rapport HTML pour vous aider à comparer et à trouver les différences.
Avec l'outil de test des captures d'écran de l'aperçu Compose, vous pouvez:
- Utilisez
@PreviewTest
pour créer des tests de capture d'écran pour les aperçus de composables existants ou nouveaux. - Générez des images de référence à partir de ces aperçus de composables.
- Générez un rapport HTML qui identifie les modifications apportées à ces aperçus après avoir modifié le code.
- Utilisez des paramètres
@Preview
, tels queuiMode
oufontScale
, et plusieurs aperçus pour vous aider à faire évoluer vos tests. - Modifiez vos tests avec le nouvel ensemble de sources
screenshotTest
.

Conditions requises
Pour utiliser les tests de capture d'écran de la version Preview de Compose, vous avez besoin des éléments suivants:
- Plug-in Android Gradle 8.5.0-beta01 ou version ultérieure
- Kotlin 1.9.20 ou version ultérieure Nous vous recommandons d'utiliser Kotlin 2.0 ou une version ultérieure afin de pouvoir utiliser le plug-in Gradle du compilateur Compose.
Compose est activé pour votre projet. Nous vous recommandons d'activer Compose à l'aide du plug-in Gradle du compilateur Compose.
Configuration
Pour activer l'outil, procédez comme suit:
- Ajoutez le plug-in
com.android.compose.screenshot
, version0.0.1-alpha10
, à votre projet. - Ajoutez le plug-in au fichier de catalogues de versions:
[versions] agp = "8.11.0-alpha06" kotlin = "2.1.20" screenshot = "0.0.1-alpha10" [plugins] screenshot = { id = "com.android.compose.screenshot", version.ref = "screenshot"}
- Dans le fichier
build.gradle.kts
au niveau du module, ajoutez le plug-in dans le blocplugins {}
:plugins { alias(libs.plugins.screenshot) }
- Activez la propriété expérimentale dans le fichier
gradle.properties
de votre projet.android.experimental.enableScreenshotTest=true
- Dans le bloc
android {}
de votre fichierbuild.gradle.kts
au niveau du module, activez l'indicateur expérimental pour utiliser l'ensemble de sourcesscreenshotTest
.android { experimentalProperties["android.experimental.enableScreenshotTest"] = true }
- Ajoutez les dépendances
screenshot-validation-api
etui-tooling
.- Ajoutez-les à vos catalogues de versions:
[libraries] screenshot-validation-api = { group = "com.android.tools.screenshot", name = "screenshot-validation-api", version.ref = "screenshot"} androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling"}
- Ajoutez-les à votre fichier
build.gradle.kts
au niveau du module:dependencies { screenshotTestImplementation(libs.screenshot.validation.api) screenshotTestImplementation(libs.androidx.ui.tooling) }
- Ajoutez-les à vos catalogues de versions:
Désigner des aperçus de composables à utiliser pour les tests de captures d'écran
Pour désigner les aperçus de composables que vous souhaitez utiliser pour les tests de capture d'écran, marquez-les avec l'annotation @PreviewTest
. Les aperçus doivent se trouver dans le nouvel ensemble de sources screenshotTest
, par exemple app/src/screenshotTest/kotlin/com/example/yourapp/ExamplePreviewScreenshotTest.kt
.
Vous pouvez ajouter d'autres composables et/ou des aperçus, y compris des aperçus multiples, dans ce fichier ou dans d'autres fichiers créés dans le même ensemble de sources.
package com.example.yourapp
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import com.android.tools.screenshot.PreviewTest
import com.example.yourapp.ui.theme.MyApplicationTheme
@PreviewTest
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
MyApplicationTheme {
Greeting("Android!")
}
}
Générer des images de référence
Une fois que vous avez configuré une classe de test, vous devez générer des images de référence pour chaque aperçu. Ces images de référence permettent d'identifier les modifications ultérieurement, après avoir apporté des modifications au code. Pour générer des images de référence pour vos tests de capture d'écran d'aperçu de composable, exécutez la tâche Gradle suivante:
- Linux et macOS:
./gradlew updateDebugScreenshotTest
(./gradlew :{module}:update{Variant}ScreenshotTest
) - Windows:
gradlew updateDebugScreenshotTest
(gradlew :{module}:update{Variant}ScreenshotTest
)
Une fois la tâche terminée, recherchez les images de référence dans app/src/screenshotTestDebug/reference
({module}/src/screenshotTest{Variant}/reference
).
Générer un rapport de test
Une fois les images de référence créées, exécutez la tâche de validation pour prendre une nouvelle capture d'écran et la comparer à l'image de référence:
- Linux et macOS:
./gradlew validateDebugScreenshotTest
(./gradlew :{module}:validate{Variant}ScreenshotTest
) - Windows:
gradlew validateDebugScreenshotTest
(gradlew :{module}:validate{Variant}ScreenshotTest
)
La tâche de validation crée un rapport HTML à l'emplacement {module}/build/reports/screenshotTest/preview/{variant}/index.html
.
Problèmes connus
Vous trouverez la liste actuelle des problèmes connus dans le composant de suivi des problèmes de l'outil. Signalez tout autre commentaire et problème via l'outil de suivi des problèmes.
Mises à jour des versions
Notes de version et modifications apportées aux versions en cours.
0.0.1-alpha10
Cette version introduit les éléments suivants:
À partir de cette version, vous devez marquer toutes vos fonctions d'aperçu avec l'annotation
@PreviewTest
. Les aperçus sans annotation ne seront pas exécutés.Le répertoire d'images de référence est passé de
{module}/src/{variant}/screenshotTest/reference
à{module}/src/screenshotTest{Variant}/reference
. Cela permet de s'assurer que ces images de référence générées ne feront pas partie du code de production et d'être aligné sur la structure de répertoire des autres types de tests.La tâche
{variant}PreviewScreenshotRender
est supprimée. Le rendu d'image est migré vers le moteur de test JUnit.La tâche
update{Variant}ScreenshotTest
compare les nouvelles images de rendu aux images de référence avant la mise à jour. Il ne met à jour que les images dont les différences sont supérieures à un seuil spécifié. L'indicateur de ligne de commande--updateFilter
a été supprimé.
0.0.1-alpha06
Cette version introduit les éléments suivants:
Seuil de différence d'image: ce nouveau paramètre de seuil global vous permet de mieux contrôler les comparaisons de captures d'écran. Pour configurer, mettez à jour le fichier build.gradle.kts de votre module:
android {
testOptions {
screenshotTests {
imageDifferenceThreshold = 0.0001f // 0.01%
}
}
}
Ce seuil s'appliquera à tous les tests de capture d'écran définis dans le module.
- Correction de bugs: correction de certains bugs du moteur de rendu Compose et prise en charge des compositions vides
- Améliorations des performances: l'algorithme de comparaison des images a été mis à jour pour être plus rapide