2012-05-25 38 views
5

He estado investigando sobre cómo automatizar las pruebas del navegador durante varias semanas utilizando todos los métodos diferentes. El sitio web de Selenium es muy vago sobre cuál es la mejor ruta para tomar.Pruebas automatizadas del navegador utilizando selenio, Nunit, Selenium Grid, C#, webdriver/control remoto

He instalado

  1. selenio WebDriver
  2. control remoto
  3. selenio cuadrícula
  4. Apache Ant
  5. Nunit (y casi todo lo demás que pueda necesitar para hacer esto)

I finall dejo de intentarlo solo y quiero saber la mejor manera de hacerlo.

Quiero ser capaz de

  1. carga la misma página web en un número de diferentes navegadores
  2. carga la misma página web en un número de máquinas virtuales (que he puesto arriba)
  3. Sea capaz de tomar instantáneas comparando los diferentes resultados del navegador.

Tengo conocimientos de programación en C# y preferiría ejecutar mis pruebas a través de Nunit.

¿Alguien puede darme instrucciones o dirigirme a un sitio web que ya las tiene? Gracias.

+0

Cuando dice '1. Cargue la misma página web en una serie de navegadores diferentes ¿quiere decir a la vez? o secuencialmente? –

+0

enseguida. Así que múltiples navegadores están abiertos cargando la misma página web. – lbrown

+0

¿Es posible cambiar a MBunit? Después de algunas investigaciones, llegué a la conclusión de que Nunit no es la mejor herramienta para la paralelización. –

Respuesta

8

He creado un marco de prueba usando junit con Selenium WebDriver que satisface cada uno de sus puntos. Si bien no es exactamente lo que estás pidiendo, creo que puede ser beneficioso para ti.

carga la misma página web en un número de diferentes navegadores

Uso de la rejilla de selenio, esto es muy fácil de configurar. Configure algunas máquinas virtuales con los entornos que desea probar.En nuestro entorno, por ejemplo, tenemos una cuadrícula que se ejecuta con cuatro nodos (como máquinas virtuales) con una configuración como la siguiente

  • de Windows con Internet Explorer 7 y Firefox
  • de Windows con Internet Explorer 8 y Firefox
  • de Windows con IE9 y Firefox
  • Linux con Firefox

Nota que el selenio recomienda que sólo una instancia de IE se permite correr en los nodos de Windows. En cada uno de los nodos antes mencionados, hay una instancia del IE especificado y cinco instancias del FF especificado permitido ejecutar en cualquier momento dado. Con la configuración de la red y el concentrador configurados, las pruebas de desconexión son muy sencillas. En WebDriver, use el objeto DesiredCapabilities para configurar el entorno deseado y luego simplemente envíe la prueba y espere a que vuelva el resultado.

Platform desiredPlatform; 
DesiredCapabilities desiredCapabilities; 
desiredPlatform = Platform.LINUX; 
desiredCapabilities = DesiredCapabilities.firefox(); 
desiredCapabilities.setPlatform(desiredPlatform); 
desiredCapabilities.setVersion("11"); 

WebDriver driver = new RemoteWebDriver("http://hubURL", desiredCapabilities); 

carga la misma página web en un número de máquinas virtuales (que he establecido)

Solucioné éste forzando las pruebas para funcionar, aunque de una manera unconvential, en un roscado manera. Cada prueba JUnit utiliza una biblioteca de hilos compartidos que reuní y que crea todos los RemoteWebDrivers necesarios en hilos separados. Cada uno de estos subprocesos se ejecuta simultáneamente en su nodo mientras el subproceso principal se encuentra y espera a que todos finalicen. Luego, pasa a la siguiente prueba que se ejecuta también multiproceso.

Hubo un par de problemas que encontré, como la recuperación de las trazas de la pila Junit en todos los subprocesos secundarios. Lo resolví redireccionando Std.err a una copia de seguridad en el hilo padre. Todos los errores se enrutan a esa secuencia, la cual luego convierto a una cadena e imprime al Std.out al final de cada prueba. Las páginas html generadas al final de las pruebas incluyen Std.out que funcionó perfectamente.

ser capaz de tomar instantáneas comparar los diferentes resultados de navegador

Mientras que he conseguido que esto funcione, hay algunos problemas inherentes con el acaparamiento de las capturas de forma remota. IE devolverá capturas de pantalla negras si el proceso se está ejecutando como un servicio. La solución fue simplemente ejecutar el jar desde la línea de comando y mantener al usuario conectado, en cuyo caso las capturas de pantalla regresan correctamente. Este es un problema conocido en el navegador y realmente no hay una buena solución al problema. Tomar capturas de pantalla funciona aproximadamente así

WebDriver augmentedDriver = new Augmenter().augment(driver); 
TakesScreenshot ss = (TakesScreenshot) augmentedDriver; 
String base64Screenshot = ss.getScreenshotAs(OutputType.BASE64); 
byte[] decodedScreenshot = Base64.decodeBase64(base64Screenshot.getBytes()); 
FileOutputStream fos = new FileOutputStream(new File(imageName)); 
fos.write(decodedScreenshot); 
fos.close(); 

que guarda la captura de pantalla capturada desde el navegador en ejecución de la máquina remota en la máquina local.

En realidad, la automatización del navegador aún tiene dificultades para estabilizarse. Hay una serie de características importantes, como las que está preguntando, que simplemente no se implementan sólidamente de lo que yo sé en cualquier marco. Con el tiempo, sin embargo, estoy seguro de que mucho de esto se calmará y los desarrolladores de QA en todas partes se regocijarán.

+0

He notado su trabajo en algunas otras preguntas y parece muy hábil en las pruebas automatizadas. ¿Por casualidad, tiene un tutorial o un código publicado abierto al público? – lbrown

1

En cuanto al segundo punto: en lugar de utilizar Grid puede dejar que su servidor de integración continua haga el trabajo. En mi compañía usamos Jenkins y la llamada Matriz de Configuración: permite ejecutar el mismo trabajo en múltiples nodos de Jenkins.

En cuanto a la primera, creo que Jenkins podría ser útil aquí también. Puede ejecutar múltiples trabajos en el mismo nodo. Aunque nunca lo he intentado, no estoy seguro. Y esto es solo una idea, realmente no recomendaría esa solución. También puede leer this blog post que describe cómo ejecutar la prueba en paralelo usando Selenium Grid. Para las personas que usan Java, recomendaría leer sobre parallel tests with TestNG.

Su tercer punto es un poco vago. ¿Qué quieres decir con instantánea? ¿Y qué tipo de resultado quieres comparar?

-1

También podrías tener en cuenta the free Telerik Testing Framework. Este es el sustento del producto comercial Test Studio de Telerik. El marco de prueba proporciona compatibilidad con varios navegadores, hace un gran trabajo con situaciones de contenido dinámico (AJAX) y también le permite manejar diálogos de nivel de sistema operativo como los diálogos de carga/descarga de archivos. También puede tomar instantáneas del navegador en cualquier punto.

Puede envolver el marco dentro del corredor que prefiera. He usado NUnit y MbUnit sin problemas.

También hay una opción para un paquete de soporte si necesita ayuda con su automatización.

(Revelación: Trabajo para Telerik como su prueba Estudio evangelista)

0

Selenio RC es obsoleto y WebDriver es la forma más confiable de crear pruebas de selenio. Veo que las respuestas anteriores son más útiles para Java. A continuación se mencionan más información sobre cómo lograr las preguntas hechas aquí usando C# y selenio WebDriver

sobre cómo configurar el IDE (VS Express), nUnit y selenio se refiere How to setup C#,nUnit and selenium client drivers on VSExpress for Automated tests

en la creación de script sencillo que lanza una navegador hace pocos pasos se refieren Creating Basic Selenium web driver test case using Nunit and C#

sobre cómo cargar la misma página web en un número de diferentes navegadores sugieren refiriéndose How to invoke locally different types of browser driver using selenium and c#

En Cargar la misma página web en una serie de máquinas virtuales (que he configurado) para esto, necesita usar el controlador web remoto en lugar del controlador de web normal. También con el controlador web remoto, puede iniciar diferentes tipos de navegador. Consulte la página del How to invoke/run different type of web driver browser using remote webdriver in C#

Tomar instantánea en otro navegador puede consultar el enlace Capturing screen shots using remote/local webdriver in C#/Selenium webdriver

Cuestiones relacionadas