Test Lab을 CI/CD 시스템에 통합

1. 소개

최종 업데이트 날짜: 2022-04-07

CI/CD 시스템으로 모바일 테스트를 실행하는 방법

모바일 테스트를 실행하는 것은 어려울 수 있습니다. 많은 앱이 다양한 플랫폼, 장치 및 API 버전에서 실행됩니다. 앱 개발자는 사용자보다 먼저 문제를 파악하기 위해 가능한 한 많은 구성을 테스트하고 싶어합니다. 그러나 비용 및 리소스 제약으로 인해 개별 개발자가 투자할 수 있는 테스트 장치의 수와 수동 유지 관리의 양이 제한됩니다. 특히 CI/CD(지속적 통합/지속적 개발) 시스템의 경우 개발 프로세스가 확장되면 테스트 프로세스에 다음이 필요합니다. 유지 관리 비용과 노력을 최소화하면서 자동화됩니다.

사용자 기기에서 앱이 어떻게 작동하는지 이해하는 데 도움을 주기 위해 Firebase Test Lab은 데이터 센터에서 다양한 모바일 실제 기기와 가상 기기를 호스팅합니다. 또한 데이터 센터의 기기에서 실행 중인 테스트를 조정하는 플랫폼 독립적인 명령줄 도구인 Google Cloud CLI도 제공합니다. gcloud CLI를 사용하면 Test Lab의 클라우드 기반 테스트 솔루션을 기존 CI/CD 워크플로에 쉽게 통합할 수 있습니다.

크로스 플랫폼 지원

Test Lab은 Android 및 iOS 앱용 테스트 솔루션과 Unity와 같은 모바일 게임에 대한 전문 지원을 제공합니다. 테스트 옵션에는 Android Espresso, UI Automator, iOS XCTest 등 널리 사용되는 테스트 프레임워크가 포함됩니다. Test Lab에서는 자동화된 크롤러인 Robo를 사용하여 테스트 코드 없이도 테스트를 실행할 수 있습니다.

하드웨어 요구 사항 없음

Test Lab은 Google 데이터 센터에서 물리적 기기를 호스팅하고, Google Cloud에서는 가상 기기를 호스팅합니다. 여러분이 해야 할 일은 테스트를 Test Lab으로 보내고 결과를 기다리는 것뿐입니다.

빠르고 안정적

많은 동시 테스트 사례를 실행하면 시간이 오래 걸리고 CI/CD 프로세스가 차단될 수 있습니다. Test Lab을 사용하면 테스트를 쉽게 분할하고 여러 기기에서 병렬로 실행할 수 있습니다. 또한 일반적인 모바일 테스트의 문제점인 결함을 감지할 수도 있습니다.

무엇을 배울 것인가

  • 테스트 아티팩트를 빌드하는 방법
  • gcloud CLI를 사용하여 모바일 테스트를 실행하는 방법
  • Jenkins CI를 설정하는 방법
  • Jenkins CI를 사용하여 모바일 테스트를 실행하는 방법
  • CI 시스템으로 확장하도록 테스트를 구성하는 방법

이 Codelab에서는 테스트 실행에 중점을 둡니다. 관련 없는 개념과 코드 블록은 간략히 설명하고 간단히 복사하여 붙여넣을 수 있도록 제공됩니다.

필요한 것

처음부터 빌드하려는 경우 Android 테스트를 실행하려면 Android Studio가 필요하고, iOS 테스트를 실행하려면 XCode가 필요합니다. 아니면 직접 가져오시면 유물을 제공해 드리겠습니다.

2. gcloud CLI로 테스트 실행

Android 앱 APK 빌드 및 APK 테스트

Test Lab으로 테스트를 실행하려면 먼저 Android 앱 APK와 하드웨어 기기나 에뮬레이터에서 실행할 계측 테스트가 포함된 테스트 APK를 빌드하세요. 이미 작동하는 코드베이스가 있는 경우 자체 APK를 빌드하거나 Espresso용 BasicSample을 사용할 수 있습니다.

Gradle 명령을 사용하여 APK를 빌드하려면 Android SDK를 설치해야 합니다. Android Studio가 컴퓨터에 설치되어 있지 않은 경우 Android Studio 및 Android SDK를 설치 하고 Android SDK 디렉터리로 ANDROID_HOME 환경을 설정하세요. 예를 들어 ~/.bash_profile 파일에 다음 줄을 추가합니다.

export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk  # For MacOS

그런 다음 다음 명령을 실행하여 코드를 복제하고 APK를 빌드합니다.

git clone https://github.com/android/testing-samples.git
cd testing-samples/ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

복제 및 빌드 명령을 실행한 후 다음 위치에서 앱 APK와 테스트 APK를 찾을 수 있습니다.

app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

또는 다음 옵션을 사용하여 테스트 및 앱 APK를 얻을 수 있습니다.

  • Android Studio에서 APK를 빌드하려면 Android Studio에서 테스트 의 지침을 따르세요.
  • 샘플 메모장 앱을 다운로드합니다. NotePad/app/build/outputs/apk/ 에 있는 바이너리 파일 app-debug-unaligned.apk 및 계측 테스트 파일 app-debug-test-unaligned.apk 사용하세요.

iOS 앱에 대해 작동하는 소스 코드가 있는 경우 XCTest를 작성하고 앱과 테스트에서 zip 파일을 빌드 할 수 있습니다.

gcloud CLI를 사용하여 Test Lab으로 테스트 실행

이 섹션에서는 Firebase 프로젝트를 만들고 로컬 Google Cloud SDK 환경을 구성합니다. 자세한 내용은 gcloud CLI로 테스트 시작을 참조하세요.

gcloud CLI 설정

  1. gcloud CLI 도구가 포함된 Google Cloud SDK를 다운로드하세요.
  2. 설치가 최신인지 확인하세요.
gcloud components update
  1. Google 계정을 사용하여 gcloud CLI에 로그인합니다.
gcloud auth login
  1. gcloud CLI에서 Firebase 프로젝트를 설정합니다. 여기서 PROJECT_ID 는 Firebase 프로젝트 ID입니다. 다음 명명 규칙을 따르는 Firebase 콘솔 URL에서 프로젝트 ID를 찾을 수 있습니다: https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

Firebase 프로젝트가 없으면 Firebase 콘솔 에서 만듭니다.

빌드된 APK를 사용하여 테스트 실행

이 섹션에서는 API 레벨 28이 포함된 Pixel 3인 Test Lab의 기본 기기에서 계측 테스트를 실행합니다. 다른 기기를 사용하려면 사용 가능한 기기를 확인하세요 .

Android 앱 APK 빌드 및 APK 테스트에서 빌드한 앱 및 테스트 APK를 사용하여 다음 명령을 사용하여 Android 계측 테스트를 실행합니다.

gcloud firebase test android run \
  --type instrumentation \
  --app app/build/outputs/apk/debug/app-debug.apk \
  --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

테스트 결과 분석

다음 옵션 중 하나를 사용하여 테스트 결과를 분석할 수 있습니다.

  • gcloud 요약 - 테스트가 완료되면 gcloud CLI는 테스트 결과의 기본 요약을 인쇄합니다.
  • gcloud 종료 코드 - 테스트가 완료된 후 테스트가 통과되면 명령어가 0으로 종료됩니다. 테스트가 실패하면 명령은 0이 아닌 종료 코드로 종료됩니다.
  • Firebase 콘솔 - gcloud CLI는 Firebase 콘솔에 대한 링크를 인쇄합니다. 링크는 명명 규칙 https://console.firebase.google.com/project/PROJECT_ID/testlab/... 따릅니다. 자세한 내용은 단일 테스트 실행의 결과 해석을 참조하세요.
  • JUnit XML 파일 - gcloud CLI는 다음을 인쇄합니다.
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]

test-lab-xxxxx/xxxxx 는 테스트 아티팩트와 결과를 저장하는 Cloud Storage 버킷입니다. 테스트 결과가 포함된 JUnit XML 파일을 찾으려면 링크를 열고 blueline-28-en-portrait/test_result_1.xml 로 이동합니다.

3. Jenkins CI로 설정

이 섹션에서는 널리 사용되는 CI 시스템인 Jenkins CI를 사용하여 Test Lab에서 테스트를 실행합니다. 다른 CI 시스템을 사용하려면 대규모 테스트 모음 실행을 위한 고급 모범 사례와 BitriseCircle CI 와 같은 다른 CI 시스템에 대한 설명서를 참조하세요. gcloud CLI 대신 Flank를 사용할 수 있습니다.

Jenkins용 gcloud CLI 사용 설정

Jenkins와 함께 Test Lab을 사용하려면 먼저 필수 API를 사용 설정하고 Jenkins가 gcloud CLI에 인증하는 데 사용할 수 있는 서비스 계정을 설정해야 합니다.

Jenkins용 Google Cloud 서비스 계정 추가

서비스 계정은 서비스 통합을 위한 제한된 계정입니다. 이러한 계정은 특정 서비스에 대한 세부적인 제어 기능을 제공하며 CI 빌드를 차단할 수 있는 스팸 확인이나 보안 문자 프롬프트의 대상이 되지 않습니다.

서비스 계정을 만들려면 다음 단계를 따르세요.

  1. Google Cloud Console에서 서비스 계정 페이지를 엽니다.
  2. 서비스 계정 만들기를 클릭하고 이름설명을 추가한 다음 만들기 및 계속을 클릭합니다.
  3. 역할 선택 드롭다운에서 기본 을 선택한 다음 편집자 를 선택합니다.
  4. 계속 을 클릭한 다음 완료 를 클릭합니다.

다음으로 Jenkins가 생성한 서비스 계정으로 인증하는 데 사용할 수 있는 인증 키를 생성하고 다운로드합니다.

서비스 계정 키를 만들고 다운로드하려면 다음 단계를 따르세요.

  1. Google Cloud Console의 서비스 계정 페이지에서 생성한 계정과 연결된 이메일을 클릭합니다.
  2. 키 를 선택한 다음 키 추가새 키 생성 을 클릭합니다.
  3. JSON 을 선택한 다음 만들기 를 클릭합니다.
  4. 파일을 다운로드하라는 메시지가 나타나면 확인을 클릭합니다. 컴퓨터의 안전한 장소에 파일을 다운로드하세요. 나중에 Jenkins를 구성할 때 이 파일이 필요합니다.

서비스 계정 생성에 대해 자세히 알아보려면 서비스 계정 생성을 참조하세요.

필수 Google Cloud API를 사용 설정하세요.

Cloud Testing API를 사용하면 Google 인프라에서 테스트를 실행할 수 있습니다. gcloud CLI로 테스트 실행을 완료했을 때 이 API를 사용 설정했습니다. Cloud Tool Results API를 사용하면 프로그래밍 방식으로 테스트 결과에 액세스할 수 있습니다.

  1. Google 개발자 콘솔 API 라이브러리를 엽니다.
  2. Firebase 콘솔 상단의 검색창에 필요한 각 API( Cloud Testing APICloud Tool Results API )의 이름을 입력합니다. 요청한 API에 대한 개요 페이지가 나타납니다.
  3. 각 API의 개요 페이지에서 API 활성화를 클릭합니다.

Jenkins 설치 및 설정

Linux, macOS, Windows 및 기타 여러 환경에서 Jenkins CI를 설치하고 설정할 수 있습니다. 이 Codelab의 특정 세부정보는 파일 경로의 슬래시(/) 사용을 포함하여 Linux에서 Jenkins CI를 설치하고 실행하는 것과 관련됩니다.

Linux 또는 Windows를 실행하는 컴퓨터에 Jenkins를 다운로드하고 설치하려면 Jenkins 설치 지침을 따르세요. Jenkins를 설치한 후 동일한 Jenkins 설치 지침에 따라 설정을 완료하고 http://localhost:8080 을 사용하여 Jenkins 대시보드에 액세스합니다.

설치된 플러그인 확인

Jenkins는 다양한 버전 제어 시스템을 지원합니다. 이 Codelab에서는 Git을 사용하여 이전 테스트를 실행합니다. gcloud CLI 실행에 대한 더 나은 환경을 얻으려면 GCloud SDK 플러그인을 설치해야 합니다.

  1. Jenkins 대시보드에서 Jenkins 관리를 클릭한 다음 플러그인 관리를 클릭합니다.
  2. GitGCloud SDK 플러그인을 검색하여 설치합니다(아직 설치되지 않은 경우).

Android 및 Google Cloud SDK의 위치 구성

이제 Jenkins에게 Google Cloud SDK 및 Android SDK를 찾을 수 있는 위치를 알려줍니다.

Jenkins용 Google Cloud 및 Android SDK를 구성하려면 다음 단계를 따르세요.

  1. Jenkins 대시보드에서 Jenkins 관리를 클릭한 다음 전역 도구 구성을 클릭합니다.
  2. Google Cloud SDK 섹션에서 Google Cloud SDK 추가를 클릭합니다.
  3. 이름 필드에 기억하기 쉬운 Google Cloud SDK 인스턴스의 이름(예: GCloud-SDK)을 입력합니다.
  4. Google Cloud SDK 홈 디렉터리를 입력합니다(예: /opt/google-cloud-sdk .
  5. 저장 을 클릭합니다.
  6. Dashboard > Jenkins 관리 > 시스템 구성을 열어 Android 및 Google Cloud SDK에 대한 시스템 전체 속성을 구성합니다.
  7. 환경 변수 확인란을 선택하고 추가를 클릭합니다.
  8. 이름 필드에 ANDROID_HOME 을 입력합니다. 필드에 Android SDK의 위치를 ​​입력합니다(예: /opt/Android/Sdk .
  9. 도구 위치 확인란을 클릭하고 추가 를 클릭합니다. 이름 드롭다운에서 전역 도구 구성에 추가한 Google Cloud SDK 인스턴스의 이름을 선택합니다.
  10. 필드에 Google Cloud SDK의 위치를 ​​입력합니다(예: /opt/google-cloud-sdk .
  11. 저장 을 클릭합니다.

Jenkins에 서비스 계정 자격 증명 추가

이제 Jenkins가 gcloud CLI 명령어를 인증하고 성공적으로 실행할 수 있도록 gcloud CLI 서비스 계정 사용자 인증 정보를 Jenkins에 추가합니다.

  1. Jenkins 대시보드에서 Jenkins 관리를 클릭한 다음 자격 증명 관리를 클릭합니다.
  2. Jenkins로 범위가 지정된 저장소 섹션에서 (글로벌) 도메인 링크를 클릭한 다음 자격 증명 추가를 클릭합니다.
  3. 종류 드롭다운에서 개인 키의 Google 서비스 계정을 선택합니다.
  4. 프로젝트 이름 필드에 Firebase 프로젝트 이름을 입력합니다.
  5. JSON 키를 선택한 다음 찾아보기를 클릭하고 서비스 계정 키를 저장한 위치를 찾습니다.
  6. 만들기 를 클릭합니다.

이제 Test Lab용 Jenkins 자동화 빌드를 구성할 준비가 되었습니다.

4. Jenkins CI를 사용하여 Test Lab 테스트 실행

이제 Jenkins를 설정했으므로 모든 것을 하나로 모으고 Jenkins를 사용하여 동일한 테스트를 실행해 보겠습니다.

자동화된 빌드를 실행하고 앱 업데이트가 체크인될 때마다 테스트를 실행하도록 Jenkins를 구성할 수 있습니다. 정기적으로 빌드를 실행하도록 Jenkins를 구성할 수도 있습니다. Jenkins에서 빌드를 구성하는 방법에 대해 자세히 알아보려면 자동 빌드 구성을 참조하세요.

Jenkins 프로젝트 생성 및 구성

Test Lab을 사용하여 앱의 지속적인 통합 테스트를 실행하는 프로젝트를 만듭니다.

Jenkins 프로젝트 만들기

  1. http://localhost:8080 으로 이동하여 Jenkins 대시보드를 엽니다.
  2. Jenkins 대시보드에서 New Item 을 클릭합니다.
  3. 항목 이름 필드에 프로젝트 이름을 입력하고 자유형 프로젝트를 클릭하여 단일 빌드 구성을 사용하는 프로젝트를 생성합니다.
  4. 확인 을 클릭합니다. 프로젝트 구성을 완료하려면 나머지 섹션을 순서대로 완료하세요.

소스 코드 관리 구성

  1. 소스 코드 관리 탭에서 Git 을 선택합니다.
  2. 저장소 URL 필드에 https://github.com/android/testing-samples.git를 입력합니다.

빌드 환경 구성

빌드 환경 섹션에서는 빌드 특성을 구성할 수 있습니다. 다음 단계에 따라 Google Cloud 인증을 사용 설정하세요.

  1. 빌드 환경 탭에서 GCloud SDK 인증 체크박스를 선택하고 GCP 설치 정보를 추가할 때 선택한 설치 이름을 선택합니다.
  2. Google 자격 증명 드롭다운에서 구성한 서비스 계정 자격 증명을 선택합니다.

APK 패키지를 다시 빌드하기 위한 Gradle 빌드 단계 추가

  1. 빌드 섹션까지 아래로 스크롤하고 빌드 단계 추가를 클릭한 다음 셸 실행을 선택합니다.
  2. 애플리케이션의 기본 디렉터리에서 다음 명령을 실행하는 빌드 단계를 추가합니다.
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Jenkins에 gcloud CLI 빌드 단계 추가

이제 gcloud CLI 명령줄을 사용하여 Test Lab을 실행하기 위해 Jenkins에 빌드 단계를 추가할 준비가 되었습니다.

gcloud CLI 빌드 단계를 추가하려면 새로운 Execute Shell 빌드 단계를 추가하고 다음 명령어를 입력하세요.

gcloud config set project PROJECT_ID
gcloud firebase test android run \
--app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk
--test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

프로젝트 설정을 마친 후 페이지 하단까지 아래로 스크롤하여 구성을 저장합니다. 새 프로젝트의 홈 페이지로 리디렉션됩니다.

Jenkins로 테스트 실행

이제 Jenkins 프로젝트를 빌드하고 gcloud CLI로 실행한 수동 테스트와 같은 테스트를 실행할 준비가 되었습니다.

Jenkins로 테스트를 실행하려면 다음 단계를 따르세요.

  1. 빌드를 수동으로 트리거하려면 Build Now 를 클릭하세요.
  2. 새 빌드 > 콘솔 출력 을 클릭하여 진행 상황과 결과를 확인하세요.

오류가 표시되지 않으면 축하합니다! 클릭 한 번으로 프로젝트를 설정하고 Pixel 2 기기에서 테스트를 실행했습니다. 오류가 발생하면 문제 해결 을 참조하십시오.

5. 대규모 테스트 스위트 실행을 위한 고급 모범 사례

여러 테스트를 동시에 실행하려면 다음 모범 사례를 따라 테스트가 빠르고 안정적으로 실행되도록 하세요.

여러 장치 구성에 대한 적용 범위 확대

gcloud CLI 빌드 단계에 여러 기기를 쉽게 추가할 수 있습니다. 그리고 사용 가능한 장치, 버전, 로케일 및 방향을 확인 하고 선택할 수 있습니다. 예를 들어 다음 명령은 두 장치에서 테스트를 실행합니다.

  • 세로 방향의 API 레벨 30 및 영어 로케일을 갖춘 가상 Google Pixel 2
  • 가로 방향 및 프랑스어 로캘에서 API 레벨 29를 사용하는 실제 Samsung Galaxy S20
gcloud firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --device model=Pixel2,version=30,locale=en,orientation=portrait  \
  --device model=x1q,version=29,locale=fr,orientation=landscape

gcloud CLI YAML 구성 파일 사용

한 곳에서 또는 소스 제어 시스템을 사용하여 인수를 관리하려는 경우 YAML 형식의 인수 파일에서 이러한 인수를 지정할 수 있습니다. 이 기능을 사용하는 방법을 알아보려면 gcloud topic arg-files 실행하세요.

병렬로 실행되는 샤드 테스트

테스트 샤딩은 테스트 세트를 별도로 실행되는 하위 그룹(샤드)으로 나눕니다. Test Lab은 여러 기기를 사용하여 각 샤드를 병렬로 자동 실행하므로 Test Lab이 전체 테스트 세트를 더 빠르게 완료할 수 있습니다. 자세한 내용은 샤딩 활성화를 참조하십시오.

샤딩을 활성화하려면 gcloud beta 채널을 사용하고 –num-uniform-shards 또는 –test-targets-for-shard 플래그를 gcloud CLI 빌드 단계에 추가하세요. 예를 들어 테스트를 5개의 실행으로 분할하고 병렬로 실행하려면 다음 명령을 실행합니다.

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-uniform-shards 5

벗겨짐 감지 활성화

모바일 테스트는 종종 불안정할 수 있습니다. 동일한 설정을 사용해도 테스트가 통과할 때도 있고 실패할 때도 있습니다. –num-flaky-test-attempts gcloud CLI 플래그를 사용하면 실패한 테스트가 불안정했는지 여부를 감지할 수 있습니다. 이 플래그는 어떤 이유로든 하나 이상의 테스트 사례가 실패하는 경우 테스트 실행을 다시 시도해야 하는 횟수를 지정합니다.

예를 들어, 초기 실행 실패 후 실패한 테스트 사례를 세 번 더 다시 실행하려면 다음을 지정합니다.

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-flaky-test-attempts 3

6. 축하합니다

축하합니다. CI 시스템을 사용하여 첫 번째 Test Lab 테스트를 성공적으로 실행했습니다.

앱 및 테스트 APK를 빌드하고 gcloud CLI를 사용하여 Test Lab에서 계측 테스트를 실행했습니다. 또한 동일한 테스트를 자동화하기 위해 Jenkins 프로젝트를 설정합니다.

이제 Test Lab을 CI/CD 시스템에 통합하는 주요 단계를 알게 되었습니다.

무엇 향후 계획?

Firebase 에뮬레이터 제품군을 사용하여 CI를 설정하는 방법을 확인하세요.

추가 읽기

참조 문서