iOS/AndroidにCucumberのBDDをもたらすテストフレームワークCalabashの基礎知識とインストール:スマホ向け無料システムテスト自動化ツール(4)(1/3 ページ)
本連載では、AndroidおよびiOSアプリ開発における、システムテストを自動化するツールを紹介していきます。今回から数回にわたりオープンソースの「Calabash」、特に「Calabash-Android」を中心に解説。今回は特にツールの基本的な設定・操作方法などを説明します。
BDDフレームワークのスマホ向けラッパー「Calabash」
Calabashは、BDD(Behavior-Driven Development/振る舞い駆動開発)フレームワークの一つとして著名な「Cucumber」の、AndroidおよびiOS向けのラッパーです。それぞれ「Calabash-Android」「Calabash-iOS」と呼称します。
Xamarin社によって開発・保守されているオープンソースツールで、Eclipse Public License 1.0で提供されています。なお本稿執筆時点(2014年11月)で、Calabash-Androidの最新バージョンは0.5.2です。
ちなみにcalabashとは、英語で「ひょうたん」の意味です。Cucumberが「きゅうり」を意味するので、同じウリ科の植物に名前をそろえたようです。
なお、BDD(Behavior-Driven Development/振る舞い駆動開発)については連載「いまさら聞けないTDD/BDD超入門」で扱っていますので、こちらも参考にしてください。
Calabashの特徴
Calabashの一番の特徴は、Cucumberで採用されている、「Gherkin」と呼称される「Given」「When」「Then」のシナリオ形式で、Androidに特化した機能を検証できるテストを記述できることです(ちなみにGherkinとは、英語で「ピクルスに入っている小さいきゅうり」や「ニシインドコキュウリ」の意味です。こちらもウリ科ですね)。
このシナリオ形式は、開発者やテスターだけではなく、ビジネスアナリストやUXデザイナーらにも読みやすい記述が可能となります。そのため、プロダクト開発に関わる全ロールのメンバー間で、開発・テストすべきモノの共通認識を作りやすくなるというメリットがあります。
以下に、Calabash-Androidの構成要素と、サンプルプログラムに基づいたテストの具体例と簡単な説明を紹介します。
なお、本稿の説明で使用するサンプルプログラムを下記に公開しております。本稿と併せてご確認ください。
Calabash-Androidの構成要素
Calabash-Androidのテストは、大きく次の3つの要素によって構成されます。
- フィーチャー:Calabash-Androidの実行単位としてのテストファイルのこと
- (テスト)シナリオ:フィーチャーファイル内の個々のテストケースのこと
- ステップ:シナリオ内の1ロジックのこと
ちなみに1.の「フィーチャー」の本来の意味は、「それ単体でもリリース可能なプロダクトの機能」のことです(『BDD in Action』第4章)。「それ単体でもリリース可能」であるため、結果としてエンドツーエンドのテストを記述するのに適切な粒度となります。
また、前述の「Given」「When」「Then」は、ステップとして使用できる要素です。その意味は次の通りです。
- Given:事前条件
- When:操作
- Then:検証
- And:「Given」「When」「Then」を複数のステップにまたがって表現したいときに使用
上記を図にまとめると、次のようになります。
テストの具体例
テストの具体例を、サンプルプログラムの「{プロジェクトのルート}/features/AddCustomer.feature」を例に説明します
Feature: Add customer
こちらは必須で、テスト対象のフィーチャー名(≒テストファイル名)を、最初に記述します。
In order to know the basics of Calabash-Android As a trial user of HelloTesting I want to add customer data and watch it
こちらは任意で、必要に応じて、そのフィーチャーが何を実現するものなのかを簡潔に説明します。ユーザーストーリーの書式で記述するのが、一般的かつ分かりやすいです。
なお、ユーザーストーリーの書式例については、「Connextra Format」も併せて参考にしてください。
Scenario: Add customer information and preview it 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"で記述をつなぐことも可能です。 Then I should see "ほむら" # 操作後の検証内容を記述します。
こちらは必須で、フィーチャーを検証するためのシナリオを記述していきます。なお、フィーチャーファイル内で日本語を扱うためには、「UTF-8」でファイルを作成する必要があります。
その他
Calabash-AndroidはAndroid 2.2以降に、Calabash-iOSはiOS 4.0以降に対応しています。
同一プロダクトをAndroid/iOS双方で提供する場合、AndroidアプリとiOSアプリとの間でテストシナリオの共通化を図ることができます。
スマートフォンの操作、検証に特化したAPIが提供されています。
- 用意されている機能
- スクリーンショットの撮影ができる。ただし、機能に不足があるため、用途に応じて機能を拡張する必要がある(次回解説)
- GPSや地図の操作機能がある
- 用意されていない機能
- Selenium IDE/Builderのようなレコード&リプレー機能はない
- 端末の回転機能はサポートされていない
「Xamarin Test Cloud」「Sauce Labs」といった、クラウドベースの統合テスト環境との連携が可能です。
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、テスト効率化ノウハウ、リモートテストサービスなど