Google EspressoまたはRobotium [終了]


115

Automated UIテストツールを使用する必要があり、RobotiumとGoogle Espressoの使用を混同しています。

2つの主な違いは何ですか?一方には存在するが他方には存在しない機能はありますか?


19
コメントを書かずに投票に反対するのは正直嫌いです。反対票を投じる人がなぜ彼/彼女がそうしているのかなどのコメントを書いていただければ
幸い

8
質問はとても役に立ちます。多くの開発者が自分たちにこれを求めています。違いは何ですか?問題はあなたが尋ねている方法だと思います。どちらを使用するかを尋ねるだけでなく、より詳細に尋ねるべきです。
tasomaniac 2014年

8
これは私が答えたかった質問そのものです。投稿ありがとう
Richard Fung

8
StackOverflowによると、これがトピックから外れているという事実は嫌いです。すべてのライブラリとツールを比較しなければならない場合、多くの意見に基づく回答があり得ますが、このような2つのリソースの違いを尋ねる質問は非常に役立ちます。
デビッドアーガイルタッカー2015

回答:


175

完全な開示:私はEspressoの著者の1人です。

EspressoとRobotiumはどちらもインストルメンテーションベースのフレームワークです。つまり、Android Instrumentationを使用して、テスト中のアクティビティを検査および操作します。

Googleでは、Robotiumを使用することから始めました。これは、ストックインストルメンテーションよりも便利だったためです(Robotium開発者にとっては、そうするのは大変なことです)。ただし、開発者にとって信頼性の高いテストを簡単に作成できるようにするフレームワークへのニーズを満たしていませんでした。

Robotiumに対するEspressoの主な進歩:

  1. 同期。デフォルトでは、インスツルメンテーションテストロジックは、UIオペレーション(UIスレッドで処理される)とは異なる(インスツルメンテーション)スレッドで実行されます。テスト操作とUIの更新を同期しないと、テストは不安定になりがちです。つまり、タイミングの問題のためにランダムに失敗します。ほとんどのテスト作成者はこの事実を無視し、一部はスリープ/再試行メカニズムを追加し、さらに少数がより洗練されたスレッドセーフティコードを実装します。これらのどれも理想的ではありません。Espressoは、テストアクションとアサーションをテスト中のアプリケーションのUIとシームレスに同期させることで、スレッドの安全性を処理します。Robotiumは、スリープ/再試行メカニズムでこれに対処しようとしますが、これは信頼性が低いだけでなく、テストの実行が必要以上に遅くなる原因にもなります。

  2. API。Espressoには、明確に定義された予測可能な小さなAPIがあり、カスタマイズが可能です。標準のhamcrestマッチャーを使用してUI要素を検索する方法をフレームワークに伝え、アクションを実行するか、ターゲット要素のアサーションをチェックするように指示します。これは、テスト作成者が30以上のクリックメソッドから選択することが期待されているRobotiumのAPIと対照的です。さらに、RobotiumはgetCurrentActivity(現在の意味は何ですか?)やgetViewなどの危険なメソッドを公開しています。これにより、メインスレッド外のオブジェクトを操作できます(上記のポイントを参照)。

  3. 障害情報をクリアします。Espressoは、障害が発生したときに豊富なデバッグ情報を提供するよう努めています。さらに、独自のエラーハンドラーを使用して、Espressoによるエラーの処理方法をカスタマイズできます。私はしばらく試していませんが、以前のバージョンのRobotiumは一貫性のないエラー処理に悩まされていました(たとえば、clickOnViewメソッドはSecurityExceptionsを飲み込みます)。

以前の回答とは異なり、Espressoは、多数のユーザーがいるすべてのAPIバージョンでサポートされています(http://developer.android.com/about/dashboards/index.htmlを参照)。古いバージョンの一部で動作しますが、それらをテストするとリソースの無駄になります。テストについて... Espressoは、すべての変更について、包括的なテストスイート(95%を超える範囲)と、Googleが開発したAndroidアプリケーションの大部分によってテストされます。


こんにちは !回答ありがとうございます。Espressoは、同じテストケースで複数のアプリケーションをテストする可能性を提供しますか?別のアプリケーション(同じsharedUserIdを共有する他のアプリ)からアクティビティを呼び出し、その結果を取得するアプリケーションをテストする必要があります。Robotiumではできませんが、おそらくEspressoではできますか?:-)
nbe_42 2014年

1
いいえ-Espressoを使用してプロセス外でUIを操作することはできません。これは、計測フレームワークの制限です。
ValeraZakharov 2014年

1
@ValeraZakharov :: Hii ... !! あなたが言ったように、エスプレッソはUIスレッドの同期を処理し、スリープを置く必要はありません。しかし、私の場合、いくつかのテストケースを作成し、すべてのテストケースがローカルマシンで動作しています(TestSuiteごとに1つのスリープを開始として)。しかし、ローカル/サーバージェンキンスで実行すると、ほぼ99%のテストケースが失敗します。Jenkinsエミュレータのすべてのアニメーションを無効にしました。ほとんどの場合、AppNotIdleExceptionが発生します。根本的な原因を理解できません。手伝ってくれませんか。
Naresh Gunda 2017年

@Raduやった。あなたのコメントは無効であり、適切な説明がないと、注目を集めるのは無茶苦茶な試みのようです。
Rakib

9

EspressoはRobotiumよりはるかに高速ですが、一部のSDKバージョンでのみ機能します。

したがって、すべてのデバイスで機能するテストが必要な場合は、Roboitumを使用してください。そうでない場合は、エスプレッソを使用してください。しばらくの間、ベータテスターに​​なることを忘れないでください。



2
上記のリンクが変更されました。これは新しいリンクです。google.github.io
testing
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.