Última actualización 18 de agosto de 2019 — Continuous Testing Experto
Continuous Testing

Selenium es una gran herramienta para automatizar las acciones de su navegador web. Sin embargo, su aplicación no se limita al uso local. Imagine que necesitamos ejecutar nuestras pruebas en varias máquinas a la vez, o en diferentes configuraciones del sistema, en diferentes navegadores, etc. Podemos pensar en alguna forma de automatizar el lanzamiento síncrono de instancias locales, pero Selenium tiene una buena solución preparada para este caso: Rejilla de selenio.

 

Rejilla de selenio paso a paso

1) Descargar Servidor independiente de selenio. Al momento de escribir, la versión actual es la 3.141, que es la que usaremos. Este archivo puede ser utilizado tanto por el cliente como por el servidor, por lo que debe colocarse en cada una de las máquinas que planea utilizar.

2) Ejecute el centro de Selenium, usando la siguiente línea de comando:

java -jar /somePathToJARfile/Selenium-server-standalone-3.141.59.jar -role hub -puerto 3333

 

Consejos:

a) Aquí la tecla “-port” es opcional. Si no lo usa, se usará el puerto predeterminado 4444; sin embargo, si está ocupado, puede usar cualquiera libre.

b) Cuando se usa en un proyecto real, tendrá que hacer el lanzamiento más de una vez. Esto significa que tiene sentido simplificar y automatizar inmediatamente este paso. La forma más fácil es usar el archivo bat/sh.

En el inicio, verá lo siguiente:

cmdline

Después de iniciar el concentrador, recibe instrucciones sobre cómo registrar y conectar los nodos (clientes-esclavos).

http://localhost:3333 (puede usar su dirección IP en lugar de "localhost" y el puerto en lugar de 3333) en su navegador web para verificar el estado de nuestro sistema distribuido.

un mueble consola

Como puede ver en la captura de pantalla anterior, Grid Console funciona en la dirección especificada. Está vacío hasta que no registramos un esclavo.

3) Ahora necesitamos iniciar los nodos de Selenium. Supongamos que planeamos ejecutar 2 instancias, una en la máquina local (donde se encuentra el concentrador) y otra en la máquina remota. Para hacer esto, use el siguiente comando en cada máquina:

java -Dwebdriver.chrome.driver=F:chromedriver.exe -jar /somePathToJARfile/Selenium-server-standalone-3.141.59.jar -role node -hub http://172.17.10.182:3333/grid/register -browser browserName =”chrome”,versión=CUALQUIER,plataforma=WINDOWS,maxInstances=5

cmdline

Consejos:

a) Aquí, el parámetro -Dwebdriver.chrome.driver=F:chromedriver.exe indica que esta instancia de cliente usará un controlador Chrome y el archivo chromedriver.exe está en la raíz del disco F.

b) El parámetro de nodo -role significa que ejecutamos la instancia como un nodo.

c) -centro http://172.17.10.182:3333/gdeshacerse/registrarse El parámetro es la ruta donde se encuentra nuestro concentrador (se puede reconocer desde la consola del concentrador).

d) -browser browserName=”chrome”,version=ANY,platform=WINDOWS,maxInstances=5 Esta parte define las opciones de inicio del navegador.

e) podemos agregar el puerto clave, pero si no lo especifica, se seleccionará automáticamente un puerto libre.

Ahora asegurémonos de que todos los nodos estén registrados correctamente en nuestro centro:

nodos cmdline

4) Ahora necesitamos crear un proyecto Java con las pruebas de Selenium que ejecutaremos. Para esto:

a) En el IDE, crea un nuevo proyecto Java Maven con la configuración predeterminada (estoy usando IntelliJ IDEA)

b) Luego agregue la clase java ParallelTest.java

prueba paralela

c) Importe las pruebas de Selenium necesarias y las bibliotecas de TestNG:

importar org.openqa.Selenium.Platform;

importar org.openqa.Selenium.remote.DesiredCapabilities;

importar org.openqa.Selenium.remote.RemoteWebDriver;

importar org.testng.annotations.BeforeTest;

importar org.testng.annotations.Parameters;

importar org.testng.annotations.Test;

importar java.net.MalformedURLException;

importar java.net.URL;

Más adelante discutiremos por qué necesitamos anotaciones. Después de importar las bibliotecas, debe permitir que el IDE agregue todas las dependencias necesarias.

cmdline cmdline

d) Agregue el siguiente código a nuestra clase ParallelTest{}:

controlador público RemoteWebDriver;

@AntesTest

vacío público antes de la prueba () {}

@Prueba

experto en vacío público(){}

Aquí:

@BeforeTest y @Test son anotaciones TestNG.

beforeTest(), experitest() son métodos.

RemoteWebDriver es una clase importada.

e) Necesitamos ejecutar la prueba en el estado actual para asegurarnos de que todo funciona correctamente y para obtener el archivo de configuración predeterminado de TestNG:

archivo de configuración

En la consola del IDE veremos los resultados de la ejecución. Haga clic en la línea de información de esta sección para obtener más información.

un mueble consola

Después de eso, la ruta al archivo de configuración recién creado aparecerá en la parte superior de la pantalla:

config

Vaya a este directorio y transfiera este archivo a nuestra carpeta de proyecto para su modificación y uso posterior.

directorio

f) Ahora vamos a editar nuestro archivo de configuración. Para hacer esto, cambie primero los parámetros de compilación:

parámetros

En esta pantalla, configuramos el parámetro "Tipo de prueba" en "Suite" y asignamos la ruta al archivo de configuración xml al parámetro "Suite". El archivo de configuración se encuentra dentro de la carpeta del proyecto.

parámetros

g) Echemos un vistazo más de cerca al archivo de configuración de TestNG y editémoslo para nuestro caso. El archivo de configuración predeterminado creado por el IDE es el siguiente:

 








 
 

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Aquí:

a) – Esta etiqueta define un conjunto de nuestras pruebas.

b) – Esta etiqueta define los parámetros de prueba.

c) y – Estas etiquetas definen qué clases se utilizarán en esta prueba.

Dentro de la etiqueta, podemos especificar qué métodos de esta clase usaremos. Para simplificar, usaremos una clase: Experto:

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Podríamos terminar la configuración en esto, pero dado que planeamos ejecutar varias instancias de nuestra prueba, necesitamos parametrización. Agreguemos las etiquetas relevantes al código:

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Aquí:

a) Los nombres de las etiquetas "platform" y "browserName" son parámetros que especificamos cuando iniciamos las instancias del nodo grid de Selenium.

b) La "URL remota" es un parámetro que determina qué instancia del cliente Selenium Grid utilizará una determinada máquina. Te recuerdo que puedes ver este parámetro en la consola del hub:

 

Sugerencia aquí:

Tenga en cuenta que la etiqueta se especifica en el archivo XML al comienzo de esta descripción de la prueba, antes de especificar las clases. Esto es necesario para que la parametrización sea relevante para todas las clases utilizadas en esta prueba.

Del ejemplo del archivo de configuración que se muestra arriba, se deduce que necesitamos hacer tantas copias de la sección dentro de la etiqueta de prueba en el archivo de configuración, como el número de instancias que planeamos usar. En nuestro caso, hay 2 instancias, así que actualice el archivo de configuración como se muestra a continuación:

 

[html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show][/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show] [html_tags_show] [/html_tags_show]

 

Tenga en cuenta que:

a) También cambiamos el nombre de las pruebas – Deben ser únicas.

b) Agregamos paralelo = "pruebas" en la etiqueta. – Esta es una parte muy importante. Este parámetro controla la concurrencia. En este caso, indica que las pruebas de esta suite deben realizarse en paralelo. Más información que puede obtener del funcionario Documentación de TestNG (pág. 5.11). Esta es la razón de usar TestNG en nuestro caso porque, en realidad, el sistema distribuido asume la ejecución de pruebas simultáneamente, es decir, en paralelo.

h) Ahora que todo está listo, podemos proceder a escribir la prueba en sí. Volvamos al archivo ParallelTest.java. Para empezar, agregaremos la capacidad de usar parámetros para cada instancia de prueba. Para hacer esto, agregue la anotación @Parameter y actualice el método beforeTest de la siguiente manera:

 

[html_tags_show]@Antes de la prueba[/html_tags_show] [html_tags_show]@Parameters({"plataforma", "nombre del navegador", "url remota"})[/html_tags_show] [html_tags_show]vacío público antes de la prueba (String plataforma, String browserName, String remoteurl) {[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

i) Ahora agregue la capacidad a este método: indicamos el navegador utilizado, la plataforma, la versión. Estos parámetros deben coincidir con lo que determinamos para cada nodo específico de Selenium:

 

[html_tags_show]@Antes de la prueba[/html_tags_show] [html_tags_show]@Parameters({"plataforma", "nombre del navegador", "url remota"})[/html_tags_show] [html_tags_show]vacío público antes de la prueba (String plataforma, String browserName, String remoteurl) {[/html_tags_show] [html_tags_show]Funcionalidad DesiredCapabilities = DesiredCapabilities.chrome();[/html_tags_show] [html_tags_show]capabilities.setBrowserName(“chrome”); capacidades.setPlatform(Platform.extractFromSysProperty(“plataforma”));[/html_tags_show] [html_tags_show]capacidades.setVersion(“CUALQUIERA”);[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

j) Cree una nueva instancia del controlador, teniendo en cuenta la capacidad y la URL remota. También preste atención a la necesidad de agregar una excepción a este método para usar remoteurl; si usa IDEA IDE, se le pedirá que lo haga.

 

[html_tags_show]@Antes de la prueba[/html_tags_show] [html_tags_show]@Parameters({"plataforma", "nombre del navegador", "url remota"})[/html_tags_show] [html_tags_show]public void beforeTest(String plataforma, String browserName, String remoteurl) lanza MalformedURLException {[/html_tags_show] [html_tags_show]Funcionalidad DesiredCapabilities = DesiredCapabilities.chrome();[/html_tags_show] [html_tags_show]capacidades.setBrowserName(“chrome”);[/html_tags_show] [html_tags_show]capabilities.setPlatform(Platform.extractFromSysProperty(“plataforma”));[/html_tags_show] [html_tags_show]capacidades.setVersion(“CUALQUIERA”);[/html_tags_show] [html_tags_show]driver = nuevo RemoteWebDriver(nueva URL(remoteurl), capacidades);[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

Consejo:

Si teme que su prueba no se inicie simultáneamente en todas las máquinas, debido a retrasos en la red, puede agregar Thread.sleep(3000); al final del método beforeTest. Esto aliviará un poco el posible problema.

Vamos a la prueba principal:

k) Agregue navegación al sitio web experitest.com y verifique el título de la página, y luego envíe el resultado de nuestra prueba a la consola:

 

[html_tags_show]@Prueba[/html_tags_show] [html_tags_show]experimento de vacío público(){[/html_tags_show] [html_tags_show] Cadena de título esperado = “experitest.com”;[/html_tags_show] [html_tags_show] Cadena realTitle = “”;[/html_tags_show] [html_tags_show] controlador.get(“https://experitest.com/free-trial/”);[/html_tags_show] [html_tags_show] título actual = conductor.getTitle();[/html_tags_show] [html_tags_show] si (actualTitle.contentEquals(expectedTitle)){[/html_tags_show] [html_tags_show] System.out.println(“¡PRUEBA SUPERADA!”);[/html_tags_show] [html_tags_show] } más {[/html_tags_show] [html_tags_show] System.out.println(“PRUEBA FALLIDA”);[/html_tags_show] [html_tags_show] }[/html_tags_show] [html_tags_show] controlador.quit();[/html_tags_show] [html_tags_show]}[/html_tags_show]

 

5) Todo está listo, ahora podemos ejecutar nuestra prueba. Para hacer esto, primero debe compilar el proyecto y luego ejecutarlo:

un mueble consola un mueble consola

¡Eso es todo! Ahora ya sabe cómo puede ejecutar pruebas de Selenium en el modo distribuido. Vimos un ejemplo simple de dos esclavos y dos instancias, utilizando cualquier versión de Chrome, pero siguiendo estas instrucciones puede experimentar con las configuraciones de sus máquinas esclavas para lograr una mejor cobertura y resultados de prueba. Este proyecto lo puedes descargar en en el siguiente enlace.

 

Consejos finales:

a) Si usa diferentes navegadores, sistemas, o tiene algo más, eso debe tenerse en cuenta, entonces en el método beforeTest, debe definirlos usando un conjunto consistente de operandos "si", como se muestra a continuación:

 

[html_tags_show]if (nombre del navegador.equals(“Firefox”)){[/html_tags_show] Capacidad [html_tags_show] = nuevas capacidades deseadas().firefox[/html_tags_show] [html_tags_show] }[/html_tags_show] [html_tags_show]if (nombre del navegador.equals(“chrome”)){[/html_tags_show] Capacidad [html_tags_show] = nuevas capacidades deseadas().firefox[/html_tags_show] [html_tags_show] }[/html_tags_show]

 

b) Para automatizar el proceso, puede usar secuencias de comandos sh / bat, o incluso una herramienta de CI, por ejemplo, Jenkins, para ejecutar automáticamente proyectos maven.

Y para obtener más información sobre las pruebas de Selenium y Selenium, siempre puede echar un vistazo a Experitest's Integración de Selenium Webdriver.

Máximo Bábilo - Ingeniero de rendimiento Equipo de control de calidad de ISSArt

[/ Vc_column_text] [/ vc_column] [/ vc_row]

¿Estás listo para escalar tu empresa?

Explorar

¿Qué hay de nuevo en el mundo de Digital.ai

Abril 22, 2024

El sesgo en la máquina: sesgos en los datos de entrenamiento y su impacto en el código generado por los asistentes de código de IA

Explore los sesgos en los datos de entrenamiento de IA que afectan la generación de código y aprenda estrategias para mitigarlos para lograr un desarrollo de IA y una innovación de software más justos.

Más Información
Febrero 22, 2024

Cómo el futurismo está dando forma a las pruebas en la nube: un pronóstico

Libere el futuro de las pruebas en la nube: enfoques estratégicos para aprovechar la tecnología de manera efectiva, mejorar la calidad del software y garantizar el éxito empresarial.

Más Información
4 de diciembre de 2023

El impulso hacia la calidad: pruebas continuas de software automatizadas para la industria automotriz

Desde la creación de pruebas impulsadas por IA hasta sistemas de autorreparación, descubra cómo continuous testing y los desarrollos innovadores están dando forma al futuro de la conectividad, safey vehículos confiables.

Más Información