- 家
- /
- Appium vs Espresso
Appium vs Espresso
AppiumとEspressoは、Android UIテストを自動化する主要な2つの方法です。Appiumは、W3C WebDriverプロトコル上のクロスプラットフォームのブラックボックスフレームワークであり、EspressoはGoogleが開発した、Android専用の高速なホワイトボックスフレームワークです。このガイドでは、コードサンプルと5分で実践できる結論を交えながら、両者を徹底的に比較します。
- ブラウザとデバイス
- 6100+
- クラウド並列処理
- 100×
- 稼働時間SLA
- 99.99%
世界で最も革新的な企業のいくつかから信頼されています
どちらを選ぶべきでしょうか?
AndroidとiOSの両方で実行できる1つのテストスイートを求めている場合、チームがJava、Python、JavaScript、Ruby、またはC#で開発を行っている場合、あるいは計装を加えて再ビルドできないアプリをテストする場合。
Androidのみをテストし、アプリのソースを所有しており、アプリと並んでKotlinまたはJavaで記述する、自動同期を備えた最速かつ最も不安定さの少ないUIテストを求めている場合。
高速なAndroid専用のコンポーネントテストやUIテストにはEspressoを、クロスプラットフォームのエンドツーエンドカバレッジにはAppiumを使いたい場合。TestingBotは両方を同じ実機グリッド上で、並列に実行します。
AppiumとEspressoとは何ですか?
2つのモバイルUI自動化フレームワーク、それぞれ正反対の設計。一方はクロスプラットフォームのブラックボックスであり、もう一方はAndroidネイティブのホワイトボックスです。
Appium
リリース日:2012年 · OpenJS Foundation · Apache 2.0
Appiumは、ネイティブ、ハイブリッド、モバイルWebアプリ向けのオープンソースのクロスプラットフォームテストフレームワークです。W3C WebDriverプロトコルを実装しているため、同じクライアントライブラリがJava、Python、Node.js、Ruby、C#などからiOSとAndroidの両方を操作します。
Appiumは、アプリを外部からブラックボックスとして操作するため、アプリのソースコードを必要としません。Androidでは内部でUiAutomator2またはEspressoドライバを使用し、iOSではXCUITestを使用します。その層こそが、1つのテストをプラットフォーム間で再利用可能にするものです。
- Java / Python / Node.js / Ruby / C# / PHP
- クロスプラットフォーム、ネイティブ、ハイブリッド、モバイルWeb
- ブラックボックス、アプリのソース不要
Espresso
リリース日:2013年 · Google · Apache 2.0
Espressoは、GoogleのAndroid向けUIテストフレームワークであり、Android Jetpackのテストライブラリの一部です。テストはデバイス上で、テスト対象のアプリと同じプロセス内でインプロセス実行され、アプリへの直接アクセスとUIスレッドとの自動同期が可能になります。
Espressoはアプリのプロセス内で実行されるため、高速かつ信頼性が高く、不安定さがほとんどありません。トレードオフは、Android専用であること、KotlinまたはJavaで記述すること、そしてアプリの計装ビルドを必要とすることです。
- KotlinとJava
- インプロセス、自動UI同期
- Android専用 · 計装ビルドが必要
Appium vs Espresso:並べて比較
Android UIテストとクロスプラットフォームカバレッジにおいて重要なあらゆる側面において。
| 項目 |
|
|
|---|---|---|
| First release | 2012 | 2013 |
| Maintained by | Open source (OpenJS Foundation) | |
| Platforms | iOS + Android | Android only |
| Languages | Java, Python, JS, Ruby, C#, PHP | Java, Kotlin |
| Protocol | W3C WebDriver | Android instrumentation |
| Test execution | Out-of-process (black-box) | In-process (white-box) |
| Speed | Slower (WebDriver round-trips) | Very fast (in-process) |
| App source needed | No (black-box) | Yes (instrumented build) |
| UI synchronization | Manual waits | Automatic, built in |
| Cross-platform reuse | Same test on iOS + Android | Android only |
| Web / hybrid apps | Yes | Limited |
| Flakiness | Good | Excellent (tight coupling) |
| On TestingBot | Upload app, WebDriver hub | Upload app + test, CLI |
| Free for open source on TestingBot | ✓ | ✓ |
両方ともTestingBotの実際のAndroidデバイスとエミュレータ上で動作します。Appiumはアップロードされたアプリを使ってWebDriverハブに接続し、EspressoはTestingBot CLI経由で実行されます。
Androidでのログイン
Appiumによってブラックボックスで、Espressoによってホワイトボックスで操作されるログインフロー。どちらもTestingBot上の同じ実際のAndroidデバイスで実行されます。
# real Android device on TestingBot from appium import webdriver from appium.options.android import UiAutomator2Options from appium.webdriver.common.appiumby import AppiumBy opts = UiAutomator2Options().load_capabilities({ 'platformName': 'Android', 'appium:app': 'tb://APP_ID', 'tb:options': { 'realDevice': True }, }) d = webdriver.Remote('https://hub.testingbot.com/wd/hub', options=opts) d.find_element(AppiumBy.ACCESSIBILITY_ID, 'username').send_keys('jane') d.find_element(AppiumBy.ACCESSIBILITY_ID, 'sign_in').click() assert d.find_element(AppiumBy.ID, 'welcome').is_displayed()
// runs via the TestingBot CLI @Test fun loginRedirectsToDashboard() { onView(withId(R.id.username)) .perform(typeText("jane@example.com")) onView(withId(R.id.password)) .perform(typeText("secret")) onView(withId(R.id.sign_in)) .perform(click()) onView(withId(R.id.welcome)) .check(matches(isDisplayed())) }
Appiumのテストはアップロードされたアプリを使ってWebDriverハブに接続し、EspressoのスイートはTestingBot CLI経由で実行されます。どちらも実際のAndroidデバイスで実行されます。
どちらを選ぶかは
Appiumを選ぶとき
- 書き直しなしでAndroidとiOSの両方で実行できる1つのテストスイートが必要な場合。
- チームがKotlinではなくJava、Python、JavaScript、Ruby、またはC#で開発を行っている場合。
- 計装を加えて再ビルドできないアプリ、またはサードパーティやハイブリッドのアプリをテストする場合。
- 既にSeleniumまたはWebDriverを使用しており、モバイルでも同じプロトコルを使いたい場合。
- ネイティブ、ハイブリッド、モバイルWebのフローを1つのツールでテストする場合。
Espressoを選ぶとき
- Androidのみをテストし、アプリのソースを所有しているため、計装ビルドで問題ない場合。
- 自動同期を備えた最速かつ最も不安定さの少ないUIテストを求めている場合。
- チームがKotlinまたはJavaで開発を行っており、アプリのコードの隣にテストを置きたい場合。
- 公開UIだけでなく、アプリの内部状態、カスタムビュー、またはコンポーネントをテストする場合。
- 最初の日からAndroidのビルドとCIの一部としてUIテストを実行する場合。
どちらかを選ぶのはやめて、両方を同じグリッドで実行しよう
アプリをアップロードし、WebDriverハブ経由でAppiumを使ってブラックボックスで操作するか、TestingBot CLI経由でEspressoスイートを実行します。どちらも同じ実際のAndroidデバイス上で、同じダッシュボード、並列スロット、ビデオ録画、EUデータ所在地とともに実行されます。
- 実際のAndroidデバイスとエミュレータ
- 両フレームワークのテスト履歴を並べて表示
- オープンソースであれば無料、両方のフレームワーク
--device "Galaxy S24" --real-device
よくある質問
チームがこれらのフレームワークを選択する前、あるいは組み合わせる前に自問する質問。
EspressoはAppiumより速いですか?
はい、Androidでは。Espressoはインプロセスで、アプリと同じプロセス内で実行されるため、AppiumのWebDriverプロトコルのネットワークラウンドトリップを回避し、UIスレッドと自動的に同期します。これにより、Espressoはより高速で、不安定さが少なくなります。トレードオフは、EspressoがAndroid専用で計装ビルドを必要とする一方、Appiumは同じテストをAndroidとiOSにわたってブラックボックスとして実行することです。
AndroidにはAppiumとEspressoのどちらを使うべきですか?
目標によります。ソースを所有しているAndroid専用のUIテストでは、Espressoが最速かつ最も信頼性の高い実行を提供します。クロスプラットフォームカバレッジ、Kotlin以外の言語でのテスト、または計装できないアプリには、Appiumの方が適しています。多くのAndroidチームは、コンポーネントテストやUIテストにはEspressoを、クロスプラットフォームのエンドツーエンドフローにはAppiumを実行します。
EspressoはiOSアプリのテストを行うことができますか?
いいえ。Espressoは、Google製のAndroid専用フレームワークです。iOSをテストするには、XCUITest(Appleのネイティブフレームワーク)、または内部でXCUITestを介してiOSを操作するAppiumが必要です。これらのうち、両方のプラットフォームで同じテストを実行できるのはAppiumだけです。TestingBotは、それらすべてを実際のデバイスで実行します。
AndroidとiOSで同じテストを再利用できますか?
Appiumなら、はい。AppiumはW3C WebDriverプロトコルを実装し、ネイティブドライバ(AndroidではUiAutomator2またはEspresso、iOSではXCUITest)を抽象化するため、1つのテストでわずかなケイパビリティの変更だけで両方のプラットフォームを対象にできます。Espressoはこれができません。Android専用です。クロスプラットフォームの再利用が重要なら、Appiumが選ぶべきフレームワークです。
Espressoはアプリのソースコードを必要としますか?
はい。Espressoはアプリと並んで実行される計装テストAPKにコンパイルされるため、アプリのソース、または少なくともデバッグ可能で計装されたビルドが必要です。Appiumはインストール済みのアプリをブラックボックスとして操作し、ソースを必要としません。だからこそ、Espressoでは扱えないサードパーティや既に公開済みのアプリをテストできるのです。
クラウド上の実際のデバイスでAppiumとEspressoを実行できますか?
はい。TestingBotは、EUデータセンターに実際のAndroidスマートフォンやタブレット、さらにエミュレータを提供しています。Appiumのテストは、.apkをTestingBot Storageにアップロードし、realDeviceを設定してハブに対して実行します。Espressoのテストは、アプリとテストのAPKをTestingBot CLI経由でアップロードします。どちらもダッシュボードで確認できるビデオとログを記録します。
TestingBot上でAppiumとEspressoを実行できますか?
はい、どちらも同じTestingBotグリッド上で動作します。AppiumはアプリをTestingBot Storageにアップロードし、tb://APP_IDのappium:appケイパビリティとともにhttps://hub.testingbot.com/wd/hubに接続します。EspressoはTestingBot CLI経由で実行されます:testingbot espresso app.apk app-test.apk --device "Galaxy S24" --real-device。どちらも同じダッシュボード、並列スロット、EUデータ所在地を共有し、オープンソースであれば無料です。