[Travis CI](EN) Test and Build Android+Appium(node.js+python-client) in Travis CI
Update(2021.10.11): Add setting value related to pyenv
Setting Python and Node.js environment in Travis CI, build and test using Appium.
Environment and Prerequisite
- Travis CI
- Experience of test Android using local Appium(Server+python-client)
Process
We can use default Android
environment in Travis CI. We will set up Appium(Node.js and Python)
environment in yml
.
- Android Setting
- language and base setting
- sdk and android related setting
- Python Environment Setting
- install pyenv and virtualenv
- set virtual environment and install packages(pytest, Appium-Python-Client etc…)
- Node.js Environment Setting
- install node.js
- install appium
- Run Appium
- Run Emulator
- Build and Test
1. Android Setting
Our Travis CI
already serves all environment for android. Just type somethings like SDK
or build-tools
and others.
language and base setting
.travis.yml
language: android
sudo: required # We need sudo
jdk: oraclejdk8 # Can be changed by your preference
sdk and android related setting
.travis.yml
language: android
sudo: required # We need sudo
jdk: oraclejdk8 # Can be changed by your preference
android:
components:
# Below codes are for using latest 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
# System image for your emulator
# You need at least one system image
- sys-img-armeabi-v7a-android-22
- sys-img-armeabi-v7a-android-24
2. Python Environment Setting
Install pyenv
and virtualenv
for python environment. We need python for installing Appium-Python-Client
in Appium
install pyenv and virtualenv
.travis.yml
...
# I just type install codes in before_install part
before_install:
- sudo apt-get update
# Install ubuntu packages for later usage
- 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
# Set up 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
# Set up 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
set virtual environment and install packages
Below requirements.txt
is package list. You can type your packages if you want.
.travis.yml
...
# Install python 3.6.1
- pyenv install 3.6.1
# Set up virtual environment (virtualenv name is undang in this case)
- pyenv virtualenv 3.6.1 undang
- pyenv activate undang
- python -V
# Install packages
# Essential packages: Appium-Python-Client, pytest
- pip install -r requirements.txt
3. Node.js Environment Setting
install node.js
You can check installation guide in here “[Ubuntu](EN) Install latest npm and nodejs by using ppa”
.travis.yml
...
# Install node.js and npm
- curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
- sudo apt-get install nodejs
- sudo apt-get install build-essential
install appium
.travis.yml
...
# Add $JAVA_HOME/bin to PATH (for Appium executing)
- PATH=$PATH:$JAVA_HOME/bin
# Install appium and appium-doctor
- npm install appium
- npm install appium-doctor
4. Run Appium
.travis.yml
...
# Run appium-doctor
- "./node_modules/.bin/appium-doctor"
# Run appium in background and logging to appium_log.txt file
- "./node_modules/.bin/appium --log-level info > appium_log.txt &"
5. Run Emulator
.travis.yml
...
before_script:
# Create emulator (emulator image version should be exist in previous android setting)
- echo no | android create avd --force -n test -t android-22 --abi armeabi-v7a
# Run emulator
- emulator -avd test -no-skin -no-window &
- android-wait-for-emulator
- adb shell input keyevent 82 &
6. Build and Test
.travis.yml
script:
- "./gradlew assemble" # Build
- pytest # Test
after_script:
- cat ./appium_log.txt # Check appium log
Final result of .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