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 |