tel./fax: +34 91 675 33 06 [email protected] - www ... · en este tutorial vamos a montar un...

9
Avenida de Castilla,1 - Edificio Best Point - Oficina 21B 28830 San Fernando de Henares (Madrid) tel./fax: +34 91 675 33 06 [email protected] - www.autentia.com Somos su empresa de Soporte a Desarrollo Informático. Ese apoyo que siempre quiso tener... 1. Desarrollo de componentes y proyectos a medida Tecnología Desarrollo Sistemas Gran Empresa Producción autentia Certificación o Pruebas Verificación previa RFP Concurso Consultora 1 Consultora 2 Consultora 3 Equipo propio desarrollo Piloto 3a 3b 1. Definición de frameworks corporativos. 2. Transferencia de conocimiento de nuevas arquitecturas. 3. Soporte al arranque de proyectos. 4. Auditoría preventiva periódica de calidad. 5. Revisión previa a la certificación de proyectos. 6. Extensión de capacidad de equipos de calidad. 7. Identificación de problemas en producción. 3. Arranque de proyectos basados en nuevas tecnologías ¿Qué ofrece Autentia Real Business Solutions S.L? Para más información visítenos en: www.autentia.com Compartimos nuestro conociemiento en: www.adictosaltrabajo.com Gestor portales (Liferay) Gestor de contenidos (Alfresco) Aplicaciones híbridas Tareas programadas (Quartz) Gestor documental (Alfresco) Inversión de control (Spring) BPM (jBPM o Bonita) Generación de informes (JasperReport) ESB (Open ESB) Control de autenticación y acceso (Spring Security) UDDI Web Services Rest Services Social SSO SSO (Cas) Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery JPA-Hibernate, MyBatis Motor de búsqueda empresarial (Solr) ETL (Talend) Dirección de Proyectos Informáticos. Metodologías ágiles Patrones de diseño TDD 2. Auditoría de código y recomendaciones de mejora 4. Cursos de formación (impartidos por desarrolladores en activo)

Upload: others

Post on 20-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

Avenida de Castilla,1 - Edificio Best Point - Oficina 21B28830 San Fernando de Henares (Madrid)

tel./fax: +34 91 675 33 [email protected] - www.autentia.com

Somos su empresa de Soporte a Desarrollo Informático.Ese apoyo que siempre quiso tener...

1. Desarrollo de componentes y proyectos a medida

TecnologíaDesarrolloSistemas

Gran Empresa

Producción

autentia

Certificacióno Pruebas

Verificación previa

RFP Concurso

Consultora 1

Consultora 2

Consultora 3

Equipo propio desarrolloPiloto

3a

3b

1. Definición de frameworks corporativos.2. Transferencia de conocimiento de nuevas arquitecturas.3. Soporte al arranque de proyectos.4. Auditoría preventiva periódica de calidad.5. Revisión previa a la certificación de proyectos.6. Extensión de capacidad de equipos de calidad.7. Identificación de problemas en producción.

3. Arranque de proyectos basados en nuevas tecnologías

¿Qué ofrece Autentia Real Business Solutions S.L?

Para más información visítenos en: www.autentia.com

Compartimos nuestro conociemiento en: www.adictosaltrabajo.com

Gestor portales (Liferay)Gestor de contenidos (Alfresco)Aplicaciones híbridas

Tareas programadas (Quartz)Gestor documental (Alfresco)Inversión de control (Spring)

BPM (jBPM o Bonita)Generación de informes (JasperReport)ESB (Open ESB)

Control de autenticación y acceso (Spring Security)UDDIWeb ServicesRest ServicesSocial SSOSSO (Cas)

Spring MVC, JSF-PrimeFaces /RichFaces, HTML5, CSS3, JavaScript-jQuery

JPA-Hibernate, MyBatisMotor de búsqueda empresarial (Solr)ETL (Talend)

Dirección de Proyectos Informáticos.Metodologías ágilesPatrones de diseñoTDD

2. Auditoría de código y recomendaciones de mejora

4. Cursos de formación (impartidos por desarrolladores en activo)

Page 2: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

E-mail:

Contraseña:

Inicio Quiénes somos Tutoriales Formación Comparador de salarios Nuestro libro Charlas Más

Deseo registrarmeHe olvidado mis datos deacceso

Entrar

Estás en:Inicio Tutoriales Introducción a Selenium Grid y Test Paralelos con JUnit

Catálogo de serviciosAutentia

Últimas Noticias

XVII Charla Autentia- Grails

Charla enWhyFLOSS en el IE:

la ppt

Charla en TheEvnt:La Technicienta, de

programador aempresario, la ppt

¿Una partidita?

¡¡¡ 1000 tutoriales !!!

Histórico deNOTICIAS

Últimos Tutoriales

Implementandonuestro propio

formulario de validacióncon Spring MVC.

Uso de la Wiki deGithub.

Crear un juego en2d con Unity3d

Búsquedas"facetadas" en Solr

con el soporte de Solrj.

Construcción de uncontrol

personalizado enAndroid

Share |

DESARROLLADO POR:

Juan Alonso Ramos

Consultor tecnológico de desarrollo de proyectosinformáticos.

Ingeniero Técnico en Informática de Gestión eIngeniero en Informática, especialidad en Ingenieríadel Software

Puedes encontrarme en Autentia: Ofrecemos deservicios soporte a desarrollo, factoría y formación

Somos expertos en Java/J2EE

Regístrate para votar

Introducción a Selenium Grid y Test Paraleloscon JUnit

Índice de contenidos.

1. Introducción2. Entorno3. Arrancar Selenium Grid4. Lanzar los test de Selenium de demo5. Lanzar nuestros propios test de Selenium en paralelo6. Conclusiones

1. Introducción

Selenium Grid es una herramienta para lanzar test de Selenium de forma distribuida. Utilizainternamente Selenium Remote Control para ejecutar los test de integración con distintosnavegadores y plataformas.

Para conocer más sobre Selenium RC podéis consultar el tutorial de Víctor.

Dentro de Selenium Grid se encuentra un módulo importante, el Hub. Este módulo es la parte centralde Selenium Grid ya que nos permitirá controlar los distintos Servidores Remote Control encargadosde lanzar los test y distribuir los test en los mismos.

Para conocer mucho más sobre Selenium os recomiendo la charla de Victor Madrid. Ver charla

Una vez montada la infraestructura para los test crearemos un test con JUnit 4 y Selenium con laparticularidad de que podrán ser lanzados de forma paralela, es decir completamente simultánea envarios hilos. Con esto conseguiremos test de carga con el que poder medir los tiempos de respuestade nuestro sistema. También conseguiremos distribuir nuestros test de Selenium en varias máquinasy navegadores ganando en eficiencia con test demasiado pesados.

3Fecha de publicación del tutorial: 2009-02-26

Page 3: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

Síguenos a travésde:

Últimos Tutoriales delAutor

Lanzar test deSelenium 2 en un

navegador remoto

Introducción aSelenium 2 y

WebDriver

Mapeo deProcedimientos

Almacenados conHibernate

Autoescaneo deentidades de

Hibernate con Spring

DataTable conpaginación en base

de datos con Primefaces

Últimas ofertas deempleo

2011-03-02T. Información -Analista /

Programador - MALAGA.

2011-02-24T. Información -Especialista CRM -

MADRID.

2011-02-16Marketing - Expertoen Marketing -

CADIZ.

2011-02-08Comercial - Ventas -CADIZ.

2011-01-28Comercial - Ventas -SEVILLA.

En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4.

2. Entorno

MacBook Pro 15' (2.4 GHz Intel Core i5, 4GB DDR3 SDRAM).Sistema Operativo: Mac OS X Snow Leopard 10.6.6Java 1.6.0_24Selenium Grid 1.0.8JUnit 4.8.2

3. Arrancar Selenium Grid

Lo primero será descarganos e instalar Selenium Grid. Nos vamos a su página oficial, descargamosSelenium Grid 1.0.8. Una vez descargado lo descomprimimos y probamos que se ha instaladocorrectamente (para ello es necesario tener configurado Ant) ejecutando el comando ant sanity-check. Si todo está bien nos aparecerá el siguiente mensaje:

La configuración básica de Selenium Grid la podemos editar desde el fichero grid_configuration.yml.En este fichero se definen los valores correspondientes al puerto de escucha de Selenium Grid, cadacuanto tiempo se chequeará el estado de los Remote Controls, el tiempo de espera para que unasesión de test se considere inactiva o bien los distintos entornos donde realizar las pruebas de lostest de Selenium. En este último caso se puede configurar el sistema operativo y navegador con elque se lanzará el test, por ejemplo Firefox en Windows o Safari en OS X.

Para arrancar el hub debemos lanzarlo con el comando 'ant launch-hub'. Una vez arrancado podemosentrar en la consola mediante la url http://localhost:4444/console

01 sanity-check:02 [echo] Apache Ant(TM) version 1.8.2 compiled on February 28 201103 [echo] Java 1.604 [echo]05 [echo]

********************************************************************06 [echo] Congratulations, your setup looks good. Have fun with Selenium

Grid!07 [echo]

********************************************************************08 [echo]09 [echo] You can launch a hub by running 'ant launch-hub'10 [echo] You can launch a a remote control with 'ant -Dport=4444 launch-

remote-control'11 12 BUILD SUCCESSFUL

Page 4: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

Una vez arrancado el Hub debemos arrancar los Remote Control en distintas máquinas encargadasde lanzar los test de Selenium de forma distribuida. En mi entorno de pruebas arrancaré un RemoteControl en el Mac OS X Snow Leopard y otro Remote Control en una máquina virtual con Windows XP.

Para arrancar un Remote Control desde la máquina donde se encuentra el Hub arrancado:

Para arrancar un Remote Control desde otra máquina hay que arrancar el Remote Control e indicarlela URL de conexión al Hub y el puerto de comunicación:

El parámetro port indica el puerto de escucha del Remote Control, el host indica la IP donde seencuentra instalado y el parámetro hubURL indica la IP de nuestro Hub encargado de distribuir lostest en los distintos Remote Controls.

Comprobamos si se han conectado los Remote Control al Hub desde la consola anterior:

1 ant launch-remote-control

1 ant -Dport=5555 -Dhost=192.168.168.43 -DhubURL=http://192.168.168.36:4444launch-remote-control

Page 5: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

4. Lanzar los test de Selenium de demo

Con la versión que nos hemos instalado disponemos de unos test de prueba que sirven paracomprobar que nuestro sistema está bien configurado. Para lanzarlo tenemos que escribir elcomando:

Esto levantará el contexto de los test en los dos Remote Controls configurados. Mientras dura esteproceso aparecerán en la consola de Selenium Grid los Remote Controls como activos. Los test quevienen están montados con TestNG que tiene un API para dotar de paralelismo a los test. En JUnit 4están desarrollándolo, de momento están en versión experimental.

5. Lanzar nuestros propios test de Selenium en paralelo

Una vez que hemos configurado nuestro entorno de test y probado la demo que viene en la versiónde instalación vamos a montar nuestros propios test.

Lo primero será grabar nuestro test para ello utilizamos Selenium IDE y realizamos una navegaciónpor adictosAlTrabajo. Guardamos el test para JUnit 4. El resultado es el siguiente:

1 ant run-demo-in-parallel

01 package com.tutoriales.seleniumgrid;02 03 import com.thoughtworks.selenium.*;04 import org.junit.After;05 import org.junit.Before;06 import org.junit.Test;07 08 import junit.framework.Assert;09 10 public class AdictosAlTrabajoTestCase {11 12 private Selenium selenium;13 14 @Before15 public void setUp() throws Exception {16 selenium = new DefaultSelenium("localhost", 4444, "*firefox",

"http://www.adictosaltrabajo.com/");17 selenium.start();18 }

Page 6: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

Si lanzamos nuestro test de JUnit vemos como se lanza una única instancia que se comunica con unode los Remote Control. Para poder lanzar varias instancias de un test recurrimos a la claseParameterized de JUnit que permite levantar varias instancias de test cada una con un parámetro quelo hace diferente al anterior. Este parámetro es recogido de una colección que devuelve un métodode la clase de test anotado con @Parameters. El ejemplo del código anterior con esta clase es elsiguiente:

El método getParameters devolverá un parámetro para cada instancia del test, en este caso hemosescogido dos navegadores para lanzar los test. Para lanzar el Remote Control para safari heejecutado el comando ant -Denvironment="*safari" -Dport=5556 launch-remote-control

En este caso se lanzan dos instancias del test pero no de forma paralela, primero una y luego la otra.El hub decide hacia qué Remote Control encamina los trabajos de ejecución del test que siempre selanzan en el mismo entorno ya que no es necesario un entorno paralelizado debido a que los test son

19 20 @Test21 public void findTutorial() throws Exception {22 selenium.open("/");23 selenium.type("sbi", "selenium remote control");24 selenium.click("sb");25 selenium.waitForPageToLoad("30000");26 27 Assert.assertEquals("Adictos al Trabajo. Formación y desarrollo |

JAVA, JEE, UML, XML |. Tutoriales sobre nuevas tecnologías.",selenium.getTitle());

28 selenium.selectFrame("googleSearchFrame");29 selenium.click("//div[@id='res']/div[1]/ol/li[1]/div/h2/a/em");30 selenium.waitForPageToLoad("30000");31 }32 33 @After34 public void tearDown() throws Exception {35 selenium.stop();36 }37 }

01 package com.tutoriales.seleniumgrid;02 03 import com.thoughtworks.selenium.*;04 import org.junit.After;05 import org.junit.Before;06 import org.junit.Test;07 import org.junit.runner.RunWith;08 import org.junit.runners.Parameterized;09 import org.junit.runners.Parameterized.Parameters;10 11 import java.util.Arrays;12 import java.util.Collection;13 14 import junit.framework.Assert;15 16 @RunWith(Parameterized.class)17 public class AdictosAlTrabajoTestCase {18 19 private Selenium selenium;20 21 private String browser;22 23 public AdictosAlTrabajoTestCase(String browser) {24 this.browser = browser;25 }26 27 @Parameters28 public static Collection<object[]> getParameters(){29 return Arrays.asList(new Object[][] { {"*firefox"}, {"*safari"} });30 }31 32 @Before33 public void setUp() throws Exception {34 selenium = new DefaultSelenium("localhost", 4444, this.browser,

"http://www.adictosaltrabajo.com/");35 selenium.start();36 }37 38 @Test39 public void findTutorial() throws Exception {40 selenium.open("/");41 selenium.type("sbi", "selenium remote control");42 selenium.click("sb");43 selenium.waitForPageToLoad("30000");44 45 Assert.assertEquals("Adictos al Trabajo. Formación y desarrollo |

JAVA, JEE, UML, XML |. Tutoriales sobre nuevas tecnologías.",selenium.getTitle());

46 selenium.selectFrame("googleSearchFrame");47 selenium.click("//div[@id='res']/div[1]/ol/li[1]/div/h2/a/em");48 selenium.waitForPageToLoad("30000");49 }50 51 @After52 public void tearDown() throws Exception {53 selenium.stop();54 }55 }56 57 </object[]>

Page 7: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

secuenciales. Para conseguir paralelismo y que los test se ejecuten a la vez debemos hacerlo endiferentes hilos. En el siguiente código tomado del blog de Harald Wellmann se declara una claseParallelized que hereda de Parameterized de JUnit pasándole una clase que implementa un pool dethreads donde ejecutarse cada test de forma independiente definido con la claseThreadPoolScheduler que a su vez implementa RunnerScheduler que permite paralelizar los test.

Si ahora lanzamos los test vemos como se lanzan cada uno en un hilo independiente y todos a la vez.He añadido un nuevo test para ejecutarse en Internet Explorer para eso he arrancado en la máquinavirtual un nuevo Remote Control mediante ant -Dport=5557 -Dhost=192.168.168.43 -DhubURL=http://192.168.168.36:4444 -Denvironment="*iexplore" launch-remote-control

El código del test final es el siguiente:

01 package com.tutoriales.seleniumgrid;02 03 import java.util.concurrent.ExecutorService;04 import java.util.concurrent.Executors;05 import java.util.concurrent.TimeUnit;06 07 import org.junit.runners.Parameterized;08 import org.junit.runners.model.RunnerScheduler;09 10 public class Parallelized extends Parameterized {11 12 private static class ThreadPoolScheduler implements RunnerScheduler {13 private ExecutorService executor;14 15 public ThreadPoolScheduler() {16 String threads = System.getProperty("junit.parallel.threads",

"16");17 int numThreads = Integer.parseInt(threads);18 executor = Executors.newFixedThreadPool(numThreads);19 }20 21 public void finished() {22 executor.shutdown();23 try {24 executor.awaitTermination(10, TimeUnit.MINUTES);25 } catch (InterruptedException exc) {26 throw new RuntimeException(exc);27 }28 }29 30 public void schedule(Runnable childStatement) {31 executor.submit(childStatement);32 }

33 }34 35 public Parallelized(Class klass) throws Throwable {36 super(klass);37 setScheduler(new ThreadPoolScheduler());38 }39 }

01 package com.tutoriales.seleniumgrid;02 03 import com.thoughtworks.selenium.*;04 import org.junit.After;05 import org.junit.Before;06 import org.junit.Test;07 import org.junit.runner.RunWith;08 import org.junit.runners.Parameterized.Parameters;09 10 import java.util.Arrays;11 import java.util.Collection;12 13 import junit.framework.Assert;14 15 @RunWith(Parallelized.class)16 public class AdictosAlTrabajoTestCase {17 18 private Selenium selenium;19 20 private String browser;21 22 public AdictosAlTrabajoTestCase(String browser) {23 this.browser = browser;24 }25 26 @Parameters27 public static Collection<object[]> getParameters(){28 return Arrays.asList(new Object[][] { {"*firefox"}, {"*safari"},

{"*iexplore"} });29 }30 31 @Before32 public void setUp() throws Exception {33 selenium = new DefaultSelenium("localhost", 4444, this.browser,

"http://www.adictosaltrabajo.com/");34 selenium.start();35 }36 37 @Test38 public void findTutorial() throws Exception {39 selenium.open("/");40 selenium.type("sbi", "selenium remote control");

Page 8: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; contu ayuda, podemos ofrecerte un mejor servicio.

Anímate y coméntanos lo que pienses sobre este TUTORIAL:

El funcionamiento del sistema se ve en la consola de Selenium Grid mientras se están ejecutando lostres test en paralelo

6. Conclusiones

Realizar pruebas exhaustivas de nuestros sistemas es fundamental para asegurar la ausencia dedefectos pero también es necesario probar la carga y los tiempos de respuesta del servidor antepeticiones masivas. Con Selenium Grid podemos simular diferentes clientes atacando a nuestrosistema por lo que es una aplicación muy útil y práctica para aumentar la calidad en nuestrosdesarrollos.

Espero que te haya sido de ayuda.

Un saludo. Juan.

41 selenium.click("sb");42 selenium.waitForPageToLoad("30000");43 44 Assert.assertEquals("Adictos al Trabajo. Formación y desarrollo |

JAVA, JEE, UML, XML |. Tutoriales sobre nuevas tecnologías.",selenium.getTitle());

45 selenium.selectFrame("googleSearchFrame");46 selenium.click("//div[@id='res']/div[1]/ol/li[1]/div/h2/a/em");47 selenium.waitForPageToLoad("30000");48 }49 50 @After51 public void tearDown() throws Exception {52 selenium.stop();53 }54 }55 </object[]>

Page 9: tel./fax: +34 91 675 33 06 info@autentia.com - www ... · En este tutorial vamos a montar un proyecto con Selenium Grid y test paralelos con JUnit 4. 2. Entorno MacBook Pro 15' (2.4

Esta obra está licenciada bajo licencia Creative Commons de Reconocimiento-No comercial-Sin obras derivadas2.5

Enviar comentario

(Sólo para usuarios registrados)

» Registrate y accede a esta y otras ventajas «

COMENTARIOS

Copyright 2003-2011 © All Rights Reserved | Texto legal y condiciones de uso | Banners | Powered by Autentia | Contacto