2015年11月4日水曜日

Appium+RubyによるAndroidアプリの受け入れテスト(環境構築)


▲[外部] appium_logo_final.eps より引用

■はじめに

自動化テストツールAppium、テストコードの記述言語としてRubyを用いたAndroidアプリケーションの自動テスト実施についての説明を行います。
Appiumはテスト対象アプリのapkファイルがあればソースコードが無くともテストスクリプトを書いてテストを実施することができるため、アプリケーションの受け入れテストに向いているとい。
この記事ではWindowsに環境を構築してサンプルコードを実行するまでを紹介します。


環境構築前の事前準備

Appiumを起動しRubyで書いたテストコードを実行するためには、AppiumとRubyの他にインストールしなければいけないソフトウェアやその設定があります。Androidアプリケーションの開発を行っているのであれば必須と言えるものばかりのため、既に開発環境を構築出済みであれば不要です。


■Android SDK

▲[外部] Android Developers より引用

Appiumでは、テスト対象アプリケーションや補助アプリケーションのインストールやAppium Client LibrariesのAPIでADBコマンドを用いたり、補助アプリケーションをソースコードからビルドしたりします。このため、Android SDKを構成するいくつかのコンポーネントをインストールする必要があります。最低限必要なものは以下の2つです。
  • Android SDK Platform-tools
  • Android SDK Build-tools

Emulatorでの実行を考えているのであれば、ターゲットバージョンのSystem Imageも必要になります。

■Android SDKの環境変数

AppiumではAndroid SDKのインストール先を特定するためにAndroid SDK側の環境変数を参照しています。Android SDKのインストールする方法によっては自動的にセットされる場合もありますが、そうでない場合は別途セットするようにして下さい。
  • 変数名: ANDROID_HOME
  • 値: Android SDKのルートディレクトリのパス

■Java Development Kit 7/8

JavaはAppiumの実行の他、Android SDKに含まれるツールの実行にも必要です。WindowsであればJava Runtime Environment (JRE)のみでも動作するようですが、Android SDKのシステム要件であるJava Development Kit (JDK)をインストールしておくのが良いでしょう。


環境構築

まずはWindowsにAppiumとRubyをインストールする方法を記載します。スクリーンショットはWindows 10のものを用いていますが、Windows 7でも同様の手順で構築可能です。


■Appiumのインストール

Appiumのインストールは、公式サイトからインストーラーをダウンロードし実行することで行います。

▲[外部] Android Developers より引用

ダウンロードしたzipファイルを展開しappium-installer.exeを実行、セットアップウィザードを起動します。あとは画面の指示に従い必要であれば設定を変更しインストールを行って下さい。

インストール完了後Appiumが起動すれば完了です。

■Rubyのインストール

WindowsでRubyの実行環境を構築する場合、Rubyの公式サイトでも紹介されているRubyInstaller for Windowsというサードパーティ製のインストーラーを用いるのが簡単です。

▲[外部] RubyInstaller for Windows より引用

RubyInstallerのサイトのダウンロードページからダウンロードを行うのですが、選択するバージョンには注意が必要です。
最新のRuby 2.2.x(執筆時点ではRuby 2.2.3)ではなく、その下にあるRuby 2.1.x(執筆時点ではRuby 2.1.7)をダウンロードして下さい。これは、Ruby 2.2.xだとテストコード実行時にエラーが発生してしまうためです。

▲[外部] RubyInstaller for Windows より引用

ダウンロードされた実行形式ファイルを実行しセットアップウィザード起動、画面の指示に従ってインストールを行います。

基本的にデフォルトの設定で問題ありませんが、[インストール先とオプションの指定]では[Ruby の実行ファイルへ環境変数 PATH を設定する]にチェックを入れておくと環境変数をセットする手間が省けるため便利です。

コマンドプロンプトで"ruby -v"と実行し、バージョンが表示されればOKです。

>ruby -v
ruby 2.1.7p400 (2015-08-18 revision 51632) [x64-mingw32]

■Rubyのライブラリ(gem)のインストール

Rubyではサードパーティ製のライブラリが"gem"という形式で公開されており、gemコマンドを使用してインストールすることができます。gemコマンドはRubyInstallerでRubyをインストールした際に組み込まれていますので、特にすることはありません。ここではRubyからAppiumを使用するためのライブラリ"appium_lib"をインストールします。
gemのインストールは簡単で、以下のように"gem install <gem名>"と実行するだけです。これによってappium_libと依存するgemがインストールされます。

>gem install appium_lib

これで環境構築は完了です。


サンプルコードの実行

AppiumのサンプルコードはGitHubのappium/sample-codeリポジトリで公開されていますが、rubyのものはxUnitやRSpecといったテスティングフレームワークの利用が前提となっているようです。今回は最小限の環境構築に留めるためそれらは使用しません。apkファイルのみでもテストが可能な事を示すため、公開されているapkファイルを利用させてもらうようにします。

■準備

前述のリポジトリにある sample-code/apps/selendroid-test-app.apk をダウンロードし任意のパスにコピーします。
次にテキストエディタを用いて以下のコードを記述し、先ほどのapkファイルと同じ場所にsample.rbとして保存します。

# encoding: utf-8
require "appium_lib"

desired_caps = {
  caps: {
    platformName:  "Android",
    deviceName:    "Android Device",
    app:           "#{Dir.pwd}/selendroid-test-app.apk",
  }
}

driver = Appium::Driver.new(desired_caps).start_driver
Appium.promote_appium_methods Object

button_element = find_element(:id, "io.selendroid.testapp:id/visibleButtonTest")
button_element.click
sleep 3
text_element = find_element(:id, "io.selendroid.testapp:id/visibleTextView")
displayed_text = text_element.text
button_element.click
sleep 3
puts displayed_text

driver.quit

■実行

Appiumを起動し右上にある右向き三角ボタン(いわゆる再生ボタン)をクリックし、以下のような表示になるまで少し待ちます。

コマンドプロンプトから以下のようにしてサンプルコードを実行します。

>ruby sample.rb

テスト対象アプリケーションとAppiumがテストで使用するアプリケーションのインストール、テスト対象アプリケーションの起動が行われテストが実行されます。最終的にコマンドプロンプトに"Text is sometimes displayed"が表示されれば成功です。

■解説

Appium側の操作によってサーバープログラムが起動しています。PCに接続したデバイスに対して直接操作を行うのがこのサーバーで、テストスクリプトからはサーバーを介して画面の操作や情報の取得を行うことになります。
スクリプトの12行目でサーバーへの接続を行い、Appium::Driverクラスのインスタンスを取得しています。4〜9行目のdesired_capsはそのためのパラメーターです。
15〜22行目がテストの本体となっている部分で、詳細な説明は省きますが、テストアプリケーションの画面に表示されている[Display text view]ボタンをクリックし、表示されたテキスト"Text is sometimes displayed"を変数に保存、それをコマンドプロンプトへ出力する、といった事をしています。

140 180

記載されている会社名、および商品名等は、各社の商標または登録商標です。

0 コメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...