Dataprovider y TestNG XML: Parametrización en Selenium(Ejemplo)
Cuando creamos un software, siempre deseamos que funcione de forma diferente con un conjunto de datos distinto. Cuando se trata de probar la misma pieza de software, no podemos ser injustos al probarla con un solo conjunto de datos. También en este caso, tenemos que verificar que nuestro sistema está tomando todo el conjunto de combinaciones que se espera que soporte. Para ello, tenemos que parametrizar nuestra prueba scipts. Aquí viene la parametrización en la imagen.
Parametrización en Selenium
La parametrización en Selenium es un proceso para parametrizar los scripts de prueba con el fin de pasar múltiples datos a la aplicación en tiempo de ejecución. Es una estrategia de ejecución que ejecuta automáticamente los casos de prueba múltiples veces utilizando diferentes valores. El concepto que se consigue al parametrizar los scripts de prueba se llama Data Driven Testing.
En este tutorial, aprenderá-
- Tipo de parametrización en TestNG-
- Anotación de parámetros con Testng.xml
- Solución de problemas
- Parámetros usando Dataprovider
- Invocar DataProvider desde diferentes clases
- Tipos de Parámetros en Dataprovider
Tipo de Parametrización en TestNG-
Para que la parametrización sea más clara, vamos a repasar las opciones de parametrización en uno de los framework más populares para Selenium Webdriver: TestNG.
Hay dos maneras por las que podemos lograr la parametrización en TestNG
-
Con la ayuda de la anotación Parameters y el archivo XML de TestNG.
-
Con la ayuda de la anotación DataProvider.
Los parámetros de Testng.xml pueden ser de nivel de suite o de prueba
Los parámetros de DataProvider pueden tomar Method y ITestContext como parámetro.
Estudiémoslos en detalle –
Anotación de Parámetros en TestNG
La Anotación de Parámetros en TestNG es un método utilizado para pasar valores a los métodos de prueba como argumentos utilizando el archivo .xml. Los usuarios pueden ser requeridos para pasar los valores a los métodos de prueba durante el tiempo de ejecución. El método de anotación @Parameters puede utilizarse en cualquier método que tenga la anotación @Test, @Before, @After o @Factory.
Anotación de parámetros con Testng.xml
Seleccione la parametrización usando anotaciones cuando quiera lidiar con la complejidad &el número de combinaciones de entrada es menor.
Veamos cómo funciona
Escenario de prueba
Paso 1) Lanzar el navegador &ir a Google.com
Paso 2) Introducir una palabra clave de búsqueda
Paso 3) Comprobar que el valor introducido es el mismo que el proporcionado por nuestros datos de prueba
Paso 4) Repetir 2 & 3 hasta introducir todos los valores
Autor de la prueba | SearchKey |
Guru99 | India |
Krishna | USA |
Bhupesh | China |
Aquí tienes un ejemplo de cómo hacerlo SIN parámetros
Un estudio, el ejemplo anterior. Imagina lo complejo que será el código cuando hagamos esto para 3 combinaciones de entrada
Ahora, vamos a parametrizar esto usando TestNG
Para ello, necesitarás
- Crear un archivo XML que almacene los parámetros
-
En el test, añade la anotación @Parameters
Aquí tienes el código completo
Nivel de TestNG.xml
Fichero ParameterWithTestNGXML.java
Instrucciones para ejecutar el script, seleccionar el fichero XML y Ejecutar como Test NG Suite
Click derecho en el fichero .xml -> Ejecutar como -> Testng Suite (Nota : Suite)
Ahora, los parámetros se pueden definir en 2 niveles
- Nivel de suite – Los parámetros dentro de la etiqueta <suite> del archivo XML de TestNG serán un parámetro de nivel de suite.
- Nivel de prueba – Los parámetros dentro de la etiqueta <Test> del archivo XML de prueba serán un parámetro de nivel de prueba.
Aquí está la misma prueba con parámetros de nivel de suite
NOTA: En caso de que el nombre del parámetro sea el mismo en el nivel de suite y en el nivel de prueba, el parámetro de nivel de prueba tendrá preferencia sobre el nivel de suite. Por lo tanto, en ese caso, todas las clases dentro de ese nivel de prueba compartirán el parámetro anulado, y otras clases que están fuera del nivel de prueba compartirán el parámetro de nivel de suite.
Solución de problemas
Asunto # 1 El valor del parámetro en testng.xml no puede ser typecasted al parámetro del método de prueba correspondiente lanzará un error.
Considere el siguiente ejemplo
Aquí, el atributo ‘author’ es igual a ‘Guru99’ que es una cadena y en el método de prueba correspondiente se espera un valor entero, por lo que obtendremos una excepción aquí.
Asunto # 2 Sus @Parameters no tienen un valor correspondiente en testing.xml.
Puedes resolver esta situación añadiendo la anotación @optional en el parámetro correspondiente en el método de prueba.
Cuestión # 3: Quieres probar múltiples valores del mismo parámetro usando Testng.xml
¡La respuesta simple es que esto no se puede hacer! Usted puede tener múltiples parámetros diferentes, pero cada parámetro sólo puede tener un único valor. Esto ayuda a prevenir los valores de hardcoding en la secuencia de comandos. Esto hace que el código sea reutilizable. Piense en ello como archivos de configuración para su script. Si desea utilizar varios valores para un parámetro, utilice DataProviders
Data Provider in TestNG
Data Provider in TestNG es un método utilizado cuando un usuario necesita pasar parámetros complejos. Parámetros complejos necesitan ser creados desde Java como objetos complejos, objetos de archivos de propiedades o de una base de datos pueden ser pasados por el método de proveedor de datos. El método está anotado por @DataProvider y devuelve un array de objetos.
Parámetros usando Dataprovider
La anotación @Parameters es fácil pero para probar con múltiples conjuntos de datos necesitamos usar Data Provider.
Para rellenar miles de formularios web utilizando nuestro marco de pruebas necesitamos una metodología diferente que pueda darnos un conjunto de datos muy grande en un solo flujo de ejecución.
Este concepto de manejo de datos se logra con la anotación @DataProvider en TestNG.
Sólo tiene un atributo ‘name’. Si no se especifica el atributo name entonces el nombre del DataProvider será el mismo que el nombre del método correspondiente.
El proveedor de datos devuelve un objeto JAVA bidimensional al método de prueba y el método de prueba, invocará M veces en un array de objetos de tipo M*N. Por ejemplo, si el DataProvider devuelve un array de 2*3 objetos, el testcase correspondiente será invocado 2 veces con 3 parámetros cada vez.
Ejemplo completo
Invocar el DataProvider desde otra clase
Por defecto, el DataProvider reside en la misma clase donde está el método de test o en su clase base. Para ponerlo en alguna otra clase tenemos que hacer que el método del proveedor de datos sea estático y en el método de prueba tenemos que añadir un atributo dataProviderClass en la anotación @Test.
Ejemplo de código
TestClass ParameterDataproviderWithClassLevel.java
DataproviderClass.java
Tipos de parámetros en Dataprovider
Hay dos tipos de parámetros soportados por el método DataProvider.
Method- Si el MISMO DataProvider debe comportarse de manera diferente con diferentes métodos de prueba , utilice el parámetro Method.
En el siguiente ejemplo ,
- Comprobamos si el nombre del método es testMethodA.
- Si es así devuelve un conjunto de valores
- Si no devuelve otro conjunto de valores
Aquí está la salida
ITestContext- Se puede utilizar para crear diferentes parámetros para los casos de prueba basados en grupos.
En la vida real, puede utilizar ITestContext para variar los valores de los parámetros basados en Métodos de Prueba, hosts, configuraciones de la prueba.
En el siguiente ejemplo de código
- Tenemos 2 grupos A & B
- Cada método de prueba se asigna a un grupo
- Si el valor del grupo es A, se devuelve un conjunto de datos particular
- Si el valor del grupo es B, se devuelve otro conjunto de datos
Nota: Si ejecuta directamente su clase testng, primero llamará a dataprovider que no puede obtener la información de los grupos ya que los grupos no están disponibles. Pero si llama a esta clase a través de testng.xml, tendrá la información de los grupos disponible con ITestContext. Utilice el siguiente XML para llamar a la prueba
Summary:
- La parametrización es necesaria para crear el Data Driven Testing.
- TestNG soporta dos tipos de parametrización, usando @Parameter+TestNG.xml y usando@DataProvider
-
En @Parameter+TestNG.xml se pueden colocar parámetros a nivel de suite y a nivel de test. Si
Se declara el mismo nombre de parámetro en ambos lugares; el parámetro de nivel de prueba tendrá preferencia sobre el de nivel de suite.
- Usando @Parameter+TestNG.xml sólo se puede establecer un valor a la vez, pero @DataProvider devuelve un array 2d de Object.
- Si DataProvider está presente en la clase diferente a la clase donde reside el método de prueba, DataProvider debe ser método estático.
- Hay dos parámetros soportados por DataProvider son Method y ITestContext.