- TestingBot
- /
- Appium vs XCUITest
Appium vs XCUITest
Appium y XCUITest son las dos formas principales de automatizar pruebas de interfaz de usuario en iOS. Appium es un framework multiplataforma de caja negra sobre el protocolo W3C WebDriver; XCUITest es el framework nativo y rápido de Apple, solo para iOS. Esta guía los compara frente a frente, con ejemplos de código y una conclusión que podrás poner en práctica en cinco minutos.
- Navegadores y dispositivos
- 6100+
- Paralelismo en la nube
- 100×
- Acuerdo de nivel de servicio (SLA) de tiempo de actividad
- 99.99%
Confiado por estas compañías
¿Cuál deberías elegir?
Quieres un único conjunto de pruebas que se ejecute tanto en iOS como en Android, tu equipo trabaja en Java, Python, JavaScript, Ruby o C#, o pruebas aplicaciones que no puedes recompilar con un destino de pruebas.
Pruebas solo en iOS, eres dueño de la aplicación en Xcode y quieres las pruebas de interfaz de usuario nativas más rápidas y fiables, escritas en Swift u Objective-C junto con tu aplicación.
Usas XCUITest para pruebas nativas rápidas solo en iOS y Appium para una cobertura multiplataforma de extremo a extremo. TestingBot ejecuta ambos en la misma cuadrícula de dispositivos reales, en paralelo.
¿Qué son Appium y XCUITest?
Dos frameworks de automatización de interfaz de usuario en iOS con diseños opuestos. Uno es multiplataforma y de caja negra; el otro es nativo de Apple y está estrechamente acoplado a Xcode.
Appium
Publicado en 2012 · OpenJS Foundation · Apache 2.0
Appium es un framework de pruebas multiplataforma y de código abierto para aplicaciones nativas, híbridas y web móviles. Implementa el protocolo W3C WebDriver, por lo que la misma biblioteca cliente controla tanto iOS como Android desde Java, Python, Node.js, Ruby, C# y más.
Appium controla la aplicación desde fuera como una caja negra, por lo que no necesita el código fuente de la aplicación. En iOS utiliza el XCUITest de Apple por debajo (mediante WebDriverAgent); en Android utiliza UiAutomator2. Esa capa es lo que hace que una prueba sea reutilizable entre plataformas.
- Java / Python / Node.js / Ruby / C# / PHP
- Multiplataforma, nativa, híbrida y web móvil
- Caja negra, no requiere código fuente de la aplicación
XCUITest
Publicado en 2015 · Apple · parte de Xcode
XCUITest es el framework de pruebas de interfaz de usuario de Apple, parte del framework XCTest más amplio que se incluye con Xcode. Las pruebas se escriben en Swift u Objective-C y se ejecutan en el dispositivo mediante XCTest, con acceso de primer nivel al árbol de accesibilidad de iOS.
Como XCUITest es nativo y lo mantiene Apple, es rápido, fiable y siempre actualizado con la última versión de iOS. Las contrapartidas: es solo para iOS, está escrito en Swift u Objective-C y necesita un destino de pruebas de Xcode.
- Swift y Objective-C
- XCTest nativo, acceso al árbol de accesibilidad
- Solo iOS · necesita un destino de pruebas de Xcode
Appium vs XCUITest: comparación lado a lado
En todas las dimensiones que importan para las pruebas de interfaz de usuario en iOS y la cobertura multiplataforma.
| Dimensión |
|
|
|---|---|---|
| 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 | ✓ | ✓ |
Ambos se ejecutan en los iPhones e iPads reales de TestingBot. Appium se conecta al hub de WebDriver con una aplicación subida; XCUITest se ejecuta mediante el CLI de TestingBot.
Iniciar sesión en iOS
Un flujo de inicio de sesión controlado de forma de caja negra por Appium y de forma nativa por XCUITest. Ambos se ejecutan en los mismos iPhones reales en TestingBot.
# 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) }
La prueba de Appium se conecta al hub de WebDriver con una aplicación subida; la suite de XCUITest se ejecuta mediante el CLI de TestingBot. Ambos se ejecutan en iPhones e iPads reales.
Cuándo elegir cuál
Elige Appium cuando
- Necesitas un único conjunto de pruebas que se ejecute tanto en iOS como en Android sin reescribirlo.
- Tu equipo escribe en Java, Python, JavaScript, Ruby o C# en lugar de Swift.
- Pruebas una aplicación que no puedes recompilar con un destino de pruebas, o una aplicación de terceros o híbrida.
- Ya usas Selenium o WebDriver y quieres el mismo protocolo para móviles.
- Pruebas flujos nativos, híbridos y web móviles con una sola herramienta.
Elige XCUITest cuando
- Pruebas solo en iOS y eres dueño de la aplicación en Xcode, por lo que un destino de pruebas no es problema.
- Quieres las pruebas nativas de iOS más rápidas y fiables, que siguen la última versión de iOS.
- Tu equipo escribe en Swift u Objective-C y quiere las pruebas junto al código de la aplicación.
- Necesitas acceso profundo al árbol de accesibilidad de iOS y a los componentes nativos.
- Ejecutas pruebas de interfaz de usuario como parte de la compilación de Xcode y la CI desde el primer día.
Deja de elegir, ejecuta ambos en la misma cuadrícula
Sube tu aplicación y contrólala de forma de caja negra con Appium mediante el hub de WebDriver, o ejecuta tu suite de XCUITest mediante el CLI de TestingBot. Ambos se ejecutan en los mismos iPhones e iPads reales, con el mismo panel de control, ranuras paralelas, grabación de vídeo y residencia de datos en la UE.
- iPhones e iPads reales
- Historial de pruebas lado a lado para ambos frameworks
- Gratuito para código abierto, ambos frameworks
--device "iPhone 16" --real-device
Preguntas frecuentes
Las preguntas que se hacen los equipos antes de elegir, o de combinar, estos frameworks.
¿Es XCUITest más rápido que Appium?
Sí, en iOS. XCUITest es el framework nativo de Apple y se ejecuta en el dispositivo mediante XCTest, por lo que evita las capas adicionales de WebDriver y WebDriverAgent que añade Appium. Eso hace que XCUITest sea más rápido y muy fiable. La contrapartida es que XCUITest es solo para iOS y está escrito en Swift u Objective-C, mientras que Appium ejecuta la misma prueba en iOS y Android en el lenguaje que elijas.
¿Debería usar Appium o XCUITest para iOS?
Depende de tus objetivos. Para pruebas solo en iOS donde eres dueño del proyecto de Xcode, XCUITest ofrece las ejecuciones nativas más rápidas y fiables. Para una cobertura multiplataforma, pruebas en un lenguaje distinto de Swift, o aplicaciones que no puedes recompilar, Appium se ajusta mejor. Ten en cuenta que Appium controla iOS mediante XCUITest por debajo, así que estás eligiendo el nivel de abstracción, no un motor diferente.
¿Appium usa XCUITest internamente?
Sí. En iOS, Appium controla la aplicación mediante el framework XCUITest de Apple usando un componente llamado WebDriverAgent. Así que una prueba de iOS con Appium se ejecuta en última instancia sobre XCUITest, con Appium añadiendo la API multiplataforma de WebDriver por encima. Por eso Appium puede ofrecer la misma interfaz de pruebas para iOS y Android usando al mismo tiempo la automatización nativa de cada plataforma por debajo.
¿Puede XCUITest probar aplicaciones de Android?
No. XCUITest es un framework solo para iOS de Apple. Para probar Android necesitas Espresso (el framework nativo de Google) o Appium, que controla Android mediante UiAutomator2. Appium es el único de estos que ejecuta la misma prueba en ambas plataformas. TestingBot ejecuta todos ellos en dispositivos reales.
¿Puedo reutilizar las mismas pruebas en iOS y Android?
Con Appium, sí. Como Appium implementa el protocolo W3C WebDriver y abstrae los controladores nativos (XCUITest en iOS, UiAutomator2 en Android), una sola prueba puede dirigirse a ambas plataformas con cambios menores de capacidades. XCUITest no puede hacer esto; es solo para iOS. Si la reutilización multiplataforma importa, Appium es el framework que debes elegir.
¿Necesito un Mac y Xcode para XCUITest?
Necesitas un Mac con Xcode para escribir y compilar pruebas de XCUITest localmente. Para ejecutarlas a gran escala no necesitas tu propia flota de Mac: compila la .ipa de la aplicación y el .zip de XCUITest una vez, luego sube ambos a TestingBot y ejecuta en iPhones e iPads reales en la nube. Las pruebas de Appium no requieren Xcode en absoluto por tu parte.
¿Puedo ejecutar Appium y XCUITest en TestingBot?
Sí, ambos se ejecutan en la misma cuadrícula de TestingBot. Appium sube tu aplicación a TestingBot Storage y luego se conecta a https://hub.testingbot.com/wd/hub con una capacidad appium:app de tb://APP_ID. XCUITest se ejecuta mediante el CLI de TestingBot: testingbot xcuitest app.ipa app-test.zip --device "iPhone 16" --real-device. Ambos comparten el mismo panel de control, ranuras paralelas y residencia de datos en la UE, y son gratuitos para código abierto.
¿Quieres profundizar en el tema? Consulta las páginas dedicadas a Appium y XCUITest.
Related comparisons
Regístrese para obtener una prueba gratuita
Ejecuta Appium y XCUITest en iPhones e iPads reales en la nube de TestingBot.
Prueba gratis