Androidの操作を自動化してテストを自動化する
開発環境
Mac 10.14.6
やったこと
- Mac でmonkeyrunnerを動かすためにopenjdk8のインストール
- monkeyrunner で操作を記録
- 記録した操作で実行
参考にしたサイト
https://qiita.com/ikota/items/ef6bdb4dad6ab9ba912a
https://developer.android.com/studio/test/monkeyrunner/MonkeyDevice?hl=ja
##手順
monkeyrunnerの実行環境の構築
すでにAndroid StudioがDownloadされている環境ではmonkeyrunnerが以下にある。
/Users/xxx/Library/Android/sdk/tools/bin/monkeyrunner
ターミナルからmonkeyrunnerを実行すると、以下のエラーが出て実行できない。
./monkeyrunner
-Djava.ext.dirs=/Users/xxx/Library/Android/sdk/tools/lib:/Users/xxx/Library/Android/sdk/tools/lib/x86_64 is not supported. Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
monkeyrunner は"Java SE 10.0.2" では実行できないようなので OpenJDK 8をinstallする。
$ brew tap homebrew/cask-versions
==> Tapping homebrew/cask-versions
Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask-versions'...
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 225744 (delta 8), reused 6 (delta 4), pack-reused 225723
Receiving objects: 100% (225744/225744), 58.27 MiB | 7.02 MiB/s, done.
Resolving deltas: 100% (155275/155275), done.
Tapped 155 casks (202 files, 64.5MB).
$ brew cask install adoptopenjdk8
==> Downloading https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u252-b09/OpenJDK8U-jdk_x64_mac_hotspot_8u252b09.pkg
==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws.com/140418865/c5d7a700-80b2-11ea-83f0-4ba454f82e1c?X-Amz-Algorithm=AWS4-HMAC-SHA256
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'adoptopenjdk8'.
==> Installing Cask adoptopenjdk8
==> Running installer for adoptopenjdk8; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
installer: Package name is AdoptOpenJDK
installer: Installing at base path /
installer: The install was successful.
🍺 adoptopenjdk8 was successfully installed!
openjdk8 がインストールされたことを確認する。
$ /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -V
Matching Java Virtual Machines (2):
10.0.2, x86_64: "Java SE 10.0.2" /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
1.8.0_252, x86_64: "AdoptOpenJDK 8" /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
defaultのjava versionをopenjdk8に切り替える。
export JAVA_HOME=$(/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java_home -v "1.8.0_252")
PATH=${JAVA_HOME}/bin:${PATH}
Android 端末側で開発者オプションを有効にして、adb 接続できていることを確認する。
$ adb devices
List of devices attached
18f8de88 device
これで実行環境は整った。
monkeyrunner で操作を記録して、実行スクリプトに変換して実行
こちらのサイトに書かれている通りに実行する。
https://qiita.com/ikota/items/ef6bdb4dad6ab9ba912a
$ /Users/xxx/Library/Android/sdk/tools/bin/monkeyrunner ~/run_monkeyrecoder.py
携帯の画面と操作したログが右側に表示されるので、テストしたいシナリオを実行した後に、
Export Actions をして操作ログをaction_test.txtとして保存する。
先ほど保存したaction_test.txtを @ikota さんのconverterスクリプトを使って実行用のスクリプトに変換する。
$ python monkey_converter.py action_test.txt action_test.py
変換してできたaction_test.pyをmonkeyrunnerで実行すれば、自動で先ほど行った操作ができるようになる。
$ /Users/xxx/Library/Android/sdk/tools/bin/monkeyrunner ~/action_test.py
以上で、
Mac OS上でMonkey Runnerを使って、Android 端末の制御を自動化できた。