2012-10-09 62 views
37

Estoy intentando entender mejor el marco de pruebas y he estado investigando el selenio. He usado HTMLUnit antes, sobre todo cuando necesitaba borrar algo de información del sitio web o de "me gusta".Selenium vs HtmlUnit?

En el contexto de escribir pruebas de automatización, ¿cuál es la ventaja/desventajas de Selenium frente a HTMLUnit? Me parece que Selenium es más complicado de configurar que HTMLUnit, aunque al mismo tiempo hay un HTMLUnitDriver para Selenium que creo que se comporta de la misma manera que en HTMLUnit. Selenium obviamente proporciona un marco más robusto, tiene Selenium RC para pruebas pararel, también tiene diferentes controladores de navegador que se pueden usar, aunque cuando usaste los controladores del navegador, la prueba realmente abrirá/cerrará una aplicación de navegador que sin cabeza.

Puede ser que no estoy entendiendo el selenio correctamente. ¡Algunas indicaciones y punteros serían geniales!

En otra nota, una pregunta por separado, también estoy buscando hacer pruebas automáticas en el navegador móvil, veo que Selenium tiene un IPhoneDriver, pero esta no es una prueba sin cabeza, ya que requiere un simulador iOS.

¿Hay alguna forma de hacer pruebas sin cabeza en sitios móviles? ¿Sería suficiente cambiar el agente de usuario? He visto un par de publicaciones sobre cambio de usuario-agente que parecen tener sus propios desafíos, por ej. Set user-agent in Selenium RC

¡Muchas gracias!

+1

ha pensado en utilizar PhantomJS o "sin cabeza Chrome" en vez ? – djangofan

Respuesta

62

bien, intentaría explicar las diferencias en los detalles.

Hablando de pruebas en paralelo, es mejor usar rejilla de selenio. Concepto básico de selenio RC y rejilla de selenio. traditional selenium setup selenium grid setup selenium grid:Requesting a Specific Environment Puede entrar en más detalles here

Algunas palabras sobre selenio WebDriver:

La nueva función primaria en Selenio 2.0 es la integración de la API WebDriver. WebDriver está diseñado para proporcionar una interfaz de programación más simple y concisa junto con algunas limitaciones en la API de Selenium-RC. Selenium-WebDriver se desarrolló para admitir mejor las páginas web dinámicas donde los elementos de una página pueden cambiar sin que la página se vuelva a cargar. El objetivo de WebDriver es proporcionar una API orientada a objetos bien diseñada que brinde un soporte mejorado para los modernos problemas avanzados de prueba de aplicaciones web.

¿Cómo maneja WebDriver el navegador en comparación con Selenium-RC?

Selenium-WebDriver realiza llamadas directas al navegador utilizando la compatibilidad nativa de cada navegador para la automatización. La forma en que se realizan estas llamadas directas y las características que admiten depende del navegador que está utilizando. La información sobre cada 'controlador de navegador' se proporciona más adelante en este capítulo. Para aquellos familiarizados con Selenium-RC, esto es bastante diferente de lo que está acostumbrado. Selenium-RC funciona de la misma manera para cada navegador compatible. Inyectó funciones de JavaScript en el navegador cuando el navegador fue cargado y luego usó su javascript para conducir el AUT dentro del navegador. WebDriver no usa esta técnica. Nuevamente, maneja el navegador directamente usando el soporte incorporado del navegador para la automatización.

WebDriver y el Selenio-Servidor

Usted puede, o no, necesitan el servidor de selenio, dependiendo de cómo se va a utilizar Selenio-WebDriver. Si solo usará la API de WebDriver, no necesita el Servidor Selenium. Si su navegador y todas las pruebas se ejecutarán en la misma máquina, y sus pruebas solo usan la API de WebDriver, entonces no necesita ejecutar el Servidor Selenium; WebDriver ejecutará el navegador directamente. Aunque hay algunas razones para usar el Selenium-Server con Selenium-WebDriver.

  • está usando el Selenio-Grid para distribuir sus pruebas sobre múltiples máquinas o máquinas virtuales (VM).
  • Desea conectarse a una máquina remota que tenga un navegador particular versión que no está en su máquina actual.
  • que no esté utilizando los enlaces Java (es decir, Python, C#, o Ruby) y le gustaría utilizar HtmlUnit conductor

selenio WebDriver Los conductores de WebDriver es el nombre de la interfaz clave contra qué pruebas deben escribirse, pero hay varias implementaciones. Estos incluyen:

HtmlUnit conductor Esta es actualmente la aplicación más rápida y ligera de WebDriver. Como su nombre indica, esto se basa en HtmlUnit. HtmlUnit es una implementación basada en Java de un WebBrowser sin una GUI. Para cualquier enlace de idioma (que no sea java), se requiere que el Servidor Selenium utilice este controlador.

Pros

  • aplicación más rápida de WebDriver
  • Una solución pura de Java y por lo que es independiente de la plataforma.
  • soporte JavaScript

Contras

  • Emula el comportamiento de otros navegadores de JavaScript (véase más adelante)

JavaScript en el HtmlUnit conductor Ninguno de los navegadores populares utiliza el motor de JavaScript utilizado por HtmlUnit (Rhino).Si prueba JavaScript usando HtmlUnit, los resultados pueden diferir significativamente de esos navegadores. Cuando decimos "JavaScript" en realidad queremos decir "JavaScript y el DOM". Aunque el DOM está definido por el W3C, cada navegador tiene sus propias peculiaridades y diferencias en la implementación del DOM y en cómo interactúa JavaScript con él. HtmlUnit tiene una implementación impresionantemente completa del DOM y tiene un buen soporte para usar JavaScript, pero no es diferente de cualquier otro navegador: tiene sus propios caprichos y diferencias tanto del estándar W3C como de las implementaciones DOM de los principales navegadores, a pesar de su capacidad de imitar a otros navegadores. Con WebDriver, tuvimos que hacer una elección; ¿Permitimos las capacidades de JavaScript de HtmlUnit y corremos el riesgo de que los equipos se encuentren con problemas que solo se manifiestan allí, o dejamos JavaScript desactivado, sabiendo que hay cada vez más sitios que dependen de JavaScript? Tomamos el enfoque conservador, y de forma predeterminada hemos deshabilitado la compatibilidad cuando utilizamos HtmlUnit. Con cada versión de WebDriver y HtmlUnit, volvemos a evaluar esta decisión: esperamos habilitar JavaScript de forma predeterminada en la HtmlUnit en algún momento.

Para investigar más profundamente en la configuración de WebDriver ver this

De HtmlUnit documentation: HtmlUnit no es un marco de pruebas de unidad genérica. Es específicamente una forma de simular un navegador para fines de prueba y está destinado a ser utilizado en otro marco de prueba como JUnit o TestNG.

Así a la conclusión de selenio y la diferencia HtmlUnit: HtmlUnit es una aplicación basada en Java de un WebBrowser sin una GUI y una forma de simular un navegador para propósitos de prueba y Selenio-WebDriver realiza llamadas directas al navegador usando la compatibilidad nativa de cada navegador para la automatización. podemos ver que HtmlUnit proporciona API sin posibilidad de GUI para la automatización, mientras que WebDriver proporciona las posibilidades de automatización de los navegadores internos.

Hablando de automatización móvil, selenio también tiene un controlador de iPhone iPhone Driver wiki article and Driver Android Android Driver wiki article

Véase también this presentation

Desafortunadamente no puedo dar mi evaluación de la experiencia de trabajo de los conductores móviles como yo lidiar con la automatización web (sin dispositivos móviles). También sepa que Cucumber (herramienta de automatización) es popular entre los autómatas móviles. ver this y this.

esperamos que venga un bonito poco más claro para usted ahora =)

+0

¡Muchas gracias por la explicación! ...Por lo tanto, los controladores específicos del navegador (en lugar de HTMLUnitDriver) son mejores porque prueban exactamente cómo se comportará el navegador, pero esto tiene un costo que el navegador ingresa y sale de la pantalla (solo una pequeña molestia cuando ejecuta su prueba) localmente puede ver que esta aplicación de navegador aparece y desaparece sola) - ¿No hay forma de evitar que el navegador real se cargue (aparte de usar HTMLUnitDriver)? –

+0

hay uno. Si le resulta molesto, puede obtener la máquina remota (VM) y obtener, p. las pruebas de selenio se ejecutan en una máquina remota. Para compartir el enfoque que uso en el proyecto actual: agregue una nueva tarea en hudson -jenkins para ejecutar el conjunto de pruebas en compilaciones diarias y reciba notificaciones por correo electrónico sobre el estado de la prueba. No debemos olvidar el objetivo fundamental de los conjuntos de pruebas automatizadas: no importa qué tipo de controlador esté en uso, debemos estar completamente seguros de que la funcionalidad de la aplicación es estable y, por ejemplo, está lista para su lanzamiento. Los detalles (HTMLUnitDriver u otra opción) dependen de usted según los requisitos y otras dependencias. –

+0

Hace unos años, utilicé la herramienta JavaService para instalar Selenium RC como un servicio de Windows para poder dejarlo funcionando sin supervisión como un proceso sin cabeza sin haber iniciado sesión en la máquina. Jenkins iniciaría el Servicio de Windows a través de una tarea ejecutiva de ANT y, una vez completado el conjunto de pruebas, otra tarea de ANT detendría el Servicio. Seguí este http://bit.ly/pWS7yR para crear un archivo bat personalizado para realizar la instalación del servicio, por ejemplo http://pastebin.com/zvivguaP –

2

Selenium y HTMLUnit son algo similares en concepto, pero el Selenio es más maduro/robusto y tiene muchas más características.

Tenga en cuenta que Selenium incluye el complemento de grabación (IDE) para Firefox, que le permite grabar pruebas y el marco de automatización de RC/WebDriver que esencialmente maneja un navegador. Los dos se pueden usar juntos para hacer la creación de prueba muy fácil.

La única ventaja que pude ver al usar HTMLUnit es que requiere menos recursos, por lo que podría ejecutar pruebas con menos hardware, pero con el soporte paralelo de Selenium, incluso eso ya no es cierto.

1

Cuando la ejecución de pruebas de Jenkins noche a la mañana, por lo general no tiene acceso a un sistema de ventanas tales como X11 o Windows en el que se ejecutará la web navegador. Por lo tanto, veo una ventaja de usar el controlador web HTMLUnit en ese caso, ya que no requiere acceso a un sistema de ventanas.

+0

Puede usar Xvbf para ejecutar cualquier navegador gui con Jenkins –

Cuestiones relacionadas