Dataprovider y TestNG XML: Parametrización en Selenium(Ejemplo)

Jun 9, 2021
admin

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

  1. Con la ayuda de la anotación Parameters y el archivo XML de TestNG.

  2. 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

  1. 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.
  2. 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.