Calabashを使用したAndroidおよびiOSUIテスト

公開: 2022-03-11

テストは、モバイルアプリ開発プロセスの重要な部分です。 このようなテストを自動化するかどうかに関係なく、アプリをテストしていない限り、正気の開発者は自分の作業が完了したとは見なしません。

十分にテストされたアプリは通常、単体テスト、統合テスト、受け入れテストなど、複数のテストステップを経ます。 アプリが成長するにつれて、テストの重要性が増し、テストの自動化が必要になります。

AndroidおよびiOSのひょうたんの受け入れテスト

Webなどの他のプラットフォームは、テストメカニズムとフレームワークの点で大幅に進歩していますが、モバイル領域は遅れをとっていません。 この記事では、Calabashを使用して、わかりやすい英語の手順を使用してAndroidアプリとiOSアプリのUIを自動化し、可能な限り簡単に検収テストを行う方法を学習します。

UIテストとは何ですか?

アプリを手動でテストしている場合は、同じタスクを繰り返し実行するためにかなりの時間を無駄にしている可能性があります。 コードにいくつかの変更を加え、アプリをビルドし、デバイスまたはエミュレーターで実行し、アプリをいじって、期待どおりに機能するかどうかを確認します。

UIテストを自動化することで、同じ手動の手順を自動的に実行できます。 アプリのサイズが適切な場合、これにより時間を大幅に節約でき、アプリが困惑するバグ、特にリグレッションバグに悩まされるのを防ぐことができます。

「それは素晴らしいですね」とあなたは言いますが、AndroidまたはiOSアプリでどのようにそれを行いますか?

AndroidおよびiOS用のUIテストフレームワーク

AndroidとiOSの公式ドキュメントを読むと、公式IDEでUIテストを作成して実行することをお勧めします。 Androidの場合はAndroidStudioであり、iOSの場合はXcodeです。

公式ドキュメントは、テスト用の特定のフレームワークを推奨するところまで行きます。 Androidの公式ドキュメントには、AndroidUIテストフレームワークであるEspressoに関するいくつかのトピックが含まれています。 同様に、AppleはXCTestフレームワークの使用を提案しています。

また、UIテストに真剣に取り組む場合は、これらの提案に従うことができます。これは、EspressoがGoogleによって管理されており、Androidサポートリポジトリの一部であるため、理にかなっています。 Espressoは、Googleが将来Androidに導入するすべての新機能をサポートする可能性が非常に高いです。 iOS用のXCTestフレームワークについても同じことが言えます。

ただし、自動テストには多くの利点があるにもかかわらず、多くの開発者はそれらをまったく記述しないことを覚えておく価値があります。

テストの自動化を深く知っているすべての開発者は、それが素晴らしいアイデアであることを知っています。 しかし、座ってこれらのテストを作成する場合、多くの開発者は、「ボタンに触れる」コードを作成するよりも「ボタンに触れる」方がはるかに高速な操作であることが判明したため、時間をかける価値があるかどうか疑問に思い始めます。自動的。 時々、クライアントとマネージャーは、アプリを試すのを熱心に待っていて、どちらも助けになりません。

多くの開発者は、その時点で、既存のUIテストの自動UIテストを作成するよりも、アプリケーションの新機能に取り組み続ける方がよいと判断しています。

アプリケーションが大きくなると、アプリケーションを更新するたびに手動で「これらのボタンに触れる」のに時間がかかります。

しかし、UIテストを簡単にするフレームワークがあり、アプリのUIテストを作成しない言い訳ができなかったとしたらどうでしょうか。

ひょうたんに会います。

Calabash:モバイルアプリの自動受け入れテスト

約1年前、ソフトウェア開発者ではない人でも使いやすいテストフレームワークを探し始めました。 そして、それは私がひょうたんを見つけたときです。

Xamarinチームによって開発および保守されているこのオープンソースのテストフレームワークは、AndroidとiOSの両方で機能します。 これにより、モバイルアプリケーションの自動受け入れテストを作成して実行できます。

受け入れテストは通常​​、アプリがビジネス要件を満たしているかどうかを判断するシステムテストの後に行われます。 UIレベルで動作することを考えると、これはUIテスト自動化フレームワークの選択としてうまく機能します。

Calabashは、EspressoやXCTestのようにアプリとやり取りできます。 ただし、ここでCalabashを優れた選択肢にしているのは、キュウリのサポートです。

Cucumberは、平易な英語で書かれた自動テストを実行できるツールです(必要に応じて、他の平易な言語を使用するように調整できます)。 したがって、Cucumberで自動テストを作成するために、テスターはJava、Objective-C、またはその他のプログラミング言語を知っている必要はありません。

ひょうたんをダニにするものは何ですか?

Calabashフレームワークは、AndroidおよびiOSアプリと対話できるライブラリで構成されています。 実際のデバイスで実行できます。 したがって、テスターが手動で実行していることを実行できます。

Calabashを可能にするGitHubには2つの異なるプロジェクトがあります。

  • calabash-android-Android用

  • calabash-ios-iOS用

Calabashは、Rubyベースのテストフレームワークで動作します。 この記事では、Calabashのテストを書くための最も一般的で便利な方法であるCucumberについて説明します。

続行する前に、記事の残りの部分に従ってCalabashを試してみたい場合は、マシンにRubyがインストールされていることを確認してください。 インストールの詳細な手順については、こちらをご覧ください。

次に、上記のGitHubリンクをたどって、お気に入りのプラットフォームにCalabashをインストールします。

ひょうたんで最初のテストを書く

Calabashでテストを書くのはとても簡単です。 iOSアプリの簡単なテストがどのように見えるか見てみましょう。

 Feature: User Login Scenario: Unsuccessful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "tstuser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Username you entered is incorrect" Scenario: Successful user login Given the app has launched Then I wait for the "Login" button to appear When I enter "testeruser" into the "Username" field And I enter "qwerty" into the "Password" field And I touch "Login" Then I should see "Hey testeruser!"

ここでは、アプリが誤ったユーザー名とパスワードでテストされてから、正しいユーザー名とパスワードでテストされています。 このテストでは、最初のシナリオではアプリがログインに失敗することを想定していますが、2番目のシナリオでは成功します。

必要な数のシナリオを作成できます。必要なのは、手順/指示を簡単な英語の文章に分解することだけです。 あなたが物語を書くのと同じように!

ビヘイビア駆動開発(BDD)について知っている人なら誰でも、すでにこれに精通していることに気付くでしょう。

ひょうたんはどのように機能しますか?

テスターが使用しているステップの背後で何が起こっているかを確認するには、GitHubでプロジェクトを開き、次のファイルを確認します。

 calabash-cucumber/features/step_definitions/calabash_steps.rb

次のステップの定義を見てみましょう。

 When I enter "testeruser" into the "Username" field
 Then /^I enter "([^\"]*)" into the "([^\"]*)" field$/ do |text_to_type, field_name| touch("textField marked: '#{field_name}'") wait_for_keyboard keyboard_enter_text text_to_type sleep(STEP_PAUSE) end

このRubyコードの小さなスニペットは、特定のフィールドを探してタッチし、キーボードが表示されるのを待ち、 text_to_type変数からテキストを入力し、少し待ってから次のステップに切り替えます。

ステップの最初の単語は、「Given」、「When」、「Then」、「And」、または「But」です。 使用するキーワードは関係ありません。 それらのいずれかを使用して、ストーリーをより明確にすることができます。

カスタムステップを追加する方法

Calabashにまだ実装されていないステップが必要な場合は、自分で作成できます。 構文は、すでに事前定義されている手順とまったく同じです。

たとえば、テスターがフィールド名ではなくプレースホルダーで入力フィールドにアクセスする必要がある場合:

 Then /^I enter "([^\"]*)" into the field with placeholder "([^\"]*)"$/ do |text_to_type, placeholder| touch("textField placeholder:'#{placeholder}'") wait_for_keyboard() keyboard_enter_text text_to_type sleep(STEP_PAUSE) end

このステップ定義は前の定義とほとんど同じですが、フィールド名ではなくプレースホルダーによってフィールドにアクセスしています。 アプリの外観を考えると、これによりテスターに​​とってはさらに簡単になる可能性があります。

また、開発者にとっても簡単です。 開発者はこのステップを一度実装し、その後テスターは必要なときにいつでもそれを使用します。 さらに、独自のカスタムステップを実装するためにRubyについて多くを知る必要はありません。

使用できるRuby関数は次の場所にあります。

http://www.rubydoc.info/gems/calabash-cucumber/Calabash/Cucumber

Xamarin Test Cloud

モバイルアプリケーションをテストする場合、もう1つの課題があります。 非常に多くのデバイスと非常に多くのOSバージョンがあるため、できるだけ多くのデバイスでテストする必要があります。

これは、XamarinTestCloudが大いに役立つところです。 クラウドには約2,000の実際のデバイスがあり、良いニュースはCalabashテストをサポートしていることです。

繰り返しの作業を省くことで時間を節約するのに役立ったのと同じCalabashテストを使用して、多くの実際のデバイスでアプリケーションをテストできるようになりました。

UIテストの作成を開始します

Calabashがアプリに必要なテストソリューションであるかどうかにかかわらず、Calabashがもたらす利点により、モバイルアプリの自動UIテストを作成する際の言い訳の余地はありません。 アプリが特定のデバイス機能(カメラなど)に大きく依存している場合、Calabashは不十分になる可能性がありますが、それでも大部分のアプリのテストの作成ははるかに簡単です。