はじめに
Androidモバイルアプリケーションをテスト自動化するとき、よく使うフレームワークとしてAppiumがある。
ただ、Appium + Pythonといったプログラミング言語を用いると、初めての人にとってハードルが高い。
そこで、ある程度簡単に実装できるようにした、キーワード駆動の Robot Frameworkがある。
Robot Frameworkはテストケースを自然言語に近いキーワードを用いて記述するもので、非エンジニアにとっても読みやすく、保守しやすいものになっています。
今回、windows 環境に robot frameworkの環境構築から、モバイルアプリケーションのログイン処理の作成、実行までを初心者でもできるようにドキュメント化した
セットアップ
Node.js
appiumのinstallや実行につかうツール。
基本的に最新版をダウンロードし、デフォルトの設定でインストーラーを進めれば、使えるようになる。
最後に動作確認をコマンドプロンプトで行う
node -v
Java Development Kit (JDK)
Androidの機能を有効にするために、JDKが必要になる。
JDKのサイトより、JDK Development Kit windows版のinstaller最新版をダウンロードする
デフォルトの設定でインストーラーを進めれば、使えるようになる。
環境変数設定
使うにあたって、環境変数の設定が必要となる。
「システム環境変数の編集」を起動し、「環境変数」を選び、追加・編集を行う。
追加する環境変数
変数名 | 意味 | 例 |
---|---|---|
JAVA_HOME | Java install先 | C:\Program Files\Java\jdk-21 |
編集・追加する環境変数
変数名 | 意味 | 例 |
---|---|---|
Path | 実行パス | %JAVA_HOME%\bin |
最後に動作確認をコマンドプロンプトで行う
java -version
Android Studio
Androidのアプリケーション操作などを行うために使う。
Android Studioのサイトより、最新版をダウンロードする
デフォルトの設定でインストーラーを進めれば、使えるようになる。
パスの取得・設定 (インストール後)
インストールが終わり、Android Studioを起動する。
最初、Android開発のwizardが出てきますが、そのままNextを押し続けて、Studioを起動する
起動後、左上のハンバーガーメニューをクリックすると、ヘッダーメニューが開きます。
そこから、File → Settings を選ぶ。
Settingsのモーダルが立ち上がります。
左のメニューから、 Languages&Frameworks -> Android SDK を選ぶと、Android SDK Locationの情報が表示されます。
そのパスを
環境変数設定
先ほどと同様に、環境変数設定を行います
追加する環境変数
変数名 | 意味 | 例 |
---|---|---|
ANDROID_HOME | Android SDK Location | C:\Users\xxx.xxx\AppData\Local\Android\Sdk |
編集・追加する環境変数
変数名 | 意味 | 例 |
---|---|---|
Path | 実行パス | %ANDROID_HOME%\platform-tools |
Path | 実行パス | %ANDROID_HOME%\emulator |
環境変数設定後に、コマンドプロンプトを起動し、以下2つのコマンドを実行し、動くことを確認する
adb
emulator
appium
モバイルを操作するツールになります
npmコマンド(node.jsをインストールすると、使えるようになる)を用いてインストールする
npm install -g appium
最後に、コマンドプロンプトで以下コマンドを実行し、確認します
appium -v
driver install
Android を操作するためのdriverをinstallします
appium driver install uiautomator2
appium 起動
appiumを常駐させます
コマンドプロンプトで以下コマンドを実行します
appium --allow-insecure chromedriver_autodownload
Appium Inspector
モバイルアプリケーションのlocatorを取得するツールになります
ここから最新のversion 「Appium-Inspector-YYYY.MM.DD-win-x64.exe」をダウントードして、インストールする。
appium inspectorを実行すると、以下のアプリケーションが立ち上がる。(動作確認後、閉じてよいです)
Python
Pythonサイトから、Stable Releasesのバージョンをダウンロードする
「Add python.exe to PATH」のチェックを入れて、どこからでも実行できるようにする。
その後、「Install Now」をクリックし、インストールを完了させる。
任意の場所でコマンドプロンプトを開き、以下コマンドを実施し、動作確認をする
python --version
robot framework
robotframeworkでWEBアプリケーションのテストを行うライブラリをインストールする
pip install robotframework
次に、robotコマンドを実行する
robot
※なお、環境やログインユーザーによって、上記 robotのPATHが正しく通ってなく、動かない可能性がある。
その場合、 pipでインストールしたライブラリが、個人のpython folderにインストールされているからです。
その場合、そのfolderもPATHに追加する必要がある
その時、環境変数のpathに追加するfolderは以下のとおりである。
%UserProfile%\AppData\Roaming\Python\Python312\Scripts
まず、exploreで対象folderが存在することを確認する。
その後、exploreで開いたパスを環境変数のpathに追加設定する
追加後に、改めてコマンドプロンプトを開き、実行できるかを確認する
robotframework appium library
次に、モバイルアプリのテストを行うライブラリ appium libraryをインストールする
pip install robotframework-appiumlibrary
テストデバイスとアプリ
Android Studioのvertual 端末、もしくは実機どちらでも使うことができる。
実機を使う場合
以下記事を参考に、端末の設定で、「開発者向けオプション」→「USBデバッグ」を有効にする
Vertual端末
Android StudioのメニューからTools → Device Manager を選ぶ
Device Managerのメニューより「Add a new device → Create Virtual Device」を選ぶ
そこから、任意の端末を選択する。
※Resolutionが高い端末を選ぶと、メモリ不足により不安定になります
コマンドプロンプトで起動
Android StudioのDevice Managerから起動することができます。
その場合、メモリを多く消費します。
そのため、Android Studioなしで仮想端末を立ち上げることをおすすめします。
まず、仮想端末のリスを表示する
emulator -list-avds
このように、登録した仮想端末の一覧(Pixel6, Pixel_7_API_35)が表示される
次に、実際に起動するとき一覧のデバイス名を用いて、以下コマンドを実施する
emulator -avd ${端末名}
このように、仮想端末のみ立ち上がる。
Android端末の認識
adbコマンドを使って、Androidの操作、操作できる端末をリストアップする
コマンドプロンプトで以下コマンドを実行する
adb devices
このように、端末のUDIDとステータスが表示される。
この例では現在2台のAndroid(仮想端末)が接続されています
device : 利用可能
offline : 利用不可能
状態はこの通りです。
deviceの状態になるように、再接続などを行う必要がある。
実機の場合、先ほどの記事に記載した通り、接続許可設定を行うと、deviceの状態になります。
尚、デバイスを特定する必要があるため、UDIDの情報(ex emulator-5554)をメモっておく必要がある
テスト自動化練習用デモアプリインストール
以下に、テスト自動化の練習用Androidデモアプリがある
こちらのapkファイルをダウンロードする
コマンドプロンプトで以下コマンドを実行して、apkファイルをUDIDで指定した端末にアンドロイドアプリケーションをインストールする
adb -s ${端末UDID} install ${apkファイル}
テスト対象
テスト自動化練習デモアプリを用いる。
こちらで、以下ユーザーでログインできることを確認するテストを作成する
項目 | 値 |
---|---|
メールアドレス | alice@example.com |
パスワード | password |
名前 | 山田アリス |
ロケーター情報取得 by Appium inspector
Appium inspectorはモバイルアプリのロケーター情報を取得するツールです。
まず、Appium inspectorからモバイルに接続します
接続するときCapabilitiesを知る必要がある。
Capabilitiesは、接続するモバイル・アプリを特定するものです。
今回、最低限の項目として、以下情報をCapabilitiesと設定し、「Start Session」します。
項目 | 意味 | 入力内容 |
---|---|---|
platformName | 接続するプラットフォーム | Android |
automationName | appiumのdriver名 | UiAutomator2 |
udid | 接続する端末のUDID (adbで取得した情報) | emulator-5554 |
appPackage | 起動するアプリケーション | com.valtes.demo.login |
appActivity | 起動するアプリの画面 | .MainActivity |
Capabilitiesの各項目の詳細はこちら
appium inspectorで、モバイルの表示内容がミラーされます。
その情報を選択すると、その要素のxpathなどのlocator情報をとることができます
テストコード実装
スクリプトを記述するに用いるキーワードはこちらになります。
以下が、今回のテストコードになります(コピーしてそのまま実行できると思います)
*** Settings ***
Library AppiumLibrary
*** Variables ***
${TIME_FOR_STABLE} 2s
${EMAIL} alice@example.com
${PASSWORD} password
${USERNAME} 山田アリス
${APPIUM_SERVER} http://localhost:4723
${AUTOMATION_NAME} UiAutomator2
${PLATFORM_NAME} Android
${UDID} emulator-5554
${APPPACKAGE} com.valtes.demo.login
${APPACTIVITY} .MainActivity
*** Keywords ***
Open Android APP
[Documentation] To open android browser and go to provided URL
[Arguments]
Open Application ${APPIUM_SERVER}
... platformName=${PLATFORM_NAME}
... automationName=${AUTOMATION_NAME}
... udid=${UDID}
... appPackage=${APPPACKAGE}
... appActivity=${APPACTIVITY}
... autoAcceptAlerts=false
... autoGrantPermissions=true
... autoWebView=true
... shouldTerminateApp=true
Sleep ${TIME_FOR_STABLE}
Close_APP
Close Application
Capture ScreenShot
[Arguments] ${filename}
Capture Page Screenshot ${filename}
*** Test Cases ***
SetUp
Open Android APP
Login Test
Click Element //android.widget.ImageView[@content-desc="その他のオプション"]
Click Element //android.widget.TextView[@resource-id="com.valtes.demo.login:id/title" and @text="Login"]
Input Text //android.widget.EditText[@resource-id="com.valtes.demo.login:id/etEmail"] alice@example.com
Input Text //android.widget.EditText[@resource-id="com.valtes.demo.login:id/etPassword"] password
Click Element //android.widget.Button[@resource-id="com.valtes.demo.login:id/btLogin"]
Wait Until Element Is Visible //android.widget.TextView[@resource-id="com.valtes.demo.login:id/tvName"] 10
Element Text Should Be //android.widget.TextView[@resource-id="com.valtes.demo.login:id/tvName"] 山田アリス
ScreenShot
Capture Page Screenshot screen.png
TearDown
Close_APP
実行
robot xxx.robot <- 実行するrobotのファイル名