Calabash Android テストツールチュートリアル

⚡ スマートサマリー

Calabash は、実際のユーザーインターフェイスアクションを実行するオープンソースの受け入れテストフレームワークです。 Android 平易な英語を使用したiOSアプリケーション Cucumber Rubyのステップ定義とデバイス側のテストサーバーによって支えられたシナリオ。

  • 🔸 定義: Calabash 実機およびエミュレーター上のネイティブおよびハイブリッドモバイルアプリケーションに対するタップ、テキスト入力、およびアサーションを自動化します。
  • ☑️ 言語スタック: シナリオはGherkinフィーチャーファイルで記述され、対応するメソッドはstep_definitions内のRubyファイルに格納されます。
  • BDDの基礎: ビヘイビア駆動開発(BDD)では、ビジネスオーナー、開発者、テスターが、スクリプトを作成する前に動作について合意することができます。
  • 🧪 セットアップ順序: Java JDK、次にRuby、次に Android Studio次に、calabash-android gem をバージョンコマンドで検証します。
  • 🛠️ 実行フロー: APKに再署名し、テストサーバーを構築し、デバイスを接続し、ロケーターを照会してから、フィーチャーファイルを実行します。
  • 📊 現在の状態: Calabash アーカイブされメンテナンスされていないため、新しいプロジェクトでは一般的に Appium, Espresso またはXCUITestを使用することもできます。

Calabash テストツールのチュートリアル Android 表示 Cucumber モバイルアプリケーションを駆動するフィーチャーファイル

何ですか Calabash?

Calabash オープンソースの承認 テスト iOS 用のテストを作成して実行できるフレームワーク Android アプリ。

これは、Ruby でテストを記述できる自動化されたユーザー インターフェイス フレームワークです。 Cucumber.

Calabash モバイルアプリケーション内でのボタン操作、テキスト入力、応答検証などの自動UI操作を可能にすることで機能します。さまざまな環境で動作するように構成できます。 Android iOS デバイスでは、リアルタイムのフィードバックと検証が提供されます。

⚠️ バージョンノート: Microsoft 拠出を終了した Calabash 最終的な iOS 11 と Android 8つのリリース、そして calabash-androidリポジトリ 現在、このプロジェクトはメンテナーを募集していると説明している。以下の手順は原文のまま保存されており、最新の代替手段については最後のセクションで説明する。

Why Calabash オートメーション?

何かをインストールする前に、そのフレームワークがもたらすメリットと維持管理にかかるコストを比較検討することが役立ちます。

優位性 デメリット
スループット/生産性の向上に役立ちます。 自動テスト スクリプトを作成するには熟練度が必要です。
品質の向上または品質の予測可能性の向上 テスト スクリプトのデバッグは大きな問題です。
プロセスまたは製品の堅牢性 (一貫性) が向上します。 再生方式の場合、テストのメンテナンスにはコストがかかります。
生産物の一貫性が向上し、人件費と経費が削減されます。 テスト スクリプトがより多くの画面をテストする場合、テスト データ ファイルのメンテナンスが困難になります

Calabash およびBDD

  • Calabash is 動作駆動開発 (BDD). それは同じです テスト駆動開発 (TDD)しかし、APIの構造を記述するためのテストを作成する代わりに、アプリケーションの動作が規定される。
  • BDD は、複数の関係者が参加して、何を構築する必要があるかについて共通の理解を作成するプロセスです。
  • BDD は、適切なソフトウェアを構築し、ビジネス オーナーの観点から設計するのに役立ちます。

下の図は、 Calabash このスイートは階層構造になっており、最上位のビジネス向け機能ファイルから最下位のデバイスとのインタラクションまで、段階的に構成されています。

Calabash フィーチャーファイル、ステップ定義、およびデバイス自動化レイヤーを示すBDDレイヤー図

インストールする方法 Calabash

Calabash on Windows 4 つの前提条件を順番にインストールする必要があります。次の部分を開始する前に、各部分を完全に完了してください。calabash-android gem は Ruby と Android インストール時にSDKを使用します。

パートI)インストール Java JDK – このガイドを参照 – /install-java.html

パート II) Ruby をダウンロードしてインストールします。

ステップ 1) Ruby をダウンロードします URL https://rubyinstaller.org/downloads

RubyInstallerのダウンロードページでは、以下のRubyバージョンが一覧表示されます。 Windows

ステップ2)exeファイルを開き、画面の指示に従ってください。インストールが完了すると、次の画面が表示されます。「完了」をクリックしてください。

Rubyセットアップウィザードの完了画面で、「完了」ボタンがハイライト表示されている。

Rubyをオンにしてコマンドプロンプトを起動する Windows 10 & 以下のコマンドを入力します。

ruby -v

コンソールには、以下に示すように、インストールされているインタープリタのバージョンが表示されます。

コマンドプロンプトでRubyがインストールされているバージョン番号を表示する

パート III) ダウンロードとインストール Android

ステップ1) ダウンロード Android Studio at https://developer.android.com/studio

Android Studio セットアップウィザードが実行中 Windows インストール時に

ステップ2)exeファイルを開き、画面の指示に従ってインストールを完了します。完了したら「完了」ボタンをクリックします。

Android Studio インストール完了画面(完了ボタン付き)

パートIV)インストール Calabash Android

ステップ1)コンソールで「gem install calabash-android」と入力します。インストールが開始され、完了するまでしばらく時間がかかります。

calabash-android gemとその依存関係がインストールされている間のコンソール出力

ステップ2)インストールが完了したら、calabash-android versionと入力します。

インストールされているcalabash-android gemのバージョンを確認するコンソール

での作業 Calabash

gemをインストールしたら、次の作業はフレームワークフォルダを見つけて、それに付属するスケルトンを理解することです。

「calabash-android-0.9.0」フォルダを開きます。このフォルダは、C:\Ruby23\lib\ruby\gems\2.3.0\gems\calabash-android-0.9.0 のパスにあります。フォルダ名は、マシンにインストールした ruby​​/calabash のバージョンに応じて変わります。

フィーチャー スケルトン フォルダーを開きます。 この基本的な枠組みに注目してください。

Calabash サポートディレクトリとステップ定義ディレクトリを含むフィーチャースケルトンフォルダ

  • *.feature ファイルには、自動化するシナリオが含まれています。
  • フィーチャーファイルで使用されるメソッドは、「step_settings」フォルダー内の *.rb ファイルに記述されています。
  • 一般的なメソッド、環境設定、アプリのインストール、フックは「support」フォルダー内に配置する必要があります。

辞職してアプリを構築する

  • Calabash-android resign *.apk
  • Calabash-android build *.apk

再署名を行うと、開発者の署名がデバッグキーに置き換えられ、テストサーバーがアプリケーションを計測できるようになります。ビルドステップでは、以下のコンソール出力に示すように、そのテストサーバーが生成されます。

calabash-androidのresignコマンドとbuildコマンドを実行してテストサーバーを生成した際のコンソール出力

デバイスをシステムに接続します / エミュレータを開きます

接続されているデバイスを確認してください。 コマンドを入力します

adb devices

接続されたデバイスのリストが表示されます。デバイスが見つからない場合は、USBデバッグとペアリングの手順を ADB接続ガイド ほとんどのケースを解決する。

adb devices コマンドリストを添付しました。 Android シリアル番号によるデバイス

要素ロケーターを見つける方法

  • コンソールを開きます。 コマンドを入力します。
    calabash-android console "APK Path"
    start_test_server_in_background
  • 上記のコマンドは、デバイス上でアプリを起動します。要素ロケーターを見つけるには、次のコマンドを使用します。
    query "*"

これにより、現在の画面上のすべての要素ロケーターが表示されます。ビジュアルインスペクターを好むテスターは、同じ階層を相互チェックできます。 ウイオートマビューア.

Calabash 現在のアプリケーション画面のクエリされた要素ツリーをコンソールに出力する

Calabash プロジェクトの構造と定義済みの手順

gemフォルダを手動でコピーする代わりに、フレームワークが動作するプロジェクトを生成してくれます。プロジェクトディレクトリ内でジェネレーターを実行すると、標準の Cucumber すべてのレイアウト Calabash スイートが期待する。

calabash-android gen

生成されたツリーは、BDDスイートの3つの関心事を分離します。

  • 特徴/ — ガーキンのシナリオ、1つ 。特徴 ユーザーの行動ごとにファイルを作成します。
  • 機能/ステップ定義/ — バンドルされている calabash_steps.rb を含む、各 Gherkin 行に一致する Ruby メソッド。
  • 機能/サポート/ ―環境設定と、あらゆるシナリオに対応してアプリケーションをインストール、起動、シャットダウンするためのフック。

同梱されている calabash_steps.rb は、見た目以上に重要なファイルです。このファイルには、すぐに使える英語の手順が多数含まれているため、カスタムメソッドを一つも記述することなく、最初のシナリオでボタンを押したり、テキストを入力したり、表示されている文字列を検証したりできます。カスタム手順が必要になるのは、これらの定型文では対応しきれないほど複雑な処理が必要になった場合のみです。

プロジェクトレベルの設定のうち、2つを事前に知っておくと便利です。スクリーンショットはデフォルトでは現在の作業ディレクトリに保存されますが、環境変数SCREENSHOT_PATHを指定すると別の場所に保存されるため、共有マシン上でビルド成果物を整理できます。システムダイアログや他のアプリケーションとやり取りするには、UIAutomator2バックエンドが必要です。UIAutomator2バックエンドは、start_test_server_in_background(with_uiautomator: true)で起動します。

新しいスクリプトの作成

フィーチャファイルを開き、次の行を実行します

ログイン機能ファイルがエディタで開かれ、Gherkinシナリオの手順が表示されます。

Feature: Login feature
  Scenario: As a valid user I can log into my app
    When I press "Login"
    And I enter my username
    And I enter my password
    Then I see "Welcome to coolest app ever"

ステップ定義ファイルを開き、*.rb ファイルにメソッドを定義します。

Rubyステップ定義ファイルマップping ガーキンラインから Calabash 要素クエリ

Given /^I am on the login windows$/ do
   wait_for(:timeout =>100) { element_exists("* id:'loginInput;")}
   check_element_exists("* id:'loginInput;")
end

テストプロジェクトを実行する

テストプロジェクトを実行するには、以下のコマンドを使用します

calabash-android run "APK Path" "feature file Path" --tags "tag name"

Cucumber 実行される各ステップが出力され、正常に完了すると、ここに示されているシナリオとステップの合計が表示されます。

Calabash デバイスに対して実行される各 Gherkin ステップを示す実行出力

Calabash 実行後の合格シナリオとステップ数をコンソールにサマリーレポートする

コマンドと Calabash エラーとその修正方法

初回実行時の失敗のほとんどは、テストサーバーが依存するパッケージングと権限ルールに起因するものであり、シナリオ自体に起因するものではありません。以下の表は、最も頻繁に報告される症状と、それに関する既知の原因を対応付けたものです。

症状 考えられる原因と解決策
テスト開始と同時にアプリケーションがクラッシュする APK には android.permission.INTERNET がありません。これはテストサーバーがコマンドを受け入れるために必要なものです。権限を宣言してください。 AndroidManifest.xml を再構築します。
ボタンやテキストがタップに反応しない targetSdkVersionが宣言されていません。アプリケーションがビルドされたSDKレベルを指定するuses-sdkエントリを追加してください。
テストサーバーがアプリケーションに接続できません APKにデバッグキーが再署名されていません。再署名コマンドを実行してから、再度ビルドしてから実行してください。
実行時にデバイスはリストされていません USBデバッグが無効になっているか、ドライバが不足しています。まず、adb devicesコマンドの出力にシリアル番号が表示されていることを確認してください。
ステップが未定義のステップエラーで失敗しました Gherkin の記述は step_definitions 内の正規表現と一致しません。提案されたコードスニペットをコピーしてください。 Cucumber 印刷して実装します。

2つのマニフェストエントリで最初の2行を修正します。APKに再署名する前にこれらを追加してください。

<uses-permission android:name="android.permission.INTERNET" />
<uses-sdk android:targetSdkVersion="SDK_VERSION" />

タイムアウトエラーは、機能的な問題というよりは環境的な問題が原因であることが多い。エミュレータの動作が遅い、アプリケーションの起動が遅い、バックグラウンド同期が行われているといった状況では、画面がwait_forウィンドウを超えてしまうことがあるため、実際には正しい手順を書き換える前にタイムアウト時間を延長する必要がある。

Is Calabash 今もメンテナンスされていますか?最新のモバイルテストの代替案

Calabash 現在は積極的に開発されていません。 Microsoft iOS 11の最終版のサポートを終えた後、貢献を停止しました。 Android 8回のリリースを経て、このプロジェクトは現在、メンテナーのいないアーカイブされたオープンソースコードベースとなっています。既存のスイートは古いデバイスでも動作しますが、新規開発はサポートされているフレームワークで開始する必要があります。

フレームワーク Platform に最適
Appium Android とiOS クロスプラットフォームスイート Java, Pythonルビーまたは Javaスクリプト、そしてそれに最も近い代替品は Calabash フォーム。
Espresso Android の Kotlin で書かれた高速なプロセス内テストまたは Java アプリケーション開発者自身によって。
XCUITest iOSのみ ネイティブ Xcode スイート、引退した UIオートメーションフレームワーク.
マエストロとデトックス Android とiOS フレーク耐性とReact Nativeアプリケーションを目的とした、比較的新しいオープンソースプロジェクト。

BDDの習慣自体はきれいに移行します。Gherkinフィーチャーファイルはそのまま維持され、ステップ定義本体のみが変更されます。 Cucumber ドライバーの内部ではなく、ドライバーの上に配置されます。移行するチームは通常、フィーチャー ファイルを保持し、Ruby の手順を書き換えます。 Appium同じものを再利用する モバイルテスト デバイスマトリックスと 自動化テスト 既に稼働しているパイプライン。

よくあるご質問

はい。別のcalabash-ios gemがiOSアプリケーションを同じRubyと Cucumber レイヤー。これは、以下の非推奨ステータスを共有しています。 Android gem なので、現在の iOS 作業は XCUITest または Appium.

機械学習モデルは、破損したロケーターを自動的に修復し、実行履歴を比較して不安定なシナリオを特定し、クラッシュレポートをクラスタリングして最も深刻な欠陥が最初に明らかになるようにします。ただし、何を主張するかについての判断は、依然としてテスターに​​委ねられています。

Copilotは、wait_forブロックのラップなど、繰り返し処理をうまく行っています。ping 要素クエリです。アプリケーションの要素識別子を知ることはできないため、生成された各ステップは、実際のクエリ結果と照合して検証するためのドラフトとして扱ってください。

Cucumber これは、Gherkin を読み込み、Ruby メソッドを呼び出す汎用 BDD ランナーです。 Calabash これらのメソッドが呼び出すのは、モバイル自動化ライブラリです。 Cucumber 何を実行するかを決定する。 Calabash タップ、テキスト入力、およびアサーションを実行します。

スクリーンショットはデフォルトでは現在の作業ディレクトリに、実行ごとに連番で保存されます。実行前に環境変数 SCREENSHOT_PATH を設定すると、スクリーンショットは指定したフォルダにリダイレクトされ、継続的インテグレーションの成果物をソースコードとは別に管理できます。

いいえ。 Calabash コンパイル済みのAPKに計測機能を持たせるため、再署名ステップが存在します。ソースコードへのアクセスは、安定した要素識別子を追加するのに役立ちますが、フレームワーク自体に必要なのは、再署名と計測が許可されているビルドのみです。

はい。実行は単一のコマンドライン呼び出しであるため、APKが生成された後であれば、どのビルドサーバーでも呼び出すことができます。 Jenkins このジョブは通常、APKの再署名、エミュレーターの起動、タグ付けされた機能の実行、およびレポートのアーカイブを行います。

Gherkin フィーチャー ファイルは変更せず、ステップ定義本体のみを書き換えます。 Appium クライアント側では、要素クエリがロケーター戦略となり、アプリケーションをインストールしたフックがドライバ設定における必要な機能となる。