- 家
- /
- Appium vs XCUITest
Appium vs XCUITest
AppiumとXCUITestは、iOS UIテストを自動化する主要な2つの方法です。Appiumは、W3C WebDriverプロトコル上のクロスプラットフォームのブラックボックスフレームワークであり、XCUITestはAppleが開発した、iOS専用の高速なネイティブフレームワークです。このガイドでは、コードサンプルと5分で実践できる結論を交えながら、両者を徹底的に比較します。
- ブラウザとデバイス
- 6100+
- クラウド並列処理
- 100×
- 稼働時間SLA
- 99.99%
世界で最も革新的な企業のいくつかから信頼されています
どちらを選ぶべきでしょうか?
iOSとAndroidの両方で実行できる1つのテストスイートを求めている場合、チームがJava、Python、JavaScript、Ruby、またはC#で開発を行っている場合、あるいはテストターゲットを加えて再ビルドできないアプリをテストする場合。
iOSのみをテストし、Xcodeでアプリを所有しており、アプリと並んでSwiftまたはObjective-Cで記述する、最速かつ最も信頼性の高いネイティブUIテストを求めている場合。
高速なiOS専用のネイティブテストにはXCUITestを、クロスプラットフォームのエンドツーエンドカバレッジにはAppiumを使いたい場合。TestingBotは両方を同じ実機グリッド上で、並列に実行します。
AppiumとXCUITestとは何ですか?
2つのiOS UI自動化フレームワーク、それぞれ正反対の設計。一方はクロスプラットフォームのブラックボックスであり、もう一方はAppleネイティブでXcodeと密接に結びついています。
Appium
リリース日:2012年 · OpenJS Foundation · Apache 2.0
Appiumは、ネイティブ、ハイブリッド、モバイルWebアプリ向けのオープンソースのクロスプラットフォームテストフレームワークです。W3C WebDriverプロトコルを実装しているため、同じクライアントライブラリがJava、Python、Node.js、Ruby、C#などからiOSとAndroidの両方を操作します。
Appiumは、アプリを外部からブラックボックスとして操作するため、アプリのソースコードを必要としません。iOSでは内部で(WebDriverAgentを介して)AppleのXCUITestを使用し、AndroidではUiAutomator2を使用します。その層こそが、1つのテストをプラットフォーム間で再利用可能にするものです。
- Java / Python / Node.js / Ruby / C# / PHP
- クロスプラットフォーム、ネイティブ、ハイブリッド、モバイルWeb
- ブラックボックス、アプリのソース不要
XCUITest
リリース日:2015年 · Apple · Xcodeの一部
XCUITestは、AppleのUIテストフレームワークであり、Xcodeに同梱されるより大きなXCTestフレームワークの一部です。テストはSwiftまたはObjective-Cで記述され、XCTestを介してデバイス上で実行され、iOSのアクセシビリティツリーへの一流のアクセスを備えています。
XCUITestはネイティブであり、Appleによって保守されているため、高速かつ信頼性が高く、常に最新のiOSに対応しています。トレードオフは、iOS専用であること、SwiftまたはObjective-Cで記述すること、そしてXcodeのテストターゲットを必要とすることです。
- SwiftとObjective-C
- ネイティブXCTest、アクセシビリティツリーへのアクセス
- iOS専用 · Xcodeのテストターゲットが必要
Appium vs XCUITest:並べて比較
iOS UIテストとクロスプラットフォームカバレッジにおいて重要なあらゆる側面において。
| 項目 |
|
|
|---|---|---|
| First release | 2012 | 2015 |
| Maintained by | Open source (OpenJS Foundation) | Apple |
| Platforms | iOS + Android | iOS only |
| Languages | Java, Python, JS, Ruby, C#, PHP | Swift, Objective-C |
| Protocol | W3C WebDriver | XCTest / XCUITest (native) |
| iOS engine | XCUITest via WebDriverAgent | XCUITest (direct) |
| Speed | Slower (extra layers) | Faster (native) |
| App source needed | No (black-box) | Yes (Xcode test target) |
| Tooling | Any IDE / CI | Xcode |
| Cross-platform reuse | Same test on iOS + Android | iOS only |
| Web / hybrid apps | Yes | Limited |
| Flakiness | Good | Excellent (native sync) |
| On TestingBot | Upload app, WebDriver hub | Upload app + test zip, CLI |
| Free for open source on TestingBot | ✓ | ✓ |
両方ともTestingBotの実際のiPhoneとiPad上で動作します。Appiumはアップロードされたアプリを使ってWebDriverハブに接続し、XCUITestはTestingBot CLI経由で実行されます。
iOSでのログイン
Appiumによってブラックボックスで、XCUITestによってネイティブで操作されるログインフロー。どちらもTestingBot上の同じ実際のiPhoneで実行されます。
# real iPhone on TestingBot from appium import webdriver from appium.options.ios import XCUITestOptions from appium.webdriver.common.appiumby import AppiumBy opts = XCUITestOptions().load_capabilities({ 'platformName': 'iOS', '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.ACCESSIBILITY_ID, 'welcome').is_displayed()
// runs via the TestingBot CLI func testLoginRedirectsToDashboard() { let app = XCUIApplication() app.launch() app.textFields["username"].typeText("jane@example.com") app.secureTextFields["password"].typeText("secret") app.buttons["sign_in"].tap() XCTAssertTrue(app.staticTexts["welcome"].exists) }
Appiumのテストはアップロードされたアプリを使ってWebDriverハブに接続し、XCUITestのスイートはTestingBot CLI経由で実行されます。どちらも実際のiPhoneとiPadで実行されます。
どちらを選ぶかは
Appiumを選ぶとき
- 書き直しなしでiOSとAndroidの両方で実行できる1つのテストスイートが必要な場合。
- チームがSwiftではなくJava、Python、JavaScript、Ruby、またはC#で開発を行っている場合。
- テストターゲットを加えて再ビルドできないアプリ、またはサードパーティやハイブリッドのアプリをテストする場合。
- 既にSeleniumまたはWebDriverを使用しており、モバイルでも同じプロトコルを使いたい場合。
- ネイティブ、ハイブリッド、モバイルWebのフローを1つのツールでテストする場合。
XCUITestを選ぶとき
- iOSのみをテストし、Xcodeでアプリを所有しているため、テストターゲットで問題ない場合。
- 最新のiOSに追従する、最速かつ最も信頼性の高いネイティブiOSテストを求めている場合。
- チームがSwiftまたはObjective-Cで開発を行っており、アプリのコードの隣にテストを置きたい場合。
- iOSのアクセシビリティツリーやネイティブコンポーネントへの深いアクセスが必要な場合。
- 最初の日からXcodeのビルドとCIの一部としてUIテストを実行する場合。
どちらかを選ぶのはやめて、両方を同じグリッドで実行しよう
アプリをアップロードし、WebDriverハブ経由でAppiumを使ってブラックボックスで操作するか、TestingBot CLI経由でXCUITestスイートを実行します。どちらも同じ実際のiPhoneとiPad上で、同じダッシュボード、並列スロット、ビデオ録画、EUデータ所在地とともに実行されます。
- 実際のiPhoneとiPad
- 両フレームワークのテスト履歴を並べて表示
- オープンソースであれば無料、両方のフレームワーク
--device "iPhone 16" --real-device
よくある質問
チームがこれらのフレームワークを選択する前、あるいは組み合わせる前に自問する質問。
XCUITestはAppiumより速いですか?
はい、iOSでは。XCUITestはAppleのネイティブフレームワークで、XCTestを介してデバイス上で実行されるため、Appiumが追加するWebDriverとWebDriverAgentの余分な層を回避します。これにより、XCUITestはより高速で、非常に信頼性が高くなります。トレードオフは、XCUITestがiOS専用でSwiftまたはObjective-Cで記述される一方、Appiumは同じテストをお好みの言語でiOSとAndroidにわたって実行することです。
iOSにはAppiumとXCUITestのどちらを使うべきですか?
目標によります。Xcodeプロジェクトを所有しているiOS専用のテストでは、XCUITestが最速かつ最も信頼性の高いネイティブ実行を提供します。クロスプラットフォームカバレッジ、Swift以外の言語でのテスト、または再ビルドできないアプリには、Appiumの方が適しています。Appiumは内部でXCUITestを介してiOSを操作するため、選んでいるのは抽象化のレベルであって、異なるエンジンではないことに注意してください。
Appiumは内部でXCUITestを使用していますか?
はい。iOSでは、AppiumはWebDriverAgentと呼ばれるコンポーネントを使用して、AppleのXCUITestフレームワークを介してアプリを操作します。つまり、AppiumのiOSテストは最終的にXCUITestの上で実行され、Appiumはその上にクロスプラットフォームのWebDriver APIを追加します。だからこそAppiumは、各プラットフォームのネイティブ自動化を内部で使用しながら、iOSとAndroidに同じテストインターフェースを提供できるのです。
XCUITestはAndroidアプリのテストを行うことができますか?
いいえ。XCUITestは、Apple製のiOS専用フレームワークです。Androidをテストするには、Espresso(Googleのネイティブフレームワーク)、またはUiAutomator2を介してAndroidを操作するAppiumが必要です。これらのうち、両方のプラットフォームで同じテストを実行できるのはAppiumだけです。TestingBotは、それらすべてを実際のデバイスで実行します。
iOSとAndroidで同じテストを再利用できますか?
Appiumなら、はい。AppiumはW3C WebDriverプロトコルを実装し、ネイティブドライバ(iOSではXCUITest、AndroidではUiAutomator2)を抽象化するため、1つのテストでわずかなケイパビリティの変更だけで両方のプラットフォームを対象にできます。XCUITestはこれができません。iOS専用です。クロスプラットフォームの再利用が重要なら、Appiumが選ぶべきフレームワークです。
XCUITestにはMacとXcodeが必要ですか?
XCUITestのテストをローカルで記述してビルドするには、Xcodeが入ったMacが必要です。それらを大規模に実行するには、自前のMacフリートは必要ありません。アプリの.ipaとXCUITestの.zipを一度ビルドし、両方をTestingBotにアップロードして、クラウド上の実際のiPhoneとiPadで実行します。Appiumのテストには、あなたの側でXcodeはまったく必要ありません。
TestingBot上でAppiumとXCUITestを実行できますか?
はい、どちらも同じTestingBotグリッド上で動作します。AppiumはアプリをTestingBot Storageにアップロードし、tb://APP_IDのappium:appケイパビリティとともにhttps://hub.testingbot.com/wd/hubに接続します。XCUITestはTestingBot CLI経由で実行されます:testingbot xcuitest app.ipa app-test.zip --device "iPhone 16" --real-device。どちらも同じダッシュボード、並列スロット、EUデータ所在地を共有し、オープンソースであれば無料です。