Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

계측 테스트 시작하기

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

이 가이드에서는 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 콘솔에서 캡처된 스크린샷을 볼 수 있습니다.

샘플 앱 사용해 보기

이 기능을 사용해 보려면 메모장 샘플 앱 을 다운로드하십시오. 스크린샷을 찍는 기능은 이미 메모장 프로젝트에 통합되어 있습니다.

1단계. 프로젝트에 스크린샷 라이브러리 추가

  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
        // ...
      }
    }
  2. 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle )에서 Test Lab 스크린샷 라이브러리에 대한 종속성을 추가합니다.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestImplementation 'com.google.firebase:testlab-instr-lib:0.2'
      // ...
    }
  3. 테스트의 AndroidManifest.xml 파일에서 <instrumentation> 요소 내의 메타데이터 태그에 FirebaseScreenCaptureProcessor 를 등록합니다. 대신 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>
    ...
    
  4. 앱의 AndroidManifest.xml 파일에서 <manifest> 요소 내에 다음 줄을 추가합니다.

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. 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 이상에서 전체 화면 캡처를 가져옵니다.

    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단계. 테스트 빌드 및 실행

  1. 앱을 빌드하고 APK를 테스트합니다(지침은 앱 테스트 참조).

  2. Firebase 콘솔의 Test Lab 대시보드 에 APK 파일을 업로드합니다.

  3. 마지막으로 테스트를 실행합니다.

4단계. 테스트 스크린샷 보기

테스트가 완료되면 Firebase 콘솔에서 찍은 모든 스크린샷을 볼 수 있습니다.

  1. 테스트 탭에서 완료된 테스트를 선택한 다음 결과 탭을 클릭합니다.

  2. 테스트를 다시 선택한 다음 나타나는 스크린샷 탭을 클릭합니다.

(선택 사항) 추가 테스트 기능 사용

Test Lab으로 실행하기 전에 테스트에서 다음 기능을 활성화할 수 있습니다.

오케스트레이터 활성화

Android Test Orchestrator 는 앱의 각 계측 테스트를 독립적으로 실행하는 도구입니다. Test Lab은 항상 최신 버전의 Orchestrator를 사용합니다.

Test Lab용 Orchestrator를 활성화하려면 계측 테스트 설정에서 추가 옵션 > Orchestrator로 실행을 클릭합니다.

장점과 단점

  • 이점: 공유 상태가 없습니다. 각 테스트는 자체 계측 인스턴스에서 실행되므로 테스트 간에 공유 상태가 누적되지 않습니다.
  • 이점: 격리된 충돌. 테스트가 충돌하면 해당 계측만 종료되고 제품군의 다른 테스트는 계속 실행할 수 있습니다.
  • 단점: 더 긴 런타임 . 각 테스트는 자체 계측 인스턴스를 실행하므로 테스트 프로세스가 전체적으로 약간 더 오래 걸립니다. 선택하지 않으면 실행 시간이 증가하여 할당량 사용 또는 청구 시간 에 잠재적으로 영향을 미치고 기기의 시간 제한 에 도달할 수 있습니다.

샤딩 활성화

테스트 샤딩은 테스트 세트를 개별적으로 개별적으로 실행되는 하위 그룹(샤드)으로 나눕니다. Test Lab은 여러 장치를 사용하여 각 샤드를 병렬로 자동 실행하고 더 짧은 시간에 전체 테스트 세트를 완료합니다.

테스트 샤딩 작동 방식

N개의 샤드를 생성한다고 가정합니다. 선택한 각 장치에 대해 Test Lab은 N개의 동일한 장치를 가동하고 각 장치에서 테스트의 하위 집합을 실행합니다. 즉, 샤딩된 테스트 사례는 항상 장치당 하나의 테스트 실행을 초래하는 비분할된 테스트 사례와 달리 장치당 여러 테스트 실행을 초래할 수 있음을 의미합니다(Test Lab의 주요 개념에 대한 간략한 개요는 주요 개념 참조).

Firebase 콘솔에서 테스트 샤딩을 활성화할 수 있습니다.

  1. 계측 테스트 설정에서 추가 옵션 을 클릭합니다.

  2. 샤딩 섹션에서 실행할 샤드 수를 입력합니다.

테스트 샤드에 대한 청구

Test Lab은 AndroidJUnitRunner의 내장 샤딩 메커니즘을 활용하여 샤드를 구현합니다. 빈 샤드(테스트 케이스가 할당되지 않은 샤드) 회전에 대한 요금이 부과되지 않도록 하려면 생성하는 샤드 수가 총 테스트 케이스 수보다 작아야 합니다. 각 테스트 케이스를 실행하는 데 걸리는 시간에 따라 일반적으로 샤드당 2-10개의 테스트 케이스를 할당하는 것이 좋습니다.

청구에 대한 자세한 내용은 사용량, 할당량 및 청구 를 참조하십시오.