LoginSignup
1
0

More than 1 year has passed since last update.

Automate E2E Testing on Cloud (Appium & Azure Pipelines)

Last updated at Posted at 2022-12-11

この記事は、ソフトウェアテスト Advent Calendar 2022の11日目の記事となります。
前日10日の記事は、@cvusk さんの「ソフトウェアテストの実行を効率化するPredictive Test Selectionの衝撃」でした。

概要

スマホアプリをAzure PiplinesでCI対応した後にビルドしたアプリが問題なく起動して動作するか簡単なE2EテストをAppiumを用いて実行する環境を作ってみました。

今回は、iOSアプリを対応したものでAndroidアプリやUnityのビルド後のアプリビルドの対応については後日やってみようかと。

※Unityなど3Dエンジンをもとに描画した画面ではAppiumはサポートされておらず、スクリーンショット撮影するとブラックスクリーンの画像が生成され、OpenCVの画像認識によるボタンクリック操作を実行しても反応しませんでした。

注意

本記事では、Azure PipelinesでのCI/CDやAppiumのE2Eテストツール関連について初心者向けへの解説は特にしません。

初めて知る方などは、過去に以下の記事にそれらの解説をまとめており、入門・初心者的な他の記事を参考に一度触ってから参考にされてください。

その他の知見

かれこれ2~3年前から触ってまして、過去の知見は以下になります。

仕組み

AppiumをAzure Pipelinesに組み込んだCI/CDについて、以下のワークフローで実装しました。
(※Azure Pipelinesからフローが流れているのは、CI開始の意味でもちろん全てAzure Pipelines環境内で起きている。)

まず、正常に.appおよび.ipaのアプリビルドされた後にAppiumを実行します。
AppiumによるE2Eテストが問題なければ、AppCenterにアプリデプロイするシンプルなフローとなります。

スクリーンショット 2022-06-03 12.20.42.png

AppCenterTest

今回は、Azure Pipelinesに強引にAppium環境をインスコしたやり方となり、App CenterでAppiumテストできる設定があるようです。

今回使用するアプリのサンプルについて

今回使用したサンプルは、Xcodeのデフォルトで用意されているプロジェクトPage Based Applicationを活用しました。
このサンプルは、左右のスワイプで次と前の画面に遷移できる作りで、画面上に表示されている文字の確認やボタンクリック以外のテスト操作も必要なケースを想定したいと思い使いました。

スクリーンショット 2022-06-03 13.50.28.png

Azure Pipelines に Appium 環境を構築する

きっかけは、

の記事を見つけてやってみたものの、ここで解説されている.ymlだけではエラーになりました。

azure-pipelines.yml

上記の記事をもとに最新に対応してエラーなく、AppiumをAzure Pipelinesに組み込むだけの設定内容を以下のGistにまとめています。

iOSシミュレータ

もともと.ipaビルド向けに対応していたため、.appビルド(iOSシミュレーター)向けについてやったことがなく、こちらも調査して試してみました。
諸々ググったところ、関連する記事が少なかったりそれぞれ設定ばバラバラで苦戦しました。

今回は、以下の内容で.appビルドをやっています。
また、手元でXcode上でビルドするときとxcodebuildコマンドとで.appがビルドされるパスが異なるので、初回は手動で.appファイルを探して扱いやすい場所にコピーしておくと管理しやすいと思い以下のようにしました。

- task: Xcode@5
  inputs:
    actions: 'clean build'
    sdk: 'iphonesimulator'
    configuration: 'Release'
    xcWorkspacePath: './*.xcodeproj'
    scheme: '$(XCODE_PROJECT_NAME)'
    xcodeVersion: 'default'
    destinationPlatformOption: 'iOS'
    destinationTypeOption: 'simulators'
    destinationSimulators: 'iPhone 13'

- script: |
    echo "# ls -lt /Users/runner/Library/Developer/Xcode"
    ls -lt /Users/runner/Library/Developer/Xcode/DerivedData/$(XCODE_PROJECT_NAME)-*/Build/Products/Release-iphonesimulator

    echo "# mkdir $(agent.buildDirectory)/output/iphoneos/Release-iphonesimulator"
    mkdir -p $(agent.buildDirectory)/output/iphoneos/Release-iphonesimulator

    echo "# cp -r ~/build/Release-iphonesimulator/$(XCODE_PROJECT_NAME).app"
    cp -r /Users/runner/Library/Developer/Xcode/DerivedData/$(XCODE_PROJECT_NAME)-*/Build/Products/Release-iphonesimulator/$(XCODE_PROJECT_NAME).app $(agent.buildDirectory)/output/iphoneos/Release-iphonesimulator/
  displayName: "Check Path & Cp App"

Pytest

Pythonは、インスコできてもpytestは入っていないのでこれも手動でインスコしてからpytestを実行、テストコードの中で状況を把握するためにテスト中のスクリーンショットを撮っているので、その画像データをPublishBuildArtifactsするパスにコピーしています。

- script: |
    echo "# pip3 install pytest"
    pip3 install pytest
    
    echo "# python3 -m pytest ./test/AppiumTest.py"
    python3 -m pytest ./test/AppiumTest.py

    echo "# cp screenshot image agent.buildDirectory/output"
    cp ./test/screenshot_*.png $(agent.buildDirectory)/output
  displayName: Install pytest & Pytest appium.

E2E Test Code

サンプルで作ったAppiumTest.pyの中身について、以下のGistにまとめています。

Appium Desktopは、クリック以外のスクロール/スワイプや長押しの操作が用意されていないようなので、下記リンク先のAPIリファレンスや各リポジトリを参考に各自でテストコードを調整する必要があります。

処理時間

上記のサンプルだけでも以下の結果で51分半ほどかかっているため、ガッツリ開発しているアプリのXcodeビルドが長かったり、FlutterやUnityなどのマルチプラットフォームビルドができる開発ツールだともっと時間がかかることが想像できます。

スクリーンショット 2022-06-04 17.48.23.png

まとめ

実際に正常に終わってPublishBuildArtifactsした成果物が以下の内容です。
これで、Azure PipelinesでAppiumが実行できる環境ができ、アプリデプロイ前にビルドしたアプリが正常に起動して最低限動作するか簡単に確認するE2Eテストをクラウド上で完結させることができました。

スクリーンショット 2022-06-04 17.47.26.png
screenshot_20220623154623.png screenshot_20220623154625.png screenshot_20220623154626.png

課題

E2Eテスト環境ができてこれで終わりではなく、次のような課題についてさらに対策が必要となります。

  • バージョンやテストなど諸々のメンテナンス
  • E2Eテスト結果の可視化
  • CI/CDにかかる時間の最適化
  • 属人化対策

 

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0