스크린샷 테스트는 UI가 사용자에게 어떻게 표시되는지 확인하는 효과적인 방법입니다. Compose 미리보기 스크린샷 테스트 도구는 컴포저블 미리보기의 단순성과 기능을 호스트 측 스크린샷 테스트 실행의 생산성 향상과 결합합니다. Compose 미리보기 스크린샷 테스트는 컴포저블 미리보기만큼 사용하기 쉽게 설계되었습니다.
스크린샷 테스트는 UI의 스크린샷을 찍은 다음 이전에 승인된 참조 이미지와 비교하는 자동화된 테스트입니다. 이미지가 일치하지 않으면 테스트가 실패하고 차이점을 비교하고 찾는 데 도움이 되는 HTML 보고서가 생성됩니다.
Compose 미리보기 스크린샷 테스트 도구를 사용하면 다음 작업을 할 수 있습니다.
@PreviewTest
를 사용하여 기존 또는 새 컴포저블 미리보기의 스크린샷 테스트를 만듭니다.- 이러한 컴포저블 미리보기에서 참조 이미지를 생성합니다.
- 코드를 변경한 후 이러한 미리보기의 변경사항을 식별하는 HTML 보고서를 생성합니다.
uiMode
또는fontScale
와 같은@Preview
매개변수와 다중 미리보기를 사용하여 테스트를 확장하세요.- 새
screenshotTest
소스 세트를 사용하여 테스트를 모듈화합니다.

요구사항
Compose 미리보기 스크린샷 테스트를 사용하려면 다음이 필요합니다.
- Android Gradle 플러그인 8.5.0-beta01 이상
- Kotlin 1.9.20 이상 Compose 컴파일러 Gradle 플러그인을 사용할 수 있도록 Kotlin 2.0 이상을 사용하는 것이 좋습니다.
프로젝트에 Compose가 사용 설정되어 있습니다. Compose 컴파일러 Gradle 플러그인을 사용하여 Compose를 사용 설정하는 것이 좋습니다.
설정
도구를 사용 설정하려면 다음 단계를 따르세요.
- 프로젝트에
com.android.compose.screenshot
플러그인 버전0.0.1-alpha10
를 추가합니다. - 버전 카탈로그 파일에 플러그인을 추가합니다.
[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"}
- 모듈 수준
build.gradle.kts
파일에서plugins {}
블록에 플러그인을 추가합니다.plugins { alias(libs.plugins.screenshot) }
- 프로젝트의
gradle.properties
파일에서 실험용 속성을 사용 설정합니다.android.experimental.enableScreenshotTest=true
- 모듈 수준
build.gradle.kts
파일의android {}
블록에서 실험 플래그를 사용 설정하여screenshotTest
소스 세트를 사용합니다.android { experimentalProperties["android.experimental.enableScreenshotTest"] = true }
screenshot-validation-api
및ui-tooling
종속 항목을 추가합니다.- 버전 카탈로그에 추가합니다.
[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"}
- 모듈 수준
build.gradle.kts
파일에 다음을 추가합니다.dependencies { screenshotTestImplementation(libs.screenshot.validation.api) screenshotTestImplementation(libs.androidx.ui.tooling) }
- 버전 카탈로그에 추가합니다.
스크린샷 테스트에 사용할 컴포저블 미리보기를 지정합니다.
스크린샷 테스트에 사용할 컴포저블 미리보기를 지정하려면 미리보기를 @PreviewTest
주석으로 표시합니다. 미리보기는 새 screenshotTest
소스 세트(예: app/src/screenshotTest/kotlin/com/example/yourapp/ExamplePreviewScreenshotTest.kt
)에 있어야 합니다.
이 파일 또는 동일한 소스 세트에서 만든 다른 파일에 컴포저블 또는 미리보기를 더 추가할 수 있습니다(다중 미리보기 포함).
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!")
}
}
참조 이미지 생성
테스트 클래스를 설정한 후에는 각 미리보기의 참조 이미지를 생성해야 합니다. 이러한 참조 이미지는 나중에 코드를 변경한 후 변경사항을 식별하는 데 사용됩니다. 컴포저블 미리보기 스크린샷 테스트의 참조 이미지를 생성하려면 다음 Gradle 태스크를 실행합니다.
- Linux 및 macOS:
./gradlew updateDebugScreenshotTest
(./gradlew :{module}:update{Variant}ScreenshotTest
) - Windows:
gradlew updateDebugScreenshotTest
(gradlew :{module}:update{Variant}ScreenshotTest
)
작업이 완료되면 app/src/screenshotTestDebug/reference
({module}/src/screenshotTest{Variant}/reference
)에서 참조 이미지를 찾습니다.
테스트 보고서 생성
참조 이미지가 있으면 validate 작업을 실행하여 새 스크린샷을 찍고 참조 이미지와 비교합니다.
- Linux 및 macOS:
./gradlew validateDebugScreenshotTest
(./gradlew :{module}:validate{Variant}ScreenshotTest
) - Windows:
gradlew validateDebugScreenshotTest
(gradlew :{module}:validate{Variant}ScreenshotTest
)
확인 작업은 {module}/build/reports/screenshotTest/preview/{variant}/index.html
에 HTML 보고서를 만듭니다.
알려진 문제
도구의 Issue Tracker 구성요소에서 현재 알려진 문제 목록을 확인할 수 있습니다. Issue Tracker를 통해 다른 의견과 문제를 신고하세요.
업데이트 출시
진행 중인 버전의 출시 노트 및 변경사항
0.0.1-alpha10
이 버전에서는 다음을 도입합니다.
이 버전부터 모든 미리보기 함수를
@PreviewTest
주석으로 표시해야 합니다. 주석이 없는 미리보기는 실행되지 않습니다.참조 이미지 디렉터리가
{module}/src/{variant}/screenshotTest/reference
에서{module}/src/screenshotTest{Variant}/reference
(으)로 변경되었습니다. 이렇게 하면 생성된 참조 이미지가 프로덕션 코드의 일부가 되지 않고 다른 테스트 유형의 디렉터리 구조에 맞춰집니다.{variant}PreviewScreenshotRender
작업이 삭제됩니다. 이미지 렌더링이 JUnit 테스트 엔진으로 이전되었습니다.update{Variant}ScreenshotTest
태스크는 업데이트하기 전에 새 렌더링 이미지를 참조 이미지와 비교합니다. 차이가 지정된 임곗값을 초과하는 이미지만 업데이트됩니다.--updateFilter
명령줄 플래그가 삭제되었습니다.
0.0.1-alpha06
이 버전에서는 다음을 도입합니다.
이미지 차이 기준점: 이 새로운 전역 기준점 설정을 사용하면 스크린샷 비교를 더 세부적으로 제어할 수 있습니다. 구성하려면 모듈의 build.gradle.kts를 업데이트합니다.
android {
testOptions {
screenshotTests {
imageDifferenceThreshold = 0.0001f // 0.01%
}
}
}
이 기준점은 모듈에 정의된 모든 스크린샷 테스트에 적용됩니다.
- 버그 수정: 일부 Compose 렌더러 버그 수정 및 빈 Compose 지원 추가
- 성능 개선: 이미지 비교 알고리즘이 더 빠르게 업데이트됨