.

Azure pipeline で Appium を走らせて, Android, iOS のテストを走らせる

Azure pipeline で Appium を走らせて, Android, iOS のテストを走らせることができます

Azure pipelines

オープンソースプロジェクトであれば時間制限なしで無料で使用できます

https://azure.microsoft.com/ja-jp/services/devops/pipelines/

以下は以前contributeしたものです
まずは azure-pipelines.yml を以下のように書いて, 実体は ./ci-jobs/functional_test.yml にあります

azure-pipelines.ymllink
5
6
jobs:
- template: ./ci-jobs/functional_test.yml

このあたりで必要なパラメータを設定しています

functional_test.ymllink
1
2
3
4
5
6
parameters:
vmImage: 'macOS-10.15'
pytestOpt: '--doctest-modules --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html'
androidSdkVer: 27
xcodeForIOS: 12.3
CI: true
  • vmImage: コマンドを実行していくマシンのOSです
  • pytestOpt: pytest の option
  • androidSdkVer: 使用するAndroid SDK ver. 作成する Emulator の OS に影響します
  • xcodeForIOS: 使用する xcode ver. 作成する Simulator の iOS に影響します

Appium を走らせる

実体は functional/run_appium.yml

run_appium.ymllink
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
steps:
- task: NodeTool@0
inputs:
versionSpec: '12.x'
displayName: Install Node 12.x
- script: npm install -g appium@beta --chromedriver_version='2.44'
displayName: Install appium
- script: npm install -g opencv4nodejs
condition: eq('${{ parameters.opencv }}', true)
displayName: Install opencv4nodejs
- task: UsePythonVersion@0
inputs:
versionSpec: '3.x'
- script: brew install ffmpeg
displayName: Resolve dependencies (Appium server)
- script: python setup.py install
displayName: Install python language bindings for Appium
- script: |
pip install pipenv
pipenv lock --clear
pipenv install --system
displayName: Resolve dependencies (Python)
- script: |
git --no-pager log -n1
python --version
ffmpeg -version
appium --version
node --version
displayName: Check versions
- script: nohup appium --relaxed-security > appium_log.txt &
condition: ne('${{ parameters.dont_run_appium }}', true)
displayName: Run Appium in background

ざっくり

  • node インストール
  • npm で appium をインストール
  • (必要に応じて opencv4nodejs をインストール)
  • ffmpeg インストール (screen recordするために必要)
  • appium-python-client をインストール
  • pip で dependency の解消
  • インストールしたものの ver 一覧列挙
  • appium を走らせる

iOS

実体は ./functional/run_ios_test.yml

ios_setup.ymllink
1
2
3
4
5
6
steps:
- script: sudo xcode-select -s /Applications/Xcode_${{ parameters.xcodeVersion }}.app/Contents/Developer
displayName: Xcode Select ${{ parameters.xcodeVersion }}
- script: xcrun simctl list
displayName: List Installed Simulators

こちらでは Simulator を起動するために xcode の ver を指定
iOS についてはテストを走らせる中で Simulator が起動するようになっているので, あとは pytest でテストを走らせるだけで ok

Android

実体は ./functional/run_android_test.yml

start-emulator.shlink
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/env bash

# This file comes from https://github.com/appium/ruby_lib_core

# This script was copy-pasted from https://docs.microsoft.com/en-us/azure/devops/pipelines/languages/android?view=azure-devops#test-on-the-android-emulator
# with some changes

# Install AVD files
declare -r emulator="system-images;android-${ANDROID_SDK_VERSION};google_apis;x86"
echo "y" | ${ANDROID_HOME}/tools/bin/sdkmanager --install "$emulator"

# Show a list of emulators
${ANDROID_HOME}/tools/bin/avdmanager list

# Create emulator
echo "no" | ${ANDROID_HOME}/tools/bin/avdmanager create avd -d "Nexus 6" -n testemulator -k "${emulator}" --force

echo ${ANDROID_HOME}/emulator/emulator -list-avds

echo "Starting emulator"

# Start emulator in background
nohup ${ANDROID_HOME}/emulator/emulator -avd testemulator -no-boot-anim -no-snapshot > /dev/null 2>&1 &
${ANDROID_HOME}/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'

${ANDROID_HOME}/platform-tools/adb devices

echo "Emulator started"

こちらでは Android Emulator を起動しています
元となっているファイルは azure pipelines 公式からもってきています

この後に pytest でテスト走らせることができます

Tips

Azure pipeline でテストを実行して, 失敗したとき, なぜ失敗しているか追いにくいので, screen record (画面録画)を取得するようになっているのでそちらも参考に