¿Te gustaría aprender Pruebas Automatizadas Selenium?
Tenemos los cursos que necesitas.¡Haz clic aquí!


Casos de prueba de muestra

Este artículo se enfoca en cómo ejecutar pruebas en paralelo utilizando Selenium Grid integrado con TestNG y Ant, así que usaremos una aplicación simple con base en una página PHP. El caso de prueba está diseñado para simplemente hacer clic en las pestañas en la página.

 

Listado 3 proporciona el código de origen de ejemplo para las pestañas.

Listado 3. Código de origen para las pestañas
1
2
3
4
5
6
7
8
9
<div class="Tabs" style="width: 100%;">
  <a class="Current">Test Case</a>
  <a>View Time</a>
  <a>Run Scripts</a>
  <a>Long Run</a>
  <a>LA</a>
  <a>s-CAT</a>
  <a>Jmeter</a>
</div>

Las máquinas de prueba fueron preparadas de la siguiente manera.

Ponga la carpeta de prueba, cuyo contenido es mostrado en Figura 3, en el directorio selenium-grid-1.0.6.

El directorio de origen contiene los archivos de código de origen Java. El directorio de destino contiene todos los archivos de clase, la compilación posterior y los archivos de informe. El archivo build.xml, mostrado en Listado 4, es un archivo de construcción de Ant que define la configuración objetivo. Incluye cuál archivo de configuración de TestNG llamar, los parámetros del proyecto, la ruta del archivo de biblioteca, etc. El archivo testng.xml es el archivo de configuración de TestNG para el caso de prueba de ejemplo.

Listado 4. build.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<project name="Selenium Grid Test" default="run" basedir=".">
  <description>Selenium Grid Test</description>
  <property name="rootdir" value="${basedir}/.."/>
  <property file="${rootdir}/project.properties"/>
  <property name="name" value="Selenium Grid Demo"/>
  <property name="artifact" value="selenium-grid-demo"/>
  <property name="version" value="SNAPSHOT"/>
  <property name="selenium.version" value="SET ME"/>
  <property name="build.src" location="src"/>
  <import file="${rootdir}/lib/build/common-build.xml" />
  <path id="compile.classpath">
    <fileset dir="${rootdir}/vendor">
      <include name="selenium-java-client-driver-${selenium.version}.jar"/>
      <include name="testng-5.7-jdk15.jar"/>
      <include name="commons-logging-1.0.4.jar"/>
    </fileset>
    <pathelement location="${rootdir}/tools/target/classes"/>
    <pathelement location=
    "${rootdir}/tools/target/dist/lib/selenium-grid-tools-standalone-${version}.jar"/>
    <pathelement location="${rootdir}/lib/selenium-grid-tools-standalone-${version}.jar"/>
    <pathelement path="${java.class.path}/"/>
  </path>
  <path id="runtime.classpath">
    <path refid="compile.classpath"/>
    <pathelement path="${build.output}/"/>
  </path>
  <target name="run" depends="compile" description="test">
       <java classpathref="runtime.classpath"
        classname="org.testng.TestNG"
        failonerror="true">
      <sysproperty key="java.security.policy" file="${rootdir}/lib/testng.policy"/>
      <arg value="-d" />
      <arg value="${basedir}/target/reports" />
      <arg value="-suitename" />
      <arg value="suite1" />
      <arg value="testng.xml"/>
    </java>
  </target>
  <target name="build" depends="compile"/>
  <target name="dist" depends="build"/>
  <target name="coverage-analysis" />
  
</project>

Ejecutando los casos de prueba de muestra

Ahora que el ambiente y los datos de prueba han sido configurados, puede ejecutar tres escenarios distintos de pruebas paralelas:

  • Los mismos casos de prueba ejecutándose en distintos navegadores en un servidor
  • Distintos casos de prueba ejecutándose en paralelo en distintos servidores en distintos navegadores
  • Distintos casos de prueba ejecutándose en paralelo en distintos servidores con el mismo navegador

Ejecutar los mismos casos en distintos navegadores en un servidor

Para ejecutar los mismos casos de prueba en distintos navegadores en un servidor, vaya al directorio de distribución de Selenium Grid:

1
ant launch-hub

En una nueva ventana en la misma máquina, o en otra máquina, ingrese una de las siguientes opciones:

1
2
ant launch-remote-control
ant Denvironment=*iehta launch-remote-control

o

1
2
3
ant  -Dhost=9.181.138.186 DhubURL=http://9.181.138.75:4444 launch-remote-control
ant  -Dhost=9.181.138.186 DhubURL=http://9.181.138.75:4444
       -Denvironment=*iehta launch-remote-control

En un navegador, regrese a la consola de Hub en http://localhost:4444/console. Ahora deberá tener dos controles remotos listados

 

Ponga el código de origen de la clase de prueba desde Listado 5 en el directorio de origen.

Listado 5. Código de origen Java del caso de prueba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
import org.testng.annotations.Parameters;
public class GridTest2 {
    String url = "http://9.181.138.186/index.php";
    private Selenium selenium= null;
    @Parameters({ "bs" })
    @BeforeClass
    public void startBroswer(String broswer)
    {
        selenium= new DefaultSelenium("localhost", 4444, broswer, url);
        selenium.start();
        selenium.open(url);
        selenium.windowMaximize();
    
    }
    @Test
    public void test() throws InterruptedException
    {
        selenium.click("xpath=//a[contains(text(),\'LA\')]");
        Thread.sleep(10000);
    }
    @AfterClass
    public void clear() {
        selenium.stop();
    }  
}

Cambie el contenido de testng.xml, como se muestra en Listado 6:

Listado 6. Contenido del archivo de configuración de TestNG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="suite1" verbose="1"  annotations="JDK" parallel="tests" thread-count="2">  
  <test name="test1">
    <parameter name="bs"  value="*firefox"/>
    <classes>
      <class name="GridTest2" />
    </classes>
 </test>
 <test name="test2">
    <parameter name="bs"  value="*iehta"/>
    <classes>
      <class name="GridTest2" />
    </classes>
 </test>
</suite>

El parámetrobs en el archivo testng.xml define que test1 se ejecuta en el navegador Firefox y test2 se ejecuta en Internet Explorer. El atributoparallel define que las pruebas se ejecutan en paralelo. El atributothread-count define la cuenta de hebras a ejecutar. Sólo hay dos pruebas definidas, de forma que las dos pruebas se ejecutarán al mismo tiempo.

Abra una ventana y vaya al directorio de prueba:

1
ant run

El caso de prueba se ejecutará automáticamente.

Distintos casos se ejecutan en paralelo en distintos servidores en distintos navegadores

Para ejecutar distintos casos de prueba en paralelo en distintos servidores en distintos navegadores, vaya al directorio de distribución de Selenium Grid:

1
ant launch-hub

En una nueva ventana en la misma máquina, o en una ventana en otra máquina, ingrese:

1
2
ant launch-remote-control
ant Dport=6666 Denvironment=*iehta launch-remote-control

En una ventana en la máquina 9.181.138.186, ingrese:

1
ant  -Dhost=9.181.138.186 DhubURL=http://9.181.138.75:4444 launch-remote-control

En una ventana en la máquina 9.181.138.184, ingrese:

1
ant  -Dhost=9.181.138.184 DhubURL=http://9.181.138.75:4444 launch-remote-control

En un navegador, regrese a la consola de HUB en http://localhost:4444/console. Ahora deberá tener cuatro controles remotos listados como disponibles.

 

Ponga el código de origen de la clase de prueba en Listado 7 en el directorio de origen.

Listado 7. Código de origen Java del caso de prueba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
public class GridTest2(3/4) {
    String url = "http://9.181.138.186/index.php";
    private Selenium selenium= null;
    @Parameters({ "bs" })
    @BeforeClass
    public void startBroswer()
    {
selenium= new DefaultSelenium("localhost", 4444, broswer, url);
        selenium.start();
        selenium.open(url);
        selenium.windowMaximize();
    
    }
    @Test
    public void test() throws InterruptedException
    {
        selenium.click("xpath=//a[contains(text(),\'View Time\')]");
        //any code is ok
        Thread.sleep(10000);
    }
    @AfterClass
    public void clear() {
        selenium.stop();
    }
}

Cambie el contenido del archivo testng.xml, como se muestra en Listado 8:

Listado 8. Contenido del archivo de configuración de TestNG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="suite1" verbose="1"  annotations="JDK" parallel="tests" thread-count="2" >  
  <test name="test2"  junit="false" >
    <parameter name="bs"  value="*iehta"/>
    <classes>
      <class name="GridTest2" />
    </classes>
 </test>
 <test name="test3"  junit="false">
    <parameter name="bs"  value="*firefox"/>
    <classes>
      <class name="GridTest3" />
    </classes>
 </test>
<test name="test4"  junit="false">
    <parameter name="bs"  value="*firefox"/>
    <classes>
      <class name="GridTest4" />
    </classes>
 </test>
</suite>

Sólo dos casos de prueba se ejecutarán al mismo tiempo, ya que sólo hay dos hebras definidas. Aunque existen cuatro controles remotos, el centro elegirá RC1 para ejecutar GridTest2 y cualquiera de los dos controles remotos restantes para ejecutar GridTest3 y GridTest4. La ejecución paralela de dos pruebas es aleatoria.

 

Si desea ejecutar estas tres pruebas al mismo tiempo, simplemente cambie thread-count a 3.

Distintos métodos ejecutándose en paralelo en distintos servidores con el mismo navegador

Para ejecutar distintos casos de prueba en paralelo en distintos servidores en el mismo navegador, vaya al directorio de distribución de Selenium Grid:

1
ant launch-hub

Abra una ventana en la máquina 9.181.138.186, e ingrese:

1
ant  -Dhost=9.181.138.186 DhubURL=http://9.181.138.75:4444 launch-remote-control

En una ventana en la máquina 9.181.138.184, ingrese:

1
ant  -Dhost=9.181.138.184 DhubURL=http://9.181.138.75:4444 launch-remote-control

En un navegador, regrese a la consola de HUB en http://localhost:4444/console. Ahora deberá tener tres o cuatro controles remotos listados como disponibles. Ponga el código de origen de la clase de prueba desde Listado 9 en el directorio de origen.

Listado 9. Código de origen Java del caso de prueba
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
import static com.thoughtworks.selenium.grid.tools.
    ThreadSafeSeleniumSessionStorage.closeSeleniumSession;
import static com.thoughtworks.selenium.grid.tools.
    ThreadSafeSeleniumSessionStorage.session;
import static com.thoughtworks.selenium.grid.tools.
    ThreadSafeSeleniumSessionStorage.startSeleniumSession;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Parameters;
public class GridTest {
    String url = "http://9.181.138.186/index.php";
    private Selenium selenium; 
        @BeforeMethod(alwaysRun = true)
        protected void startSession() {
                startSeleniumSession("localhost", 4444, "*firefox", url);
                selenium = session();
        selenium.open("/");
        selenium.windowMaximize();
        }
     @AfterMethod(alwaysRun = true)
        protected void closeSession() {
                closeSeleniumSession();
        }
    @Test
    public void test() throws InterruptedException
    {
        
        selenium.click("xpath=//a[contains(text(),\'View Time\')]");
        Thread.sleep(10000);
    }
    @Test
    public void test2() throws InterruptedException
    {
        selenium.click("xpath=//a[contains(text(),\'LA\')]");
        Thread.sleep(10000);
    }
    @Test
    public void test3() throws InterruptedException
    {
        selenium.click("xpath=//a[contains(text(),\'Test Case\')]");
        Thread.sleep(10000);
    }  
}

Cambie el contenido del archivo testng.xml, como se muestra en Listado 10.

Este código de origen es muy distinto de los scripts comunes de Selenium RC. Inicializa un objeto de Selenium como un objeto de sesión, ya que los métodos deben ejecutarse por separado, de forma que Selenium debe iniciar la sesión antes del método y cerrar la sesión después del método.

Listado 10. Contenido del archivo de configuración de TestNG
1
2
3
4
5
6
7
8
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="suite1" verbose="1"  parallel="methods" thread-count="2">  
  <test name="test"  junit="false">
    <classes>
      <class name="GridTest" />
    </classes>
 </test>
</suite>

El atributoparallel se cambia amethods, lo que significa que los métodos en la clase se ejecutarán en paralelo. Las clases se ejecutarán en secuencia.

Viendo los resultados de la prueba

Es muy sencillo ver los resultados de la prueba. Vaya a la carpeta de destino definida en el archivo build.xml, y después a la carpeta de informes. Abra index.html, y haga clic en el enlace nombre de la suite. Deberá ver los resultados, como se muestra en Figura 7 que es el resultado de la tercera muestra de prueba.

 

Para obtener más detalles, haga clic en el enlace cronológico a la izquierda. Puede obtener información detallada.

 

Conclusión

En este artículo, ha aprendido cómo usar Selenium Grid para ejecutar pruebas de Selenium en paralelo. Haciendo sus pruebas de aplicaciones web automatizadas con Selenium Grid puede ahorrarle mucho tiempo y hacer más económico el uso de recursos. Por ejemplo, como se describe en el segundo escenario, si un sujeto de pruebas tiene 100 casos de prueba y configura 10 hebras para ejecutar casos de prueba, ahorrará 10 veces en esfuerzo y tiempo. Por supuesto, el número de controles remotos es limitado.

Las pruebas paralelas también pueden hacer más convenientes las pruebas de regresión. Esperamos que pueda tomar lo que ha aprendido en este artículo y acelere eficientemente las pruebas de sus aplicaciones web.

Te esperamos en los próximos artículos en donde hablaremos mas acerca de estos temas que hoy en día son de importancia e interés en el mundo de la tecnología.

¿Te gustaría aprender Pruebas Automatizadas Selenium?
Tenemos los cursos que necesitas.¡Haz clic aquí!
About Author

NGuerrero

0 0 votos
Article Rating
Suscribir
Notificar de
guest
2 Comments
La mas nueva
Más antiguo Más votada
Comentarios.
Ver todos los comentarios
Customeressay
3 Años Texto atrás

Gracias x compartir ka infocustomer essay

2
0
¿Te gusta este articulo? por favor comentax
()
x
Abrir chat
¿Quieres aprender a programar?
Hola 👋,
¿Te interesa información de nuestros cursos?