gcloud 명령줄에서 Firebase Test Lab 시작하기

Android용 Firebase Test Lab은 gcloud 명령줄 인터페이스(CLI)와 완벽하게 통합되어 Android 앱을 테스트하는 클라우드 기반 인프라를 제공합니다. 이 문서에서는 gcloud 명령줄 인터페이스에서 Test Lab을 시작하는 데 필요한 설치 및 구성 방법을 제시합니다.

Test Lab과 함께 사용할 수 있는 gcloud firebase test android 명령어의 전체 목록은 gcloud firebase test android를 참조하세요.

Firebase 프로젝트 만들기

앱에 Firebase 프로젝트가 없다면 Firebase 콘솔로 이동한 후 새 프로젝트 만들기를 클릭하여 곧바로 프로젝트를 만드세요. 프로젝트의 소유권 또는 수정 권한이 있어야 합니다.

Spark 및 Flame 요금제에서는 Test Lab으로 하루에 테스트를 실행할 수 있는 횟수가 제한됩니다. 일일 할당량 제한 없이 Test Lab을 사용하려면 Firebase Blaze 요금제로 업그레이드해야 합니다.

로컬 Google Cloud SDK 환경 구성

  1. 아직 다운로드하지 않은 경우 gcloud 명령줄 도구를 다운로드합니다. Google Cloud SDK
  2. Cloud SDK 설치가 최신 버전이며 gcloud firebase 명령을 포함하는지 확인합니다.
    gcloud components update
  3. 사용자 인증 정보가 최신 상태인지 확인합니다.
    gcloud auth login
  4. 현재 프로젝트를 gcloud에 설정합니다.
    gcloud config set project PROJECT_ID

테스트 구성 선택

이 예에서는 Notepad라는 간단한 메모용 Android 앱에 대해 몇 가지 테스트를 실행합니다.

  1. notepad.zipNotePad/app/build/outputs/apk/ 디렉토리에 제공된 Notepad 앱의 바이너리 APK 파일(app-debug-unaligned.apk) 및 해당 도구 작동 테스트(app-debug-test-unaligned.apk)를 다운로드합니다.

  2. 다음과 같이 현재 테스트할 수 있는 Android 기기의 목록을 가져옵니다.

    
    $ gcloud firebase test android models list
    
    gcloud firebase test android models list 출력 명령어 출력의 첫 번째 열인 MODEL_ID에는 이후에 특정 모델을 대상으로 테스트를 실행하는 데 사용할 수 있는 식별자가 포함됩니다. OS_VERSION_ID 열에는 기기가 지원하는 운영체제 버전이 표시됩니다. 테스트할 MODEL_ID를 지정하지 않으면 TAGS 열에 표시된 기본값이 사용됩니다.

  3. 다음과 같이 firebase test android models describe 명령으로 특정 Android MODEL_ID에 대해 자세히 알아봅니다.

    
    $ gcloud firebase test android models describe Nexus5
    
    위 예의 명령은 Nexus5 모델에 관해 브랜드, 제조업체, 지원되는 API 수준, 실제 모델인지 아니면 가상 모델인지 등의 세부정보를 제공합니다.

  4. 현재 테스트할 수 있는 Android OS 버전의 목록을 가져옵니다.

    
    $ gcloud firebase test android versions list
    
    gcloud android versions list 명령어 출력에서 처음 두 열(OS_VERSION_ID, VERSION) 중 식별자 하나를 사용하여 이후에 Android OS 버전에 대한 테스트를 실행할 수 있습니다. 테스트할 Android OS 버전을 지정하지 않으면 TAGS 열에 표시된 기본값이 사용됩니다.

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

    
    $ gcloud firebase test android locales list
    
    명령 출력의 첫 번째 열인 LOCALE에는 이후에 특정 언어를 대상으로 테스트를 실행하는 데 사용할 수 있는 식별자가 포함됩니다. 테스트할 언어를 지정하지 않으면 영어를 기본 언어로 사용합니다. 수백 가지 언어가 제공되므로 명령 출력은 생략했습니다.

테스트 실행

이제 앱을 테스트할 때 사용할 수 있는 기기 모델, OS 버전 및 언어의 범위를 알았으므로 해당 정보를 사용하여 gcloud firebase test android run 명령과 --device 플래그로 테스트 기기를 지정할 수 있습니다. 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

--type 값을 지정하지 않으면 --type robo 매개변수가 암묵적으로 적용됩니다. 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

--test로 테스트 APK를 지정하면 --type instrumentation 매개변수가 암묵적으로 적용됩니다. 모든 인수를 명령줄에서 지정하는 대신 YAML 형식 인수 파일에 인수를 지정할 수도 있습니다. 이 기능을 사용하는 방법을 확인하려면 gcloud topic arg-files를 실행하세요.

gcloud CLI의 알파 및 베타 릴리스는 Android 테스트 조정자를 지원합니다. 조정자를 사용하려면 AndroidJUnitRunner v1.0 이상이 필요합니다. 사용 설정하려면 gcloud beta firebase test android run
--use-orchestrator 플래그와 함께 사용하고, 사용 해제하려면 --no-use-orchestrator 플래그를 사용합니다.

참고: 위에 나와 있지 않은 추가 플래그를 사용하여 Test Lab이 도구 작동 테스트를 실행하는 방법을 제어할 수도 있습니다. 예를 들어 --test-targets 플래그로 테스트 APK가 사용하는 클래스 중 하나만 테스트하거나 테스트 APK가 사용하는 클래스의 메소드 중 하나만 테스트할 수 있습니다. 자세한 내용은 gcloud firebase test android run을 참조하세요.

도구 작동 테스트의 코드 범위 보고서

Test Lab은 EMMAJaCoCo 코드 범위 보고서 도구를 지원합니다. 앱의 빌드에 이러한 도구가 통합되어 있는 경우 다음 인수와 함께 gcloud firebase test android run 명령어를 실행하여 Test Lab 테스트의 코드 범위 보고서를 가져올 수 있습니다.

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/coverage.ec" \
  --directories-to-pull /sdcard

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

  1. Firebase 콘솔 링크를 엽니다. 터미널의 테스트 결과 표 위에 gcloud 도구가 인쇄되어 있습니다.
  2. 링크의 목록에서 테스트 실행을 클릭하면 실행 세부정보 페이지가 열립니다.
  3. 테스트 결과를 클릭하여 해당 실행의 테스트 결과가 있는 Google 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는 텍스트 문자열입니다. EditText 필드는 지원되지만 WebView UI 요소의 텍스트 필드는 지원되지 않습니다.

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

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

베타 명령 및 플래그

현재 Test Lab gcloud CLI는 다음을 비롯하여 공개 베타에서 사용할 수 있는 몇 가지 명령과 플래그를 지원합니다.

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

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

  • Android 테스트 조정자 플래그: 도구 작동의 자체 호출에서 각 앱의 테스트를 실행할 수 있는 도구인 조정자를 사용 설정하는 플래그입니다. Test Lab은 항상 최신 버전의 조정자를 실행합니다. Android 테스트 조정자에 대해 자세히 알아보세요.

  • 불안정한 테스트 시도 플래그: 어떤 이유로든 테스트 사례가 하나 이상 실패할 경우 테스트 실행을 다시 시도할 횟수를 지정하는 플래그입니다. 모든 추가 시도는 동시에 실행됩니다.

  • Robo 지시문 명령어 무시: 리소스 이름이 맞춤 설정값과 같거나 맞춤 설정값으로 시작하는 모든 UI 요소를 무시하도록 Robo 테스트에 지시하는 명령어입니다.

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 테스트 인프라 오류가 발생했습니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.