Calabash-Androidでテストシナリオを作成する方法:スマホ向け無料システムテスト自動化ツール(5)(3/5 ページ)
本連載では、AndroidおよびiOSアプリ開発における、システムテストを自動化するツールを紹介していきます。今回は、Calabash-Androidのテストで必要になる、各種UIコンポーネントの特定・操作・検証方法を紹介し、ステップ定義の仕方やUIコンポーネントを調査するための「console」について解説します。
「ステップ定義」をスケルトンから作成する方法
上記「ステップ定義」は、Calabash-Androidが提供するスケルトンから作成することも可能です。便利なので、併せて紹介します。
基本的な流れは、以下の通りです。
- (変更なし)「{プロジェクトのルート}/features/PreviewCustomer.feature」に、当該のステップを定義する
- 「calabash-android run {YOUR_APK_FILE}」コマンドを実行し、スケルトンを作成する
- 独自の「ステップ定義」ファイルを作成し、上記2で生成されたスケルトンをコピーする
- 再度「calabash-android run {YOUR_APK_FILE}」コマンドを実行し、スケルトンが認識されたことを確認する
- 「ステップ定義」ファイルで、スケルトンを実装する
- 再度、「calabash-android run {YOUR_APK_FILE}」コマンドを実行する
- 誤りがあった場合は、再度上記4〜6を繰り返す
- テストが成功すれば完成!
【1】(変更なし)「{プロジェクトのルート}/features/PreviewCustomer.feature」に、当該のステップを定義する
特に上記『「ステップ定義」の基本的な作り方』との変更点はありません。
【2】「calabash-android run {YOUR_APK_FILE}」コマンドを実行し、スケルトンを作成する
$ calabash-android run app/build/outputs/apk/app-calabash-release.apk (中略) Feature: Preview customer (中略) Scenario: Add customer information and preview it by using WebView # features\PreviewCustomer.feature:9 (中略) And go preview # features\PreviewCustomer.feature:16 1 scenario (1 undefined) 5 steps (1 undefined, 4 passed) 0m13.425s You can implement step definitions for undefined steps with these snippets: When(/^go preview$/) do pending # express the regexp above with the code you wish you had end
「calabash-android run {YOUR_APK_FILE}」コマンドを実行すると、「And go preview」の部分が「ステップ定義」として未定義であること(「1 undefined」がこれを意味します)が分かります。
また、当該の「ステップ定義」のスケルトンも併せて作成、表示してくれます。
【3】独自の「ステップ定義」ファイルを作成し、上記【2】で生成されたスケルトンをコピーする
「{プロジェクトのルート}/features/step_definitions/PreviewCustomer_steps.rb」を作成し、上記スケルトンをコピー&ペーストします。
When(/^go preview$/) do pending # express the regexp above with the code you wish you had end
ちなみに「pending」は、実装未済であることを表します。
【4】再度「calabash-android run {YOUR_APK_FILE}」コマンドを実行し、スケルトンが認識されたことを確認する
$ calabash-android run app/build/outputs/apk/app-calabash-release.apk (中略) Feature: Preview customer (中略) Scenario: Add customer information and preview it by using WebView # features\PreviewCustomer.feature:9 (中略) And go preview # features/step_definitions/PreviewCustomer_steps.rb:1 TODO (Cucumber::Pending) ./features/step_definitions/PreviewCustomer_steps.rb:4:in `/^go preview$/' features\PreviewCustomer.feature:16:in `And go preview' 1 scenario (1 pending) 5 steps (1 pending, 4 passed) 0m11.357s
上記【3】で追加した箇所の実行結果が「undefined」から「pending」に変わり、実装未済という扱いに変わります。従って、上記【3】で追加した「ステップ定義」とスケルトンとが、キチンとCalabash-Androidに認識されたことを確認できます。
【5】「ステップ定義」ファイルで、スケルトンを実装する
「ステップ定義」ファイルで、スケルトンを実装します。上記『【2】「calabash-android run {YOUR_APK_FILE}」コマンドを実行し、スケルトンを作成する』と同じ要領で、「{プロジェクトのルート}/features/step_definitions/PreviewCustomer_steps.rb」に下記のようにスケルトンを実装します。
When(/^go preview$/) do touch("ActionMenuItemView id:'button_preview'") end
【6】再度、「calabash-android run {YOUR_APK_FILE}」コマンドを実行する
$ calabash-android run app/build/outputs/apk/app-calabash-release.apk (中略) Feature: Preview customer (中略) Scenario: Add customer information and preview it by using WebView # features\PreviewCustomer.feature:9 (中略) And go preview # features/step_definitions/PreviewCustomer_steps.rb:1 1 scenario (1 passed) 5 steps (5 passed) 0m11.134s
NumberPickerを操作するためのステップ定義
前述しましたが、Calabash-Androidの「入力フィールドの操作方法(GitHub)」には、DatePickerおよびTimePickerを操作するステップは用意されているのですが、NumberPickerを操作するステップは現時点(バージョン0.5.2)では用意されていません。
従って、NumberPickerを操作したい場合は、独自にステップを定義する必要があります。
今回のサンプルプログラムの場合、Customer Detail画面のNumberPickerは、IDが「agePicker」です。このことは、後述の「console」の結果からも確認できます。
irb(main):011:0> query("NumberPicker id:'agePicker'") [ [0] { "id" => "agePicker", "enabled" => true, "contentDescription" => "age pickerview", "class" => "android.widget.NumberPicker", "rect" => { "center_y" => 321, "center_x" => 146, "height" => 180, "y" => 231, "width" => 128, "x" => 82 }, "tag" => nil, "description" => "android.widget.NumberPicker{b20df0b0 V.ED.... ......I. 66,0-194,180 #7f09000d app:id/agePicker}" } ]
「query」メソッドは下記のように、第2引数に「:{メソッド名}{操作}」の書式を指定することで、当該UIコンポーネントのメソッドを呼び出すことが可能です。
query("NumberPicker id:'agePicker'", :setValue=>14)
この例では、NumberPickerの「setValue」メソッドを、引数「14」を指定して呼び出しています。
しかし今回のサンプルでは、Customer Detail画面のNumberPickerでsetValueメソッドを呼び出しただけでは、CustomerPreviewActivity画面で年齢欄を更新できません。
これは、「{プロジェクトのルート}/app/src/main/java/com/nowsprinting/hellotesting/app/CustomerDetailFragment.java」の「onCreateView」メソッド内で、「onValueChange」イベントが呼ばれたときに、NumberPickerに設定したvalueが初めて年齢に反映される作りとなっているためです。
そのため今回は、setValueメソッド呼び出し後にNumberPickerを「pan」することでonValueChangeイベントを(無理やり)発動させて、setValueメソッドで設定した値を反映することとします。
pan("NumberPicker id:'agePicker'", :up) pan("NumberPicker id:'agePicker'", :down) # 設定中に画面が遷移しないよう、念のため1秒待機します。 sleep 1
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- テスト自動化の歴史と今後、良い/悪い事例〜システムテスト自動化カンファレンス2013レポート
テスト自動化を開発の“武器”にするための3つのポイントや、“自動化”の良い事例、悪い事例など、テストの現場を「進化させる」知見が多数紹介されたカンファンレンスの模様をレポートする。 - ビジネス目標を見据えたテスト設計が肝!「DevOps時代のテスト自動化カンファレンス 冬の陣」開催
DevOpsの実践で肝となるソフトウェアテストの自動化。しかし@ITの読者調査でも50%以上が「テスト環境に課題あり」と回答した。これにどう対応すれは良いのだろうか? カンファレンス登壇者の言葉にヒントを探る。 - Kiwi+CocoaPodsで始めるiOSアプリの振る舞いテスト入門
現代の開発現場において欠かせないCI/継続的デリバリを、iOSアプリ開発に適用するためのツールやノウハウを解説する連載。今回は、iOSアプリの機能の振る舞いをテストするテスティングフレームワークの特長とインストールの仕方、主な使い方を解説します。 - Android SDKでビジネスロジックのテストを自動化するには
- 第2回Androidテスト祭りレポート:Android開発の上層テストで失敗しないためのポイントとは
セキュリティ設計や受け入れテストガイドライン、CIツールJenkins+コードレビューGeritt、テスト効率化ノウハウ、リモートテストサービスなど