Calabash-Androidでテストシナリオを作成する方法スマホ向け無料システムテスト自動化ツール(5)(2/5 ページ)

» 2015年01月28日 18時00分 公開
[伊藤宏幸,テスト自動化研究会(STAR),楽天株式会社]

「ステップ定義」の仕組み

 Calabash-Androidには、事前に用意されている「ステップ定義」(canned steps/Predefined steps)(GitHub)があり、基本的にこれらを使用してテストシナリオを作成していくことになります。

 一方で、以下のように、事前に用意されている「ステップ定義」だけでは検証が難しい/できない場合もあります。

  • (NumberPickerの操作/WebViewの検証など)事前に用意されている「ステップ定義」では提供されていない操作・検証を行いたい場合
  • 事前に用意されている「ステップ定義」を使って書くとシナリオが冗長になり過ぎてしまい、テストシナリオの可読性を損なう恐れがある場合
  • 事前に用意されている「ステップ定義」にバグや機能不足がある場合

 このような場合、以下で説明するように、「ステップ定義」を自力で作成する必要があります。

テストサーバーの仕組み(http://blog.lesspainful.com/2012/03/07/Calabash-Android/http://blog.lesspainful.com/2012/03/07/Calabash/の図を基に筆者が加筆・修正)

 前回の『Instrumentation Test Serverとは』でも説明しましたが、Calabash-Androidは、上図の仕組みで動作します。

 ここでポイントとなるのは、Calabash-Androidが、「フィーチャー/シナリオ/ステップ」をRubyのプログラムとして扱い(上図左側参照)、これらを「Ruby Client Library」で解釈して、「Instrumentation Test Server」(以下、表記の統一のため、単に「テストサーバー」と表記することとします)を呼び出している点です。

 Calabash-AndroidをはじめとするCucumberベースのBDDツールは、下記で構成されます。

  • ビジネスアナリストやUXデザイナーらの「ビジネスステークホルダー」にとっても可読性の高いフィーチャー/シナリオ/ステップ
  • フィーチャー/シナリオ/ステップを解釈し、テスト対象アプリを呼び出す「ステップ定義」

「ステップ定義」の基本的な作り方

 ここでは、サンプルプログラム(GitHub)の「{プロジェクトのルート}/features/AddCustomer.feature」をコピーして作成した「PreviewCustomer.feature」を例に、「ステップ定義」の基本的な作り方を説明します。

 サンプルプログラムでは、Customer Detail画面からCustomerPreviewActivity画面へ遷移するために、Customer Detail画面にある「button_preview」というメニュー(厳密には「ActionMenuItemView」)をタップする仕様(※注)となっています。

 しかし、そのようなメニューをタップする「ステップ定義」は、Calabash-Androidでは用意されていません。そこで、独自の「ステップ定義」を作成します。

※注

 今回タップしたい「button_preview」メニューは、「{プロジェクトのルート}/app/src/main/res/menu/menu_customer_detail.xml」に定義されています。具体的には、下記の箇所が該当します。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/button_preview"

 今回は、この機能を、下記として定義することとします。

When go preview

 基本的な流れは、以下の通りです。

  1. 「{プロジェクトのルート}/features/PreviewCustomer.feature」に、当該のステップを定義する
  2. 独自の「ステップ定義」ファイルを作成し、上記1のステップを実装する
  3. 「calabash-android run {YOUR_APK_FILE}」コマンドを実行する
    1. 誤りがあった場合は、再度上記1〜3を繰り返す
    2. テストが成功すれば完成!

【1】「{プロジェクトのルート}/features/PreviewCustomer.feature」に、当該のステップを定義する

 「AddCustomer.feature」との区別のため、シナリオ名を「Add customer information and preview it by using WebView」に変更し、下記のように当該のステップを追加します。

  Scenario: Add customer information and preview it by using WebView
 
    Given I press "button_add"
 
    When I enter text "ほむら" into field with id "name"
    And  I enter text "homumado@example.com" into field with id "email"
    And  I press "genderFemale"
    And go preview					←追加

【2】独自の「ステップ定義」ファイルを作成し、上記【1】のステップを実装する

 ちなみに、「ステップ定義」ファイルの接尾辞は、「_steps.rb」となります。今回は「{プロジェクトのルート}/features/step_definitions/PreviewCustomer_steps.rb」を作成することとします。

 今回の「button_previewメニューをタップする」ステップ定義は、以下のようになります。

When(/^go preview$/) do
  touch("ActionMenuItemView id:'button_preview'")
end
  • 上記【1】で追加したステップ「And go preview」は「When」ステップの一部なので、「When go preview」の前提で追加する
  • 「When」のステップなので、名前が「When」で始まるメソッドを定義する
  • 「When」以下は、次の要領で定義する
    • 最初のスペースを除去する
    • ステップ本体をマッチさせるために、「(/^」と「$/)」で囲む
  • 「touch」メソッドを呼び出し、button_previewメニューをタップする処理を定義する(touchメソッドの引数については、『UIコンポーネントを調査するためのインスペクター「console」』で後述)

【3】「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

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。