[Travis CI] Travis CI에서 Android+Appium(node.js+python-client)로 테스트와 빌드
업데이트(2021.10.11): pyenv 설정 관련 값 추가
Travis CI에서 Python과 Node.js 환경을 설정해서 Appium을 통해 테스트 및 빌드를 진행해보자.
환경 및 선수조건
- Travis CI
- Appium(Server+python-client)+Android의 테스트 경험(링크)
과정
Travis CI에서 Android
환경은 기본적으로 설정이 되어있기 때문에 설정되어 있는 환경을 이용하고 Appium(Node.js and Python)
은 yml
을 통해서 환경을 직접 설정 해줄 예정입니다.
- 안드로이드 환경 설정
- 언어 및 기본 설정
- SDK 및 Android 관련 설정
- Python 환경 설정
- pyenv와 virtualenv 설치
- 가상환경 설정 및 패키지 설치(pytest, Appium-Python-Client etc…)
- Node.js 환경 설정
- node.js 설치
- appium 설치
- Appium 실행
- 에뮬레이터 실행
- 빌드 및 테스트
1. 안드로이드 환경 설정
사용하는 Travis CI
에서는 이미 안드로이드를 빌드 할 수 있는 환경을 모두 제공해줍니다. SDK
나 build-tools
와 기타 부가적인 부분들만 명시해주면 됩니다.
언어 및 기본 설정
.travis.yml
language: android # 언어는 android로 java가 아닙니다.
sudo: required # sudo의 경우 나중에 필요하기 때문에 required로 명시함
jdk: oraclejdk8 # 필요에 따라서 변경
SDK 및 Android 관련 설정
.travis.yml
language: android # 언어는 android로 java가 아닙니다.
sudo: required # sudo의 경우 나중에 필요하기 때문에 required로 명시함
jdk: oraclejdk8 # 필요에 따라서 변경
android:
components:
# 아래를 명시하면 가장 최신 Android SDK Tools를 사용
- tools
- platform-tools
# 버전에 맞는 build-tools
- build-tools-26.0.2
# The SDK version used to compile your project
- android-26
- android-22
- android-24
# Additional components
- extra-google-google_play_services
- extra-google-m2repository
- extra-android-m2repository
- addon-google_apis-google-26
# 사용할 시스템 이미지로 에뮬레이터를 사용하려면 적어도 하나는 꼭 명시해줘야 합니다.
- sys-img-armeabi-v7a-android-22
- sys-img-armeabi-v7a-android-24
2. Python 환경 설정
나중에 Appium
에서 Client
(테스트를 실행할 주체)를 Appium-Python-Client
를 이용할거기 때문에 pyenv
와 virtualenv
를 이용해 환경을 만들고 패키지들을 설치합니다.
pyenv와 virtualenv 설치
.travis.yml
... # 위에 안드로이드 설정하던거에 이어서
# 사용자 마음이지만 저는 before_install에 환경을 설정했습니다.
before_install:
- sudo apt-get update
# pyenv와 virtualenv 그리고 나중에 node.js를 위해 필요한 Ubuntu 패키지를 미리 설치
- sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev
libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
# pyenv 환경 설정
- git clone https://github.com/pyenv/pyenv.git ~/.pyenv
- echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
- echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
- echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
- echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
# virtualenv 환경 설정
- git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
- echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
- source ~/.bash_profile
- pyenv versions
가상환경 설정 및 패키지 설치
아래에 있는 requirements.txt
는 패키지들의 목록으로 따로 필요하신것들만 직접 설치하셔도 됩니다.
.travis.yml
... # 위에 이어서 설정하던거에 이어서
# 파이썬 3.6.1 설치
- pyenv install 3.6.1
# 가상환경 생성(가상환경 이름은 undang)
- pyenv virtualenv 3.6.1 undang
- pyenv activate undang
- python -V
# 패키지 설치
# 필수 패키지: Appium-Python-Client, pytest
- pip install -r requirements.txt
3. Node.js 환경 설정
node.js 설치
설치 방법은 “[Ubuntu] Ubuntu에 PPA를 통해 최신 npm 및 node.js 설치하기“를 참고하세요.
.travis.yml
... # 위에 이어서 설정하던거에 이어서
# node.js 및 npm 설치
- curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
- sudo apt-get install nodejs
- sudo apt-get install build-essential
appium 설치
.travis.yml
... # 위에 이어서 설정하던거에 이어서
# PATH에 $JAVA_HOME/bin 추가(Appium 실행할 때 필요)
- PATH=$PATH:$JAVA_HOME/bin
# appium 및 appium-doctor 설치
- npm install appium
- npm install appium-doctor
4. Appium 실행
.travis.yml
... # 위에 이어서 설정하던거에 이어서
# -g로 설치하지 않아서 아래처럼 직접 들어가서 appium-doctor 실행
- "./node_modules/.bin/appium-doctor"
# appium을 background로 실행하고 log를 appium_log.txt로 로깅
- "./node_modules/.bin/appium --log-level info > appium_log.txt &"
5. 에뮬레이터 실행
.travis.yml
... # 위에 이어서 설정하던거에 이어서
before_script:
# 1에서 명시한 시스템이미지로 에뮬레이터 생성
- echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
# 에뮬레이터 실행
- emulator -avd test -no-skin -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
6. 빌드 및 테스트
.travis.yml
script:
- "./gradlew assemble" # 빌드
- pytest # 테스트
after_script:
- cat ./appium_log.txt # appium 로그 확인
최종 .travis.yml
.travis.yml
language: android
sudo: required
jdk: oraclejdk8
android:
components:
- tools
- platform-tools
- build-tools-26.0.2
- android-26
- android-22
- android-24
- extra-google-google_play_services
- extra-google-m2repository
- extra-android-m2repository
- addon-google_apis-google-26
- sys-img-armeabi-v7a-android-22
- sys-img-armeabi-v7a-android-24
before_install:
- sudo apt-get update
- sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev
libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
- git clone https://github.com/pyenv/pyenv.git ~/.pyenv
- echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
- echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
- echo 'eval "$(pyenv init --path)"' >> ~/.bash_profile
- echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
- git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
- echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
- source ~/.bash_profile
- pyenv install 3.6.1
- pyenv virtualenv 3.6.1 undang
- pyenv activate undang
- pip install -r requirements.txt
- curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
- sudo apt-get install nodejs
- sudo apt-get install build-essential
- PATH=$PATH:$JAVA_HOME/bin
- npm install appium
- npm install appium-doctor
- "./node_modules/.bin/appium-doctor"
- "./node_modules/.bin/appium --log-level info > appium_log.txt &"
before_script:
- echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
- emulator -avd test -no-skin -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
script:
- "./gradlew assemble"
- pytest
after_script:
- cat ./appium_log.txt