gcloud CLI로 테스트 시작

이 가이드에서는 gcloud CLI를 사용하여 계측, Robo 또는 게임 루프 테스트를 실행하는 방법을 설명합니다.

Test Lab에서 Android 앱에 사용할 수 있는 gcloud 명령어의 전체 목록은 gcloud firebase test android 참고 문서를 확인하세요.

시작하기 전에

아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다.

1단계: gcloud CLI 설정

  1. Google Cloud SDK를 다운로드합니다.
  2. 여기에는 gcloud CLI 도구가 포함됩니다.

  3. 설치 프로그램이 최신 버전인지 확인합니다.
    gcloud components update
    
  4. Google 계정으로 gcloud CLI에 로그인합니다.
    gcloud auth login
    
  5. gcloud에서 Firebase 프로젝트를 설정합니다. 여기서 PROJECT_ID는 Firebase 프로젝트의 ID입니다.
    gcloud config set project PROJECT_ID
    

2단계: 사용 가능한 테스트 기기 확인

다음 gcloud 명령어를 사용하여 테스트에 사용할 수 있는 테스트 기기와 언어를 확인합니다.

또는 샘플 Notepad 앱을 다운로드하여 명령어를 바로 실행할 수도 있습니다. NotePad/app/build/outputs/apk/에 있는 바이너리 파일 app-debug-unaligned.apk와 계측 테스트 파일 app-debug-test-unaligned.apk를 사용합니다.

  • models list: 현재 테스트에 사용할 수 있는 Android 기기 목록을 가져옵니다.

    gcloud firebase test android models list
    

    명령어 결과는 다음과 같습니다.

    • MODEL_ID 열에는 나중에 기기 모델에서 테스트를 실행하는 데 사용할 수 있는 식별자가 포함됩니다.
    • OS_VERSION_ID 열에는 기기에서 지원하는 운영체제 버전이 포함됩니다.

    결과 예시

    gcloud firebase test android models list 결과

  • models describe: 특정 Android MODEL_ID에 대한 자세한 정보를 가져옵니다.

    gcloud firebase test android models describe MODEL_ID
    

    결과에는 기기 모델의 브랜드, 제조업체, OS 버전, 지원되는 API 수준, 지원되는 Application Binary Interface(ABI), 출시 날짜, 기기가 실제 또는 가상인지 여부가 포함됩니다.

  • versions list: 현재 테스트에 사용할 수 있는 OS 버전 목록을 가져옵니다.

    gcloud firebase test android versions list
    

    명령어 결과에서 처음 두 열(OS_VERSION_IDVERSION) 중 하나의 식별자를 사용하여 나중에 Android OS 버전에 대한 테스트를 실행할 수 있습니다. 테스트할 Android OS 버전을 지정하지 않으면 TAGS 열에 표시된 기본값이 사용됩니다.

    결과 예시

    gcloud android versions list

  • locales list: 현재 테스트할 수 있는 언어의 목록을 가져옵니다.

    gcloud firebase test android versions list
    

    명령어 결과의 첫 번째 열인 LOCALE에는 나중에 특정 언어로 테스트를 실행하는 데 사용할 수 있는 식별자가 포함되어 있습니다. 테스트할 언어를 지정하지 않으면 영어를 기본 언어로 사용합니다.

3단계: 테스트 실행

이제 앱을 테스트할 때 사용할 수 있는 기기 모델, 언어, OS 버전의 범위를 알았으므로 gcloud firebase test android run 명령어와 --device 플래그로 기기를 지정하여 Robo 또는 ���측 테스트를 실행할 수 있습니다.

Robo 테스트 실행

계측 테스트가 없더라도 앱에서 버그를 찾을 수 있습니다. Robo 테스트를 사용하여 앱의 사용자 인터페이스를 자동으로 검토하세요. Robo 테스트는 앱의 사용자 인터페이스를 통해 다양한 경로에 대한 정적 분석을 수행하여 앱을 실행한 뒤, 앱을 크롤링하여 장애와 기타 잠재적인 문제점을 발견합니다.

Robo 테스트를 실행하려면 다음 명령어 예시를 실행하세요.

gcloud firebase test android run \
  --type robo \
  --app app-debug-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape \
  --timeout 90s \
  --client-details matrixLabel="Example matrix label"
  • --type 값을 지정하지 않으면 --type robo 매개변수가 암묵적으로 적용됩니다.
  • Firebase Console에서 테스트 매트릭스를 식별하고 찾는 데 도움이 되도록 선택사항인 --client-details matrixLabel="Example matrix label" 플래그를 사용하여 테스트 매트릭스에 라벨을 지정할 수 있습니다.
  • gcloud help firebase test android run을 입력하여 테스트를 실행할 수 있는 전체 명령줄 옵션을 확인할 수 있습니다.

이러한 인수를 명령줄에서 지정하는 대신 YAML 형식 인수 파일에 인수를 지정할 수도 있습니다. 이 기능을 사용하는 방법을 확인하려면 gcloud topic arg-files를 실행하세요.

Robo 테스트의 결과를 조사하는 방법은 테스트 결과 분석을 참조하세요.

도구 작동 테스트 실행

이제 gcloud 명령줄 도구를 사용하여 지정한 Android 기기 설정으로 Notepad 앱의 Espresso 테스트를 실행합니다. 다음과 같이 instrumentation 테스트 유형을 사용하여 app-debug-test-unaligned.apk의 테스트를 실행하면 됩니다.

gcloud firebase test android run \
  --type instrumentation \
  --app app-debug-unaligned.apk \
  --test app-debug-test-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape
  --client-details matrixLabel="Example matrix label"
  • 테스트 APK가 --test로 지정된 경우 --type 계측 매개변수가 암묵적으로 적용됩니다.
  • Firebase Console에서 테스트 매트릭스를 식별하고 찾는 데 도움이 되도록 선택사항인 --client-details matrixLabel="Example matrix label" 플래그를 사용하여 테스트 매트릭스에 라벨을 지정할 수 있습니다.
  • gcloud help firebase test android run을 입력하여 테스트를 실행할 수 있는 전체 명령줄 옵션을 확인할 수 있습니다.

이러한 인수를 명령줄에서 지정하는 대신 YAML 형식 인수 파일에 인수를 지정할 수도 있습니다. 이 기능을 사용하는 방법을 확인하려면 gcloud topic arg-files를 실행하세요.

gcloud CLI는 Android Test Orchestrator를 지원합니다. Orchestrator를 사용하려면 AndroidJUnitRunner v1.1 이상이 필요합니다. Orchestrator를 사용 설정하려면 gcloud firebase test android run
--use-orchestrator 플래그와 함께 사용하세요. 사용 중지하려면 --no-use-orchestrator 플래그를 사용합니다.

위에 나와 있지 않은 추가 플래그를 사용하여 Test Lab이 계측 테스트를 실행하는 방법을 제어할 수도 있습니다. 예를 들어 --test-targets 플래그를 사용하여 테스트 APK에서 사용되는 단일 클래스 또는 클래스 메서드를 테스트할 수 있습니다. 또한 --num-flaky-test-attempts 플래그를 사용하여 실패한 테스트가 실제로 불안정한지 아닌지를 확인할 수 있습니다. 이 플래그는 어떤 이유로든 테스트 사례가 하나 이상 실패할 경우 테스트 실행을 다시 시도할 횟수를 지정하는 플래그입니다. 자세한 내용은 gcloud firebase test android run을 참조하세요.

계측 테스트의 코드 적용 범위 보고서

Test Lab은 코드 범위 보고 도구 EMMAJaCoCo를 지원합니다. 앱의 빌드에 이러한 도구가 통합된 경우 몇 가지 추가 인수로 gcloud firebase test android run을 실행하여 Test Lab 테스트의 코드 적용 범위 보고서를 가져올 수 있습니다. Android Test Orchestrator가 사용 설정되지 않은 경우 다음을 사용합니다.

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables coverage=true,coverageFile="/sdcard/Download/coverage.ec" \
  --directories-to-pull /sdcard/Download

Android Test Orchestrator를 사용하는 동안 코드 적용 범위 보고서를 생성하는 경우 환경 변수를 다음과 같이 수정합니다.

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \
  --directories-to-pull /sdcard/Download

Test Lab에서 테스트 실행이 완료되면 Google Cloud Storage에서 코드 범위 보고서를 찾으세요.

  1. gcloud 도구에서 터미널의 테스트 결과 표 위에 출력한 Firebase Console 링크를 엽니다.
  2. 링크의 목록에서 테스트 실행을 클릭하면 실행 세부정보 페이지가 열립니다.
  3. 테스트 결과를 클릭하여 해당 실행의 테스트 결과가 있는 Cloud Storage 버킷으로 이동합니다.
  4. artifacts/coverage.ec를 열어 코드 적용 범위 보고서를 확인합니다.

테스트 결과 분석

몇 분 후에 gcloud 도구가 테스트 결과의 기본적인 요약을 출력합니다.

명령 테스트 결과

명령줄 테스트 실행의 출력에는 테스트 결과를 볼 수 있는 링크도 포함됩니다. 이러한 결과를 해석하는 방법에 대한 자세한 내용은 Android용 Firebase Test Lab 결과 분석을 참조하세요.

Robo 테스트에서 커스텀 로그인 및 텍스트 입력 사용

--no-auto-google-login 매개변수를 사용하지 않으면 Robo 테스트는 Google 계정으로 인증하는 로그인 화면을 자동으로 완료합니다. 사용자가 제공한 테스트 계정 인증 정보를 사용하여 커스텀 로그인 화면을 완료할 수도 있습니다. 이 매개변수로 앱에서 사용하는 다른 텍스트 필드에 커스텀 입력 텍스트를 제공할 수도 있습니다.

앱에서 텍스트 필드를 완성하려면 --robo-directives 매개변수를 사용하고 쉼표로 구분된 key-value 쌍 목록을 제공합니다. 여기에서 key는 대상 UI 요소의 Android 리소스 이름이고 value는 텍스트 문자열입니다. 또한 이 플래그를 사용하여 특정 UI 요소(예: '로그아웃' 버튼)를 무시하도록 Robo에 지시할 수 있습니다. EditText 필드는 지원되지만 WebView UI 요소의 텍스트 필드는 지원되지 않습니다.

예를 들어 커스텀 로그인을 위해 다음과 같은 매개변수를 사용할 수 있습니다.

--robo-directives username_resource=username,password_resource=password

사용 가능한 명령어 및 플래그

Test Lab gcloud CLI에는 다양한 사양으로 테스트를 실행할 수 있는 몇 가지 명령어와 플래그가 있습니다.

  • Android Test Orchestrator 플래그: Instrumentation의 자체 호출 시 각 앱의 테스트를 실행할 수 있는 도구인 Orchestrator를 사용 설정하는 플래그입니다. Test Lab은 항상 최신 버전의 Orchestrator를 실행합니다.

  • 게임 루프 테스트 플래그: 게임 앱에서 플레이어 동작을 시뮬레이션하기 위해 '데모 모드'를 사용 설정하고 제어하는 구성 플래그 집합입니다. Test Lab으로 게임 루프 테스트 실행에 대해 자세히 알아보세요.

  • 균일한 샤딩 플래그(베타): 테스트 사례를 균등하게 배포할 샤드 수를 지정하는 플래그입니다. 샤드는 별도의 기기에서 동시에 실행됩니다.

  • 수동 샤딩 플래그(베타): 샤드(테스트 사례 그룹)에서 실행할 패키지, 클래스 또는 테스트 사례 그룹을 지정하는 플래그입니다. 샤드는 별도의 기기에서 동시에 실행됩니다.

  • 네트워크 트래픽 프로필 플래그(베타): 테스트에서 실제 기기와 함께 사용할 네트워크 프로필을 지정하는 플래그입니다. 네트워크 프로필은 다양한 네트워크 조건을 에뮬레이션하므로 안정적이지 않거나 예측할 수 없는 네트워크에서 앱의 성능을 테스트할 수 있습니다.

Test Lab으로 gcloud 명령어 스크립팅

셸 스크립트 또는 일괄처리 파일을 사용하여 gcloud 명령줄에서 실행할 모바일 앱 테스트 명령을 자동화할 수 있습니다. 다음 bash 스크립트 예시에서는 2분의 제한 시간으로 계측 테스트를 실행하고 테스트가 성공적으로 완료되었는지 보고합니다.

if gcloud firebase test android run --app my-app.apk --test my-test.apk --timeout 2m
then
    echo "Test matrix successfully finished"
else
    echo "Test matrix exited abnormally with non-zero exit code: " $?
fi

종료 코드 스크립팅

Test Lab은 스크립트 또는 일괄처리 파일을 사용하여 실행하는 테스트의 결과를 보다 쉽게 이해할 수 있도록 몇 가지 종료 코드를 제공합니다.

Test Lab 종료 코드 스크립팅

종료 코드 참고사항
0 테스트 실행이 모두 성공했습니다.
1 일반적인 오류가 발생했습니다. 가능한 원인으로는 존재하지 않는 파일 이름, HTTP/네트워크 오류 등이 있습니다.
2 알 수 없는 명령어나 인수가 제공되어 테스트가 종료되었습니다.
10 테스트 실행에 포함된 하나 이상의 테스트 사례(테스트 대상 클래스 또는 클래스 메서드)가 성공하지 못했습니다.
15 Firebase Test Lab에서 예기치 않은 오류로 인해 테스트 매트릭스의 성공 또는 실패 여부를 판단하지 못했습니다.
18 테스트 측정기준이 호환되지 않아 이 테스트 실행의 테스트 환경이 지원되지 않습니다. 선택한 Android API 수준이 선택한 기기 유형에서 지원되지 않는 경우 이 오류가 발생할 수 있습니다.
19 사용자가 테스트 매트릭스를 취소했습니다.
20 테스트 인프라 오류가 발생했습니다.