이 가이드에서는 Firebase Test Lab을 사용하여 계측 테스트를 준비하고 실행하는 방법을 설명합니다. 이 가이드를 사용하려면 Espresso 또는 UI Automator Android 테스트 프레임워크를 사용하는 개발자나 개발자 팀에서 작성한 계측 테스트가 필요합니다. 계측 테스트는 실제 기기에서 최대 45분, 가상 기기에서 최대 60분 동안 실행될 수 있습니다.
이후 단계에서 앱의 APK와 테스트 APK를 Firebase에 업로드합니다.
(선택사항) 앱에 스크린샷 라이브러리 추가
Firebase Test Lab에는 Espresso 테스트 프레임워크로 작성된 테스트와 같이 계측 테스트를 실행할 때 AndroidX의 ScreenCapture로 만든 스크린샷을 처리하는 데 사용할 수 있는 라이브러리(testlab-instr-lib)가 포함되어 있습니다.
이 섹션에서는 AndroidX 라이브러리로 ScreenCapture
객체를 만들고 testlab-instr-lib를 사용하여 처리하는 방법을 설명합니다.
계측 테스트가 실행된 후 Firebase Console에서 캡처된 스크린샷을 볼 수 있습니다.
샘플 앱 사용해 보기
NotePad 샘플 앱을 다운로드하여 이 기능을 사용해 보세요. 스크린샷 캡처 기능은 이미 NotePad 프로젝트에 통합되어 있습니다.
1단계: 프로젝트에 스크린샷 라이브러리 추가
테스트 프로젝트의 루트 수준(프로젝트 수준) Gradle 파일(
build.gradle
)에서 모든 저장소 섹션에 Google의 Maven 저장소를 추가합니다.buildscript { repositories { // Add the following line: google() // Google's Maven repository } dependencies { // ... // Check that you have the following line (if not, add it): classpath 'com.google.gms:google-services:4.3.8' // Google Services plugin } } allprojects { // ... repositories { // Add the following line: google() // Google's Maven repository // ... } }
모듈(앱 수준) Gradle 파일(일반적으로
app/build.gradle
)에서 Test Lab 스크린샷 라이브러리의 종속 항목을 추가합니다.dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2' // ... }
테스트의
AndroidManifest.xml
파일에서FirebaseScreenCaptureProcessor
를<instrumentation>
요소 내 메타데이터 태그에 등록합니다. 대신 AndroidJUnitRunner에서 인수로 프로세서를 지정할 수도 있습니다(방법은 AndroidJUnitRunner 참조 문서 확인).<instrumentation // Check that you have the following line (if not, add it): android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner android:targetPackage="com.your.package.name"> // Add the following: <meta-data android:name="screenCaptureProcessors" android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" /> </instrumentation> ...
앱의
AndroidManifest.xml
파일에서<manifest>
요소 내에 다음 줄을 추가합니다.<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
AndroidManifest.xml
파일에서<manifest>
태그 내에 다음 줄을 추가하여 앱의 시스템 권한을 지정합니다. Android 10(API 수준 29) 이상에서 테스트하는 경우WRITE_EXTERNAL_STORAGE
권한을 생략합니다(앱에서 스크린샷을 기기에 읽고 쓰기 위해 이 권한이 필요하지 않음).<manifest ... > <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
2단계: 테스트 중 스크린샷 찍기
테스트 중 스크린샷을 만들 시점에 AndroidX 라이브러리에서 Screenshot.capture()
메서드를 호출합니다. 그러면 ScreenCapture
객체가 생성됩니다.
ScreenCapture
객체에서 process()
를 호출하면 AndroidManifest.xml
에 등록된 ScreenCaptureProcessor를 사용하여 처리됩니다. 등록된 프로세서가 없는 경우 BasicScreenCaptureProcessor
가 사용됩니다.
FirebaseScreenCaptureProcessor
를 등록했으므로 스크린샷이 FirebaseScreenCaptureProcessor
를 통해 처리되고 Firebase Test Lab으로 테스트를 실행할 때 결과와 함께 확인할 수 있습니다.
ScreenCapture
생성 사용 사례 예시:
API Build.VERSION_CODES.JELLY_BEAN_MR2 이상에서 전체 ScreenCapture를 생성합니다.
Screenshot.capture()
모든 API 수준에서 활동의
ScreenCapture
를 생성합니다. 이 옵션은 Build.VERSION_CODES.JELLY_BEAN_MR2 이하의 기기에서 사용할 수 있는 유일한 옵션입니다.@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
ScreenCapture 처리 사용 사례 예시
FirebaseScreenCaptureProcessor
를 통해ScreenCapture
를 처리합니다.Screenshot.capture().process();
지정된
ScreenCaptureProcessor
를 통해ScreenCapture
를 처리합니다(따라서 프로세서 등록 건너뛰기 가능).Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);
ScreenCapture
의 이름과 형식을 설정하고 등록된 프로세서를 사용하여 처리합니다.Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
3단계: 테스트 빌드 및 실행
앱을 빌드하고 APK를 테스트합니다(안내는 앱 테스트 참조).
Firebase Console의 Test Lab 대시보드에 APK 파일을 업로드합니다.
마지막으로 테스트를 실행합니다.
4단계: 테스트 스크린샷 보기
테스트가 완료되면 Firebase Console에서 생성된 스크린샷을 볼 수 있습니다.
테스트 탭에서 완료된 테스트를 선택한 후 결과 탭을 클릭합니다.
테스트를 다시 선택한 다음 표시되는 스크린샷 탭을 클릭합니다.
(선택사항) 추가 테스트 기능 사용 설정
Test Lab으로 테스트를 실행하기 전에 테스트에서 다음 기능을 사용 설정할 수 있습니다.
Orchestrator 사용 설정
Android Test Orchestrator는 앱의 각 계측 테스트를 개별적으로 실행하는 도구입니다. Test Lab은 항상 최신 버전의 조정자를 사용합니다.
Test Lab에서 조정자를 사용 설정하려면 계측 테스트 설정에서 추가 옵션 > 조정자로 실행을 클릭합니다.
장점 및 단점
- 장점: 공유 상태 없음. 각 테스트가 자체 계측 인스턴스에서 실행되므로 테스트 간에 공유 상태가 누적되지 않습니다.
- 장점: 오류 격리. 테스트 중 하나에서 오류가 발생해도 오류가 발생한 테스트의 계측만 종료되고 다른 테스트는 계속 실행됩니다.
- 단점: 런타임 증가. 각 테스트는 자체 계측 인스턴스를 실행하므로 전체 테스트 처리에 다소 시간이 걸립니다. 확인하지 않는 경우 실행 시간이 길어지면 할당량 사용 또는 청구 시간이 영향을 받고 기기의 타임아웃 시간이 초과될 수 있습니다.
샤딩 사용 설정
테스트에 샤딩을 수행하면 일련의 테스트가 개별적으로 분리되어 실행되는 하위 그룹(샤드)으로 분할됩니다. Test Lab은 자동으로 여러 기기를 사용해 각 샤드를 동시 실행하여 전체 테스트 완료 시간을 단축합니다.
테스트 샤딩 작동 방식
샤드 N개를 만든다고 가정해보겠습니다. 선택한 각 기기에서 Test Lab은 동일한 기기 N개를 가동하고 각 기기에서 테스트 일부를 실행합니다. 즉, 샤딩하지 않은 테스트 사례에서는 항상 기기마다 테스트가 1번 실행되지만 샤딩한 테스트 사례에서는 기기마다 테스트가 여러 번 실행됩니다. Test Lab의 핵심 개념에 대한 간략한 개요는 핵심 개념을 참조하세요.
Firebase Console에서 테스트 샤딩을 사용 설정할 수 있습니다.
계측 테스트 설정에서 추가 옵션을 클릭합니다.
샤딩 섹션에서 실행할 샤드 수를 입력합니다.
테스트 샤드 비용 청구
Test Lab은 AndroidJUnitRunner의 기본 제공 샤딩 메커니즘을 활용하여 샤드를 구현합니다. 빈 샤드(테스트 사례가 할당되지 않은 샤드) 가동 시 요금 청구를 방지하려면 만든 샤드 수가 총 테스트 사례 수보다 적어야 합니다. 각 테스트 사례를 실행하는 데 걸리는 시간에 따라 일반적으로 샤드마다 테스트 사례를 2~10개 할당하는 것이 좋습니다.
결제에 대한 자세한 내용은 사용량, 할당량, 결제를 참조하세요.