CI/CD Tool로 Bitrise (CLI)를 사용하고 있는데, Workflow에 UI Test 단계를 추가해보려고한다. gn_test
Workflow를 살펴보면,
git pull
로 프로젝트를 땡겨오고,- 이전에 만든 test용 apk를 제거한다.
- UI Test용 빌드를 생성하고,
- Firebase Test Lab으로 기기에 테스트 한다.
gn_test: steps: - script@1: inputs: - content: "bash $ROOT/scripts/gitpull.sh" - script@1: inputs: - content: "bash $ROOT/scripts/delete_test_apk.sh" - android-build-for-ui-testing@0: inputs: - project_location: $PROJECT_LOCATION - variant: $VARIANT - module: $MODULE - cache_level: none - script@1: is_always_run: false inputs: - content: "bash $ROOT/scripts/testlab.sh"
다른 것들은 문제가 되지 않지만, Firebase Test Lab 설정이 약간 까다로울 수 있다.
# gcloud CLI 설치
gcloud cli 툴로 TestLab을 이용할 것이기 때문에 먼저 gcloud cli를 설치한다. 리눅스 64비트 컴퓨터 기준으로 설명할 건데 혹시 다른 환경이신 분들은 공식 사이트를 참조하시길!
1. gcloud-cli 파일을 다운로드 받는다.
curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-402.0.0-linux-x86_64.tar.gz
2. 압축을 해제한다.
tar -xf google-cloud-cli-402.0.0-linux-x86.tar.gz
3. 압축을 푼 폴더의 install.sh를 실행하여 gcloud를환경변수에 등록한다.
./google-cloud-sdk/install.sh
4. 업데이트를 한다.
gcloud components update
# gcloud 프로젝트 설정하기
1. 로그인
아래 명령어로 Firebase 권한이 있는 아이디로 로그인한다. 명령어를 치면, 브라우저를 통해서 로그인 할 수 있는 링크가 나올 것이다. 링크를 클릭한 후 만들어지는 토큰 값을 다시 cli에 붙여넣는다.
gcloud auth login
2. 프로젝트 설정하기
FIrebase 프로젝트 ID를 복사하여 <PROJECT_ID>
대신 붙여넣는다. 프로젝트 ID는 Firebase 프로젝트 콘솔 > 프로젝트 설정 >일반
에서 확인할 수 있다.
gcloud config set project <PROJECT_ID>
이제 이 Firebase 프로젝트를 기준으로 TestLab 기능을 실행할 준비가 되었다!
# TestLab 사용법
1. 이용가능한 기기 확인하기
테스트 타겟으로이용가능한 기기는 아래 명령어를 통해서 볼 수 있다.
gcloud firebase test android models list

여러가지 기기가 보일 것인데, MODEL_ID
와 OS_VERSION_IDS
, FORM
정도만 참고하면 된다.
조금 뒤에 다시 다룰 것이지만 MODEL_ID
와 OS_VERSION_IDS
는 옵션으로 사용된다. 아래는 Nexus6 OS Verison 21 기기를 영어로 설정하고, 세로 모드로 테스트를 하겠다는 테스트 옵션이다.
--device model=Nexus6,version=21,locale=en,orientation=portrait
2. 테스트 유형 바로 알기
테스트에는 Robo, Instrumentation 두가지 타입이 있다.
Robo 테스트는 자동으로 막 누르면서 앱을 탐색하고 오류가 없는지 확인해주는 테스트이다. Instrumentation을 만들지 않았을때도 유용하게 UI Test를 수행할 수 있다.
Instrumentation 테스트는 Espresso등으로 개발자가 직접 UI 테스트 케이스 코드를 짠 것에대해 테스트를 수행한다. 구글 공식 사이트 한글 번역은 “계측 테스트”라고 한다.
# TestLab Test 수행하기
이제 CLI로 테스트를 수행할 수 있는데, 옵션이 꽤나 헷갈릴 수 있다. 그래서 정리해봤다.
옵션명 | 옵션 설명 | 옵션 값 예시 |
---|---|---|
type | 테스트 유형 | robo, instrumentation |
app | app의 apk 파일 | /your/apk/path/app-release.apk |
test | androidTest의 apk 파일. robo 테스트일때는 이 옵션이 필요없다. app 옵션만 있으면 된다. | /your/apk/path/app-release-androidTest.apk |
device | 사용할 기기정보. 여러개가 가능하다. | model=Nexus6,version=21,locale=ko,orientation=portrait |
timeout | 타임아웃 시간 (최소 값은 60초다) | 60s, 2m |
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 \ --timeout 90s
테스트 후, 다음 스텝으로 출시 할지말지 결정해야한다.
그것은 테스트 결과에 따라다를 것이다.
그래서 TestLab 결과에 이상이 있으면 에러를 뱉고 종료하는 shellscript를 짰다. 아래는 testlab.sh
의 코드 조각이다.
#!/bin/bash TEST_CMD="gcloud firebase test android run \ --type instrumentation \ --app $BITRISE_APK_PATH \ --test $BITRISE_TEST_APK_PATH \ --device model=Pixel3,version=30,locale=ko,orientation=portrait \ --timeout 60s" if eval "$TEST_CMD" then # 테스트 결과가 성공이라면 0 echo "Instrumentation Test Success" exit 0 else # 실패했다면 1~20까지의 에러코드 존재. https://firebase.google.com/docs/test-lab/android/command-line?hl=ko echo "Instrumentation Test Failed" exit $? fi
이렇게 되면 테스트 실패시 exit code 1~20을 뱉고 종료하고, 성공했다면 다음 스텝을 수행할 수 있는 상태가 된다.
'프로그래밍 > Android' 카테고리의 다른 글
[안드로이드] ExoPlayer 깜빡거리거나 검은 화면(Black screen)이 뜰 때 (0) | 2023.01.31 |
---|---|
[안드로이드] java.lang.IllegalStateException: An instance of OnFlingListener already set 해결 (0) | 2023.01.26 |
Android Studio 이전 릴리즈 다운받는 방법 (3) | 2022.09.29 |
[안드로이드] 예제로 보는 NavigationComponent (2) | 2022.09.18 |
[안드로이드] HiltWorker 오류 Could not create Worker 해결방법 (0) | 2022.09.13 |