Testowanie zrzutu ekranu w podglądzie tworzenia

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 jak uiMode lub fontScale, oraz podglądu wieloelementowego.
  • Uporządkuj testy za pomocą nowego zestawu screenshotTest źródeł.
Rysunek 1. Przykładowy raport HTML

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:

  1. Dodaj do projektu wtyczkę com.android.compose.screenshot w wersji 0.0.1-alpha10.
    1. 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"}
    2. W pliku build.gradle.kts na poziomie modułu dodaj wtyczkę w bloku plugins {}:
      plugins {
          alias(libs.plugins.screenshot)
      }
  2. Włącz tę właściwość eksperymentalną w pliku gradle.properties projektu.
    android.experimental.enableScreenshotTest=true
  3. W bloku android {} w pliku build.gradle.kts na poziomie modułu włącz flagę eksperymentalną, aby używać zestawu źródeł screenshotTest.
    android {
        experimentalProperties["android.experimental.enableScreenshotTest"] = true
    }
    
  4. Dodaj zależności screenshot-validation-apiui-tooling.
    1. 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"}
    2. Dodaj je do pliku build.gradle.kts na poziomie modułu:
      dependencies {
        screenshotTestImplementation(libs.screenshot.validation.api)
        screenshotTestImplementation(libs.androidx.ui.tooling)
      }

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