Testowanie zrzutów ekranu to skuteczny sposób na sprawdzenie, jak interfejs wygląda dla użytkowników. Narzędzie do testowania podglądu tworzenia łączy w sobie prostotę i funkcje kompilowanych podglądów z wyższą produktywnością dzięki uruchamianiu testów zrzutów ekranu po stronie hosta. Testowanie podglądu w widoku tworzenia i testowanie zrzutów ekranu zostało zaprojektowane tak, aby było tak samo łatwe w użyciu jak kompozytowany podgląd.
Test zrzutu ekranu to automatyczny test, który wykonuje zrzut ekranu elementu interfejsu użytkownika, a następnie porównuje go z wcześniej zatwierdzonym obrazem referencyjnym. Jeśli obrazy się nie zgadzają, test się nie powiedzie i wygeneruje raport HTML, który pomoże Ci porównać obrazy i znaleźć różnice.
Za pomocą narzędzia do testowania zrzutów ekranu w ramach podglądu w Compose możesz:
- Użyj
@PreviewTest
, aby utworzyć testy zrzutów ekranu dla dotychczasowych lub nowych kompozycji. - na podstawie tych kompozycji generować obrazy referencyjne.
- wygenerować raport HTML, który wskazuje zmiany w tych podglądach po wprowadzeniu zmian w kodzie;
- Aby testy były bardziej elastyczne, używaj parametrów
@Preview
, takich jakuiMode
lubfontScale
, oraz podglądu wieloelementowego. - Uporządkuj testy za pomocą nowego zestawu
screenshotTest
źródeł.

Wymagania
Aby korzystać z testowania zrzutów ekranu w ramach funkcji Compose Preview, musisz mieć:
- Wtyczka Androida do obsługi Gradle w wersji 8.5.0-beta01 lub nowszej.
- Kotlin w wersji 1.9.20 lub nowszej. Zalecamy użycie wersji Kotlin 2.0 lub nowszej, aby móc korzystać z wtyczki Gradle do kompilatora Compose.
W projekcie musi być włączona funkcja tworzenia. Zalecamy włączenie Compose za pomocą wtyczki Gradle do kompilatora Compose.
.
Skonfiguruj
Aby włączyć to narzędzie, wykonaj te czynności:
- Dodaj do projektu wtyczkę
com.android.compose.screenshot
w wersji0.0.1-alpha10
. - Dodaj wtyczkę do pliku katalogów wersji:
[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"}
- W pliku
build.gradle.kts
na poziomie modułu dodaj wtyczkę w blokuplugins {}
:plugins { alias(libs.plugins.screenshot) }
- Włącz tę właściwość eksperymentalną w pliku
gradle.properties
projektu.android.experimental.enableScreenshotTest=true
- W bloku
android {}
w plikubuild.gradle.kts
na poziomie modułu włącz flagę eksperymentalną, aby używać zestawu źródełscreenshotTest
.android { experimentalProperties["android.experimental.enableScreenshotTest"] = true }
- Dodaj zależności
screenshot-validation-api
iui-tooling
.- Dodaj je do katalogów wersji:
[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"}
- Dodaj je do pliku
build.gradle.kts
na poziomie modułu:dependencies { screenshotTestImplementation(libs.screenshot.validation.api) screenshotTestImplementation(libs.androidx.ui.tooling) }
- Dodaj je do katalogów wersji:
Wyznaczanie kompozycji do użycia w przypadku testów zrzutów ekranu
Aby oznaczyć kompozycje, których chcesz używać do testów zrzutów ekranu, zaznacz je adnotacją @PreviewTest
. Podglądy muszą znajdować się w nowym zbiorze screenshotTest
źródeł, np. app/src/screenshotTest/kotlin/com/example/yourapp/ExamplePreviewScreenshotTest.kt
.
Do tego pliku lub innych plików utworzonych w tym samym zbiorze źródeł możesz dodać więcej komponentów lub podglądów, w tym podglądów zbiorczych.
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!")
}
}
Generowanie obrazów referencyjnych
Po skonfigurowaniu klasy testowej musisz wygenerować obrazy referencyjne dla każdego podglądu. Te obrazy referencyjne są używane do identyfikowania zmian po wprowadzeniu zmian w kodzie. Aby wygenerować obrazy referencyjne do testów zrzutów ekranu w ramach składanych podglądów, uruchom to zadanie Gradle:
- Linux i macOS:
./gradlew updateDebugScreenshotTest
(./gradlew :{module}:update{Variant}ScreenshotTest
) - Windows:
gradlew updateDebugScreenshotTest
(gradlew :{module}:update{Variant}ScreenshotTest
)
Po zakończeniu zadania znajdź obrazy referencyjne w folderze app/src/screenshotTestDebug/reference
({module}/src/screenshotTest{Variant}/reference
).
Generowanie testowego raportu
Gdy obrazy referencyjne zostaną utworzone, uruchom zadanie weryfikacyjne, aby wykonać nowy zrzut ekranu i porównać go z obrazem referencyjnym:
- Linux i macOS:
./gradlew validateDebugScreenshotTest
(./gradlew :{module}:validate{Variant}ScreenshotTest
) - Windows:
gradlew validateDebugScreenshotTest
(gradlew :{module}:validate{Variant}ScreenshotTest
)
Zadanie weryfikacji tworzy raport HTML na stronie {module}/build/reports/screenshotTest/preview/{variant}/index.html
.
Znane problemy
Aktualną listę znanych problemów znajdziesz w komponencie narzędzia do śledzenia problemów. Pozostałe opinie i problemy możesz zgłaszać za pomocą śledzika problemów.
Aktualizacje wersji
informacje o wersji i zmiany w bieżących wersjach.
0.0.1-alpha10
Ta wersja wprowadza:
W tej wersji musisz oznaczyć wszystkie funkcje podglądu adnotacją
@PreviewTest
. Podglądy bez adnotacji nie będą wykonywane.Katalog obrazu odniesienia został zmieniony z
{module}/src/{variant}/screenshotTest/reference
na{module}/src/screenshotTest{Variant}/reference
. Dzięki temu wygenerowane obrazy referencyjne nie będą częścią kodu produkcyjnego i będą zgodne ze strukturą katalogów innych typów testów.Zadanie
{variant}PreviewScreenshotRender
zostało usunięte. Renderowanie obrazów zostało przeniesione do JUnit Test Engine.Przed aktualizacją zadanie
update{Variant}ScreenshotTest
porówna nowe obrazy renderowania z obrazami referencyjnymi. Będzie ona aktualizować tylko te obrazy, w przypadku których różnice przekraczają określony próg. Flaga wiersza poleceń--updateFilter
została usunięta.
0.0.1-alpha06
Ta wersja zawiera:
Próg różnicy obrazów: to nowe ustawienie globalne, które pozwoli Ci uzyskać większą kontrolę nad porównywaniem zrzutów ekranu. Aby skonfigurować, zaktualizuj plik build.gradle.kts modułu:
android {
testOptions {
screenshotTests {
imageDifferenceThreshold = 0.0001f // 0.01%
}
}
}
Ten próg zostanie zastosowany do wszystkich testów zrzutów ekranu zdefiniowanych w module.
- Poprawki błędów: naprawiono niektóre błędy modułu tworzenia wiadomości oraz dodano obsługę pustego tworzenia wiadomości.
- Ulepszenia dotyczące wydajności: algorytm porównywania obrazów został zaktualizowany, aby działał szybciej