
画像ソース
この記事では、モバイルアプリケーションのテストを自動化する別のフレームワーク、つまりAndroidおよびiOSアプリケーションの受け入れテスト用のクロスプラットフォームソリューションであるCalabashを紹介します。 この記事は、Androidアプリケーションをテストしている、またはテストしたい初心者を対象としています。
ひょうたん
Calabashは、AndroidおよびiOSアプリケーションの受け入れテストを自動化するためのオープンソースのクロスプラットフォームフレームワークです。 開発とサポートはXamarinによって実行されます。 Xamarinは、商用クラウドテスト機能も提供します。
Calabashは、テストがプログラムでネイティブおよびハイブリッドアプリケーションと対話できるようにするライブラリで構成されています。 相互作用は、実装されたユーザーアクションの形式です。 そのようなアクションには以下が含まれます。
- ジェスチャー
タップおよびジェスチャ(タップ、スワイプ、回転など)。
- チェック
例:画面に「ログイン」ボタンがあるはずです。
- モバイルデバイスのスクリーンショットを撮る
CalabashはSelenium WebDriverと比較できます。 ただし、コンピューターからのWebアプリケーションとの対話は、タッチスクリーンを使用したネイティブアプリケーションの対話とは大きく異なることを理解しておく必要があります。
カラバッシュはキュウリをサポートしています。 Cucumberでは、プログラミングの知識がなくても、ビジネスアナリスト、マネージャー、テスターが理解できる単純な「人間」言語を使用して、プログラムの動作を記述することができます。 例を見てみましょう:
Feature: Rating a stand Scenario: Find and rate a stand from the list Given I am on the foodstand list Then I should see a "rating" button And I should not see "Dixie Burger & Gumbo Soup" When I touch the "rating" button Then I should see "Dixie Burger & Gumbo Soup" When I touch "Dixie Burger & Gumbo Soup" Then I should see details for "Dixie Burger & Gumbo Soup" When I touch the "rate_it" button Then I should see the rating panel When I touch "star5" And I touch "rate" Then "Dixie Burger & Gumbo Soup" should be rated 5 stars
Cucumberについて詳しく知るには、たとえば記事habrahabr.ru/post/62958を読んでください。
Calabashアプリケーションテストの利点:
- テストの書きやすさ
- クロスプラットフォームテストを作成する機能(AndroidおよびiOS)
- キュウリスタイルのスクリプト
- 優れたRuby API
- クラウドでテストを実行する機能
- エミュレーターでテストを実行する機能
短所:
- オブジェクトを識別するのが難しい場合があります
- テストスクリプトを記述するための規定の手順では、必ずしも十分ではありません
- テスト対象のアプリケーションに必要なapkファイル
- 十分に長いテスト
設置
WindowsとLinuxまたはMacOSの両方でCalabashを使用してテストできますが、この場合は64ビットWindows 8を使用しています(Windows 7 64xでもテストしました)。 Calabashを起動するには、いくつかのコンポーネントをインストールする必要があります。
- JDK7 Standard Edition
JDK7(または6)がインストールされていない場合は、 www.oracle.com / technetwork / java / javase / downloads / jdk7- downloads- 1880260.htmlをダウンロードしてインストールします。 JDKをインストールした後、JDKの場所を示すJAVA_HOMEシステム変数を作成する必要があります 。 また、PATH環境変数にjavaへのパスを追加します( JDKインストールパスを変更しなかった場合、javaはここにあります:C:\ Program Files \ Java \ jre7 \ bin )。
- Android SDK
Android SDK(またはADTバンドル)の便利な場所にダウンロードして解凍します: developer.android.com/sdk/index.html? hl=sk その後、 Android SDKの場所を示すANDROID_HOME変数を作成する必要があります( 私にとっては:C:\ adt-bundle-windows-x86_64-20131030 \ sdk )。また、 PATHに adbの場所を追加する必要があります( たとえば、C:\ adt-bundle-windows-x86_64 -20131030 \ sdk \ platform-tools )
- アリ
Ant(http://ant.apache.org/bindownload.cgi)をダウンロードして解凍し、Antへのパスを書き込む変数ANT_HOMEを作成し、前述のようにant.exeの場所をPATH環境変数、つまり%に追加しますANT_HOME%\ bin
- Ruby 1.9.3。 (2.0ではありません!!!)
rubyinstaller.org/downloadsからインストールファイルをダウンロードし、インストール中に、「PATHにruby実行可能ファイルを追加」ボックスをチェックします。
- Ruby開発キット
Ruby gem(パッケージマネージャー)にアクセスするには、Ruby開発キットも必要です。 Webサイトrubyinstaller.org/downloadsからインストールファイルをダウンロードする必要があります。 画面の指示に従ってインストールします。
その後、変数を正しく追加したことを確認します。

すべて問題ありません。RubygemパッケージマネージャーからCalabash-androidをインストールします(Windowsコマンドラインを実行します)。
> gem install calabash-android
すべてがインストールされたら、テストを開始できます。
テストケース開発
レビューのために、複雑なシナリオを作成しません。アプリケーションメニューのオランダ語ローカライズのチェックを実装します。 有名なClean Master(無料)アプリケーションバージョン3.8.1をテストします。そのapkはWebサイトwww.androiddrawer.comで入手できます。
テストで実装されるアクションを定義します。
- アプリケーションメニューで必要なすべてのオプションの可用性を確認する
- アプリケーション言語をオランダ語に変更する
- メニューオプションの正しい翻訳の確認
アプリケーション分析
アプリケーションのユーザーインターフェイスを分析するには、コンソールの対話型Calabash環境を使用します。 Ruby API( github.com/calabash/calabash-android/blob/master/documentation/ruby_api.md )を使用すると、画面に表示されているオブジェクトとそのプロパティを取得できます。 Calabashインタラクティブ環境で最も必要なコマンドは次のとおりです:必要なオブジェクトとそのプロパティを見つけるためのクエリ 、 tap-オブジェクトをクリックするコマンド、 performActionコマンド-特定のアクション(戻るボタン、メニュー、スクロールなどを押す)を実行します。 アプリケーションUIの分析により、テストスクリプトの記述プロセスが大幅に簡素化されます。
開始するには、以下を行う必要があります。
- プロジェクトを保存するディレクトリを作成します。
> mkdir calabash_habr && cd calabash_habr
- 機能の説明、ステップの説明(ステップ定義)、サポートを含むディレクトリを含むCucumberファイル構造を生成します。
> calabash-android gen
- apkをプロジェクトディレクトリのルートに配置します
- その後、アプリケーションに再署名する必要があります。
> calabash-android resign "Clean Master_3.8.1.apk"
再署名できなかった場合は、最初にコマンドを実行する必要があります。
keytool -genkey -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -keysize 2048 -validity 10000 -dname "CN=Android Debug,O=Android,C=US"
- デバイスを接続する
- テストしたアプリケーションをデバイスにインストールします。
> adb install "Clean Master_3.8.1.apk"
これで、アプリケーションインターフェイスの分析を開始できます。
- 対話型コンソール環境calabash-consoleの開始
> calabash-android console "Clean Master_3.8.1.apk"
- テストサーバーを起動します。
irb(main):001:0> start_test_server_in_background
テストサーバーを起動できなかった場合は、次のコマンドを実行します。
irb(main):001:0> reinstall_apps
- [メニュー]ボタンをクリックします。
irb(main):007:0> performAction('press_menu')
そして、我々は得る:
{ "bonusInformation" => [], "message" => "", "success" => true }
メニューが開きました。
- 「設定」に移動する必要があります。そのために、最初に「設定」というテキストのあるオブジェクトを見つけます。
irb(main):008:0> query("* text:'Settings'")
その結果、テキスト「Settings」を持つオブジェクトのIDは「menuSettings」であることがわかります。
[ [0] { "id" => "menuSettings", "enabled" => true, "contentDescription" => nil, "class" => "android.widget.Button", "text" => "Settings", "rect" => { "center_y" => 67.0, "center_x" => 720.0, "height" => 40, "y" => 47, "width" => 160, "x" => 640 }, "description" => "android.widget.Button@4280e6f8" } ]
- idが「menuSettings」のボタンをクリックします。
irb(main):011:0> tap('menuSettings')
その後、アプリケーションの設定が開きました
- これで十分です。対話型コンソールを終了します。
irb(main):003:0> exit
それでは、テストの作成を始めましょう。 Calabashには十分な数のステップが作成されており、機能を説明するときに使用できます。 サイトにデフォルトで存在するアクションを参照してください: github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/canned_steps.md 、デフォルトのアクションが十分でない場合は美しいRuby APIの説明は、サイトで入手できます: github.com/calabash/calabash-android/blob/master/documentation/ruby_api.md
featuresディレクトリにあるmy_first.featureファイルを開き、テストスクリプトを記述します。 この例では、Calabashが提供するステップを使用します( github.com/calabash/calabash-android/blob/master/ruby-gem/lib/calabash-android/canned_steps.mdステップの説明)
次の単純なスクリプトを取得します
Feature: Menu localization # Scenario: As a user I can open a menu and verify options # "" When I press the menu key # , "Settings", "Update" .. Then I see "Settings" Then I see "Update" Then I see "Like us" Then I see "Rate us" Then I see "Feedback" Then I see "FAQ" Then I see "Fast Clean" Then I see "About" Scenario: As a user I can change language app to Nedelrands When I press the menu key When I press "Settings" Then I press "Language" When I press "Nederlands" Then I see "Taal" When I go back When I press the menu key Then I see "Instellingen" Then I see "Moderniseren" Then I see "Net als wij" Then I see "Beoordeel ons" Then I see "Terugcontact" Then I see "FAQ" Then I see "Snel schoonmaken" Then I see "Over ons"
ご覧のとおり、すべてが非常に簡単です。 テストを実行します。
> calabash-android run "Clean Master_3.8.1.apk"
スクリプトを渡すと、次の結果が得られます。

2つのシナリオのうち、ステップの1つがテストに失敗したため、1つは失敗しました。 プロジェクトディレクトリで、calabashはscreenshot_x.pngというスクリーンショットを生成します。
確かに、「更新」という言葉
オランダ語に翻訳されていない

おわりに
Calabashフレームワークを使用すると、アプリケーションの高品質な受け入れテストに非常に便利です。 労力をかけずに、AndroidアプリケーションとiOSアプリケーションの両方で機能するテストスクリプトを作成できます。 このフレームワークは積極的に開発されており、使いやすく統合されています。 時間の経過とともに、Calabash Ruby APIを使用してアクションをプログラムする方法に関する短い投稿を作成します。 詳細については、 github.com / calabash / calabash-androidをご覧ください 。
便宜上、完成したプロジェクトをGitHubでクローンできます: github.com/amazpyel/calabash_habr