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.yml link 5 6 jobs: - template: ./ci-jobs/functional_test.yml
このあたりで必要なパラメータを設定しています
functional_test.yml link 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.yml link 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.yml link 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.sh link 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 declare -r emulator="system-images;android-${ANDROID_SDK_VERSION} ;google_apis;x86" echo "y" | ${ANDROID_HOME} /tools/bin/sdkmanager --install "$emulator " ${ANDROID_HOME} /tools/bin/avdmanager listecho "no" | ${ANDROID_HOME} /tools/bin/avdmanager create avd -d "Nexus 6" -n testemulator -k "${emulator} " --forceecho ${ANDROID_HOME} /emulator/emulator -list-avdsecho "Starting emulator" 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 devicesecho "Emulator started"
こちらでは Android Emulator を起動しています 元となっているファイルは azure pipelines 公式からもってきています
この後に pytest でテスト走らせることができます
Tips Azure pipeline でテストを実行して, 失敗したとき, なぜ失敗しているか追いにくいので, screen record (画面録画)を取得するようになっているのでそちらも参考に