#はじめに
AirtestIDE でスマホアプリ(ゲーム)のテスト自動化に取り組んでいます。そこで実際に作成したスクリプトを実行する環境をつくるために実施したことを綴っていきたいと思います。
こちらは、昨年の記事「iOSでAirtestを動かしてみる」の続編になります。
前回課題となっていた横向きアプリへの対応が解決しましたので、そちらの情報共有と、当該環境を使用して本格的に取り組みを進めるにあたり、CLI環境からの複数端末での動作確認を行いましたので、いくつかの関連トピックを交えつつ共有できればと考えています。
#環境
macOS Big Sur 11.6.1
Xcode 13.1
Airtest IDE 1.2.12(Python)
iPhone XS(iOS 14.7.1)
iPhone 8(iOS 15.1)
#セットアップ
##Step1 WebDriverAgent
前回紹介していた iOS-Tagent を Appiumの提供する WebDriverAgent に置き換えることで、横向きのアプリにも対応することができました。
WebDriverAgent をクローンします。
$ git clone https://github.com/appium/WebDriverAgent.git
ここで、PCに実機をUSB接続しておきます。
スキーム(ここでは「IntegrationApp」となっている箇所)をタップします。
WebDriverAgentRunner を選択し、先程接続したiOS端末をタップします。(ここでは「iPhone」となっている箇所)
WebDriverAgentRunner にて、Teamを選択します。(無い場合は AppleIDから作成)
Product Bundle Identiferを設定します。(ユニークな文字列にする)
問題なさそうであれば、実機のスリープを解除した状態で、Testを実行します。
実機に WebDriverAgentRunnerがインストールされます。ここで、「設定」アイコンをタップします。
WebDriverAgentRunner のデベロッパを信頼します。
PCに戻って、再度 Testを実行します。(手動で停止するまで実行中の状態となります)
##Step2 Set Ploxy
iproxyをインストールします。
$ brew install libimobiledevice
iproxyを実行します。
$ iproxy 8100 8100
Creating listening port 8100 for device port 8100
waiting for connection
##Step3 AirtestIDE
接続情報を入力して「Connect」ボタンをクリックします。
iOS端末に接続されます。これでAirtestのスクリプトを実行することができるようになりました。
#関連ノウハウ
##コマンドラインからの実行
CLIから実行することで、並行して複数端末での個別実行が可能となります。ここでは、2台の端末(iPhone XS、iPhone 8)を接続している状態を想定しています。
WebDriverAgentの複数起動
$ xcodebuild -project project/appium/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'platform=iOS,id=<iPhone XSのデバイスid>' test
$ xcodebuild -project project/appium/WebDriverAgent/WebDriverAgent.xcodeproj -scheme WebDriverAgentRunner -destination 'platform=iOS,id=<iPhone 8のデバイスid>' test
iproxyの複数起動
$ iproxy 8100 8100 --udid <iPhone XSのデバイスid>
$ iproxy 8200 8100 --udid <iPhone 8のデバイスid>
AirtestIDE スクリプトの複数実行
$ /Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE runner "<スクリプト>.air" --device iOS:///localhost:8100//<iPhone XSのデバイスid>
$ /Applications/AirtestIDE.app/Contents/MacOS/AirtestIDE runner "<スクリプト>.air" --device iOS:///localhost:8200//<iPhone 8のデバイスid>
##デバイスidの確認
デバイスidは idevice_id コマンドで確認できます。
$ brew install libimobiledevice
$ idevice_id
##アプリのインストール
AirtestIDEの install() は iOS環境でサポートされていないので、ios-deploy を使うことにしました。
$ npm install -g --unsafe-perm=true ios-deploy
$ ios-deploy --bundle <ipaファイル>.ipa
インストール先のiOS端末を指定する場合は --id <デバイスid>
を使います。
$ ios-deploy --uninstall_only --bundle_id <バンドルid>
##スリープモードからの復帰
リモート環境から随時利用できるようにiOS端末がスリープ状態から復帰するコードを試してみました。
home()
sleep(2)
home()
text("<iOS端末のパスコード>")
##タップできないポップアップへの対応
アプリ初回起動時にiOSが出すダイアログが何故かタップできませんでした。しかし、一度アプリを終了すると当該ダイアログが残っており、タップできるようになりました。(テスト対象のアプリによるかもしれません)
#参考
appium/WebDriverAgent
macにUSB接続されたiPhoneの情報を取得する方法(libimobiledevice)
#おわりに
参考になった箇所などありましたでしょうか。
これをベースにiOSのテスト環境も構築していきたいと考えています。この記事が何かの助けになりましたら幸いです。