お仕事でAndroid,iOSのE2Eテストをやる必要があったのと、appium 2.0が試せる状態だったので、このたび環境を構築してみたメモです
Appium 2.0?
モバイルアプリ用テスト自動化ツール「Appium 2.0」まもなく登場。ドライバーの分離、プラグインによる拡張対応など、新機能を開発者Jonathan Lipps氏が解説 - Publickey
現在のところ、 2.0正式版はまだ公開されておらず、テスト版になりますが、 npm install -g appium@next
で簡単に導入出来るようなので、使ってみました
構成
雑いですがアーキテクチャはこのような感じです
- Windows,Mac,Linuxは、それぞれ別のマシン(3台)を使用していますが、appiumとDockerは特に同居していても問題ないと思います
- Windows,Macは、ポート
4723
をListenするため、ポートを占有しないようにしておく必要があります - MacでもAndroid Studioは動作するため、WindowsはMacでも代用出来ると思います(たぶん)
- Robotframeworkを実行しているLinuxは、自分がWSL2を使用しているだけなので特に理由はありません
- 当記事ではRobotframeworkのテストコード書き方については触れません(Appiumでテスト環境を構築する事が本題)
1.Windows上にAndroid StudioをインストールしてAndroidエミュレータを起動
この章では、以下の手順でAndroidエミュレータを起動するまでの手順をまとめます。(必要無い場合は次の章へ)
- Android Studioをインストール
- JDK8をインストール
- 環境変数を設定
- AVD Managerを使用してAndroidエミュレータを作成&起動
1.Android Studioをインストール
Android Studio のインストール | Android Developers
上記、公式の記事通りで特に特筆すべき事は無いです
2.JDK8をインストール
Java SE Development Kit 8 - Downloads | Oracle 日本
上記より、 jdk-8u301-windows-x64.exe
みたいなのをダウンロードしてインストールします
3.環境変数を設定
Android Studio、Java、それぞれの環境変数を設定します
Name | Value |
---|---|
ANDROID_HOME | Android SDKのPath(例: C:\Users\username\AppData\Local\Android\Sdk ) |
JAVA_HOME | JDKのPath(例: C:\Program Files\Java\jre1.8.0_31 ) |
Android SDKのPathは、初見ではわかりづらかったですが、 Android StudioをインストールしたPathではありません。
以下の通り、Android Studioの Settingsから確認出来ます
そして、環境変数 Path
に、以下の2行を追加します
Value |
---|
%ANDROID_HOME%platform-tools |
%JAVA_HOME%bin |
4.AVD Managerを使用してAndroidエミュレータを作成
以下の手順で、Androidエミュレータを作成します
- Android Studioを起動し、
Tools
メニューから、AVD Manager
を開く Create Virtual Device
を選択- 今回は、
Pixel 5
を選びました → 補足:エミュレータ内でPlay Storeを使用したい場合 - 今回は、 Androidバージョン
10.0
を選びました(任意) Finish
押下で作成
作成が完了したら、再生ボタンのようなアイコンを押すとエミュレータが起動します
補足:エミュレータ内でPlay Storeを使用したい場合
端末選択時に、「Play Store」列にアイコンがある端末を使用します
もしくは、特定バージョンのChromeを入れたいとか、直接導入したいapkがある場合には、試していませんが以下のサイトのように別途導入したりできるようです
Android Virtual DeviceでChromeを使えるようにする方法 | ハックノート
2.Mac上にXCodeをインストールしてiOSエミュレータを起動
この章では、以下の手順でiOSエミュレータを起動するまでの手順をまとめます。(必要無い場合は次の章へ)
- XCodeをインストール
- JDK8をインストール
- iOSエミュレータを起動
1.XCodeをインストール
あまり覚えていないのですが、たしかApp Storeで XCode
と検索してインストールした覚えがあります(かなり古いMacを使用しているのですみません)
2.JDK8をインストール
Java SE Development Kit 8 - Downloads | Oracle 日本
上記より、 jdk-8u301-macosx-x64.dmg
みたいなのをダウンロードしてインストールします
3.iOSエミュレータを起動
XCodeを起動し、メニューから、 Open Developer Tool
→ Simulator
と選ぶと、Macの画面上にiPhoneが表示されます
(Androidと違い、手順も少なく公式なので安心感がありますね)
3. appium: インストール
インストールは npm
で行います。(各環境でのnpm実行環境の構築については本記事では割愛します)
Windowsは PowerShell
、Macは iTerm2
で作業しています
1 | // Windows,Macで実行 |
4. appium: ドライバのインストール
AndroidはUIAutomator、iOSはXCUITestを使用するため、Appiumのドライバをインストールします
1 | // ドライバの一覧を表示 |
Windowsは uiautomator2
、Macは xcuitest
をインストールします
1 | // ドライバのインストール(Windows) |
5. appium: サーバを起動
appium server
コマンド(or appium
)を使用してappiumサーバを起動します。appiumサーバは、Windows,Macそれぞれの 4723
ポートでテストの待ち受けを行います
Windows(Android)の方は、chromedriverを自動でダウンロードするように、 --allow-insecure chromedriver_autodownload
オプションを指定しています
1 | // appiumサーバを起動(Windows) |
起動がうまくいけば、こんな感じで待ち受けが始まります
1 | // 例: Mac |
6. テストを実行(Python)
Robotframeworkで実行する前に、試しに簡単なスクリプトを書いて Androidでのテストを実行してみます
platformVersion
の所は、作成したAndroidエミュレータに従って置き換えて下さい
1 | // Android(Windows)版 |
注:コピペする際にちょっとコード書き換えたので一発で動かないかもしれません、すみません
ちなみに、iOSの場合の capabilities
は以下のようになります
1 | // iOS(Mac)版 |
補足: iOSシミュレータでappiumのエラーが出る場合
[Appium]iOSシミュレーターでテストしようとしたら”Could not get Xcode version.”というエラーが表示されたときの対処 - Qiita
上記の記事と同様、 Could not get Xcode version
のエラーが出ました
上記の記事と同様に、以下の2ステップでFIXしました
1 | // XCodeのPATHを確認 |
6. テストを実行(Robotframework)
Robotframeworkでは、 AppiumLibraryが公開されています(Github)
1 | // AppiumLibraryのインストール |
これを Library
でインポートして使用します
1 | // 例:ブラウザを開くキーワード - Android(Windows)版 |
例えば、SeleniumLibraryで Open Browser
を使用している箇所は Open Application
を使用します
1 | // Android(Chrome) |
Androidエミュレータ上にFirefoxやEdgeをインストールして動作させる場合は以下のようになります (エミュレータ上でPlay Storeを使用する手順はこちら→ 補足:エミュレータ内でPlay Storeを使用したい場合)
appPackage
に、起動させたいアプリのアドレスを記述(パッケージ名は、Playストアをブラウザで開いてアドレスバーを見るとあります)appActivity
になんか記述します。適当にググったら出てきました(Launch Activityというらしい → 参考:AppiumでAndroid端末にインストールされたあらゆるアプリの操作を自動化してみよう - Qiita)
1 | # Android(Firefox) |
その他AppiumLibraryの例としては、 Portraitや、Landscapeキーワードを使って端末を回転させたりなど、実機(エミュ)独特のテストシナリオが実現できます
補足: Macでconnect ECONNREFUSEDが出る
iOS(Mac)でテストを実行したところ、 Error: connect ECONNREFUSED 127.0.0.1:8100
エラーが出たため、iOS(Mac)では wdaStartupRetries=4 iosInstallPause=8000 wdaStartupRetryInterval=20000
を追加しました
以下のIssueを参考にしました
Error: connect ECONNREFUSED 127.0.0.1:8100 · Issue #12094 · appium/appium