Google Cloud CLI로 테스트

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

1단계: 로컬 Google Cloud SDK 환경 구성

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

  3. 설치가 최신 상태이며 gcloud firebase 명령어를 포함하는지 확인합니다.
          gcloud components update
  4. Google 계정을 사용하여 gcloud CLI에 로그인합니다.
          gcloud auth login
  5. gcloud에서 Firebase 프로젝트를 설정합니다. 여기서 PROJECT_ID는 Firebase 프로젝트의 ID입니다.
         gcloud config set project PROJECT_ID

2단계: 테스트 실행

XCTest 실행

  1. 다음 명령어를 실행하여 테스트 ZIP 파일을 업로드합니다. 앱을 아직 패키징하지 않았다면 XCTest 패키징을 참조하세요.

    cd FOLDER_WITH_TEST_OUTPUT/Build/Products ; \
    zip -r MyTests.zip Debug-iphoneos YOUR_SCHEME_iphoneosDEPLOYMENT_TARGET-arm64.xctestrun
  2. 테스트 측정기준을 선택합니다.

    Test Lab을 사용하면 다양한 iOS 버전, 기기, 화면 방향, 언어를 기준으로 테스트를 실행할 수 있습니다. 이러한 구성을 테스트의 테스트 측정기준이라고 합니다. 각 측정기준의 옵션(예: 기기의 iOS 버전에 지원되는 Xcode 버전)을 보려면 다음 명령어에서 dimensionmodels, versions 또는 locales로 바꿉니다.

    gcloud firebase test ios dimension list

    화면 방향은 옵션이 portraitlandscape뿐이므로 비교적 간단합니다.

    테스트 측정기준의 목록을 살펴본 후 테스트를 실행할 조합을 몇 개 선택합니다. 하루에 실행할 수 있는 최대 조합 수를 확인하려면 요금제를 참조하세요.

  3. 테스트 측정기준 조합을 선택했으면 firebase test ios run 명령어를 사용하여 Test Lab에서 테스트가 실행되도록 할 수 있습니다. 테스트를 실행할 테스트 측정기준 조합마다 각각 --device 플래그를 포함합니다.

    gcloud firebase test ios run --test PATH/TO/MyTests.zip \
     --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
     --device model=MODEL_ID_2,version=VERSION_ID_2,locale=LOCALE_2,orientation=ORIENTATION_2 \
     etc...

    테스트가 빌드된 Xcode 버전과 Test Lab이 사용하는 기본 Xcode 버전 간의 비호환성으로 인해 테스트가 실패할 수 있습니다. 테스트에서 지원되는 Xcode 버전을 지정하려면 --xcode-version 플래그를 사용하세요.

    gcloud firebase test ios run --test PATH/TO/MyTests.zip \
     --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
     --xcode-version=11.3

    Firebase Console에서 테스트 매트릭스를 식별하고 찾는 데 도움이 되도록 다음 예시와 같이 --client-details matrixLabel="<label>" 플래그를 사용하여 필요에 따라 테스트 매트릭스에 라벨을 지정할 수 있습니다.

    gcloud beta firebase test ios run --test PATH/TO/MyTests.zip \
      --device model=MODEL_ID_1,version=VERSION_ID_1,locale=LOCALE_1,orientation=ORIENTATION_1 \
      --client-details matrixLabel="my label"

특별한 사용 권한 테스트

명시적인 앱 ID가 필요한 사용 권한을 테스트하려면 --test-special-entitlements 플래그를 설정하면 됩니다. Test Lab에서 특별한 사용 권한을 지원하기 위해 새로운 번들 식별자로 애플리케이션을 다시 서명하므로 ZIP 파일에 앱의 번들 ID에 대한 직접 참조를 포함하는 리소스가 없는지 확인하세요.

푸시 알림

푸시 알림 요청을 승인하기 위해 사용자는 비공개 서명 키, 키 ID C7FD9DJAA8, 팀 ID 9CKCGNUNUQN을 사용하여 JSON 웹 토큰을 만들 수 있습니다. 생성된 토큰은 1시간 동안 유효하며 60분마다 새로고침해야 합니다. APN에 토큰 기반 연결 설정에 관해 자세히 알아보세요.

앱 그룹

앱 그룹 ID는 전 세계적으로 고유합니다. 즉, 사용자 앱에 다시 서명할 때 Test Lab 개발자 계정과 연결된 앱 그룹 ID만 사용할 수 있습니다. 테스트가 앱 그룹을 사용하면 테스트가 실패합니다.

게임 루프 테스트 실행

gcloud beta firebase test ios run 명령어를 실행하고 다음 플래그를 사용하여 실행을 구성합니다.

게임 루프 테스트용 플래그
--type

필수: 실행할 iOS 테스트 유형을 지정합니다. 테스트 유형 xctest(기본값) 또는 game-loop를 입력할 수 있습니다.

--app

필수: 앱의 IPA 파일에 대한 절대 경로(GCS 또는 파일 시스템)입니다. 이 플래그는 게임 루프 테스트를 실행할 때만 유효합니다.

--scenario-numbers

앱에서 실행할 루프(일명 시나리오)입니다. 하나의 루프, 목록 또는 여러 루프, 루프 범위를 입력할 수 있습니다. 기본 루프는 1입니다.

예를 들어 --scenario-numbers=1-3,5는 루프 1, 2, 3, 5를 실행합니다.

--device-model

테스트를 실행할 실제 기기입니다(사용할 수 있는 가용 기기 확인).

--timeout

테스트를 실행할 최대 기간입니다. 초 단위로 기간을 나타내는 정수를 입력하거나 기간을 더 긴 단위로 나타내는 정수 및 열거 값을 입력할 수 있습니다.

예를 들면 다음과 같습니다.

  • --timeout=200은 테스트가 200초 동안 실행되면 강제 종료합니다.
  • --timeout=1h는 테스트가 1시간 동안 실행되면 강제 종료합니다.

예를 들어 다음 명령어는 iPhone 8 Plus에서 루프 1, 4, 6, 7, 8을 실행하는 게임 루프 테스트를 실행합니다.

gcloud beta firebase test ios run
 --type game-loop --app path/to/my/App.ipa --scenario-numbers 1,4,6-8
 --device-model=iphone8plus

gcloud CLI에 대한 자세한 내용은 참조 문서를 확인하세요.

3단계(선택사항): 향후 빌드할 테스트 자동화

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

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

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

종료 코드 스크립팅

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

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

4단계: 테스트 결과 조사

테스트가 시작되면 테스트 결과 페이지 링크가 전송됩니다. 선택한 구성의 가짓수 및 테스트에 설정한 제한 시간에 따라 테스트 완료까지 몇 분 정도 걸릴 수 있습니다. 테스트가 완료된 후 테스트 결과를 검토할 수 있습니다. 테스트 결과를 해석하는 방법은 Firebase Test Lab 결과 분석을 참조하세요.

다음 단계

Google Cloud SDK 문서를 읽고 정식 버전 또는 베타로 제공되는 테스트 옵션을 살펴보세요.