data driven parameterized testing with spock framework
Explore las formas de escribir pruebas basadas en datos o parametrizadas con Spock Framework:
En esto Serie de tutoriales de entrenamiento gratuitos de Spock , exploramos todo sobre Pruebas unitarias en Spock y Probar accesorios, afirmaciones e informes en nuestro tutorial anterior.
En este tutorial, intentaremos comprender qué son las pruebas parametrizadas y cómo puede aprovechar las funciones integradas de Spock para lograr las pruebas basadas en datos.
¡¡Empecemos!!
Ver el tutorial en video
Lo que vas a aprender:
- ¿Qué son las pruebas parametrizadas?
- Escribir pruebas parametrizadas con Spock
- Ciclo de vida del bloque 'dónde'
- consejos y trucos
- Conclusión
- Lectura recomendada
¿Qué son las pruebas parametrizadas?
Para cualquiera que haya trabajado con automatización / pruebas unitarias, las pruebas basadas en datos no son un término nuevo.
Las pruebas parametrizadas no son nada, pero son cualquier tipo de pruebas que comparten la misma lógica de ejecución y difieren solo en los datos de entrada y el resultado en algunos casos.
Ejemplo: Suponga que tiene una aplicación Calculadora, para probar la funcionalidad por completo, es posible que desee ejecutar sus pruebas con un conjunto de entrada diferente.
Ejemplo: Valores negativos, números fraccionarios, enteros normales, enteros que se acercan al rango máximo permitido, etc. Independientemente de los valores de entrada que tenga, desea ejecutar la misma lógica de ejecución.
Otra buena razón para escribir pruebas parametrizadas es que no solo prueba una ruta feliz, sino que también prueba una ruta de error o escenarios negativos.
Ejemplo: Supongamos que hay una aplicación que devuelve si una extensión de archivo determinada es válida o no. Las pruebas basadas en datos pueden permitir al desarrollador ejecutar rápidamente pruebas para extensiones de archivo compatibles y cualquier escenario de error o pruebas de entrada negativas.
Ahora, tradicionalmente, puede pensar en escribir o copiar las pruebas para múltiples valores de entrada, pero esa no es la forma correcta o inteligente de lograr este tipo de ejecución de prueba. Además, a medida que la cantidad de pruebas comience a aumentar en su aplicación, estas pruebas serán difíciles de mantener.
Escribir pruebas parametrizadas con Spock
El donde: bloque
El bloque where en una prueba de Spock es el bloque que contiene datos para la prueba parametrizada. Opcionalmente, puede contener valores de entrada y salida esperados. Un punto importante a tener en cuenta sobre este bloque es que este debería ser el último bloque en una prueba de Spock.
Habiendo dicho eso, se puede combinar con todos los otros bloques como dado, cuando y luego, pero debería ser el último bloque.
Veamos un ejemplo para entenderlo mejor
Usaremos una aplicación de calculadora que toma 2 parámetros de entrada y devuelve la suma de las entradas proporcionadas. Escribiremos una prueba parametrizada que suministre múltiples entradas y valores de salida esperados.
|_+_|En el ejemplo de código anterior, puede ver lo siguiente:
- Bloque 'donde' que contiene los datos para que se ejecute la prueba.
- El bloque 'donde' es el último bloque de la prueba.
- 'Dónde' se combina con los otros bloques, es decir, dado, cuándo y luego.
- La representación de datos es un formato especial llamado tablas de datos que veremos en detalle en las próximas secciones de este tutorial.
- La fila de encabezado de datos es esencialmente las propiedades / variables de entrada que se pueden usar directamente en la prueba. P.ej. Consulte la declaración en el bloque 'cuándo' donde hemos usado directamente entrada1 y input2 como parámetros de entrada sin definirlos explícitamente.
Usando tablas de datos
Intentemos comprender las tablas de datos en detalle ahora. Cada línea de la tabla de datos representa datos para un escenario individual (ejecución de prueba).
Por convención, es decir, los valores de entrada están precedidos por una barra simple ('|') mientras que los valores de salida están precedidos por una barra doble ('||'). Esto no tiene ningún significado lógico, pero es una convención y mejora la legibilidad. Por lo tanto, los dos ejemplos siguientes son válidos.
|_+_|La fila de encabezado, como se muestra arriba, tiene un nombre para cada uno de los parámetros proporcionados como datos para probar. Es importante señalar aquí que estos nombres de parámetros no deben chocar con ninguna variable local / global existente en la prueba; de lo contrario, habrá errores en tiempo de compilación para resolver nombres de variables.
Un punto importante a tener en cuenta al utilizar tablas de datos es que se requiere un mínimo de 2 columnas. Si solo necesita una columna, una columna en blanco con valores como carácter de subrayado es una solución alternativa como la siguiente.
|_+_|La ventaja de este formato es la simplicidad, la legibilidad y la extensibilidad. Agregar una nueva entrada de datos es tan simple como agregar una nueva fila con valores de datos.
Otro punto a tener en cuenta aquí es que las tablas de datos se pueden usar para contener cualquier tipo de variables, clases, objetos, enumeraciones, etc., lo que las hace aún más poderosas. Como groovy es un lenguaje opcionalmente tipado, si no se especifica un tipo explícito, las variables en la tabla de datos implican en función del tipo de datos suministrados.
Veamos otro Ejemplo utilizando tablas de datos con una lista de cadenas como entrada y salida como un recuento de elementos en la cadena.
|_+_|En el ejemplo anterior, puede observar que hemos proporcionado la entrada como una lista de matriz de cadenas y la salida es el tamaño de esta lista de matriz. Por lo tanto, ofrece mucha flexibilidad para tener datos de entrada de diferentes tipos.
También puede simplemente mencionar cualquier expresión que devuelva datos del tipo de entrada respectivo y usarla directamente en las tablas de datos.
Ciclo de vida del bloque 'dónde'
Para las pruebas que contienen muestras de datos y bloques where en forma de tablas de datos, cada fila de datos representa una ejecución del método de prueba.
Por ejemplo, si hay 5 filas de datos y la prueba contiene bloques 'dado' y 'cuándo', entonces para dicha fila de datos, los bloques de prueba se ejecutarán una vez. Entonces, en general, habrá un total de 5 ejecuciones del método de prueba.
consejos y trucos
Veamos algunos consejos y trucos para las pruebas parametrizadas mientras trabajamos con estas tablas de datos.
# 1) Visualización de los resultados de la ejecución de filas individuales por separado. Como vimos en la sección del ciclo de vida, para cada fila de datos hay una ejecución del código de prueba. Para que estas filas o resultados se muestren por separado para cada fila, se puede usar la anotación “@Unroll” para dichas pruebas.
Intentemos entender esto con un ejemplo:
Usaremos la misma aplicación de calculadora con 3 conjuntos de datos de entrada proporcionados al método bajo prueba.
etl testing preguntas y respuestas de la entrevista para experimentados|_+_|
Sin la anotación '@Unroll', veamos cómo se ve el resultado en la terminal (así como en los informes basados en html). Con este tipo de salida, resulta difícil averiguar qué conjunto de entradas provocó que la prueba fallara.
Ahora veamos cómo la salida de la prueba se informa por separado para cada fila después de agregar la anotación '@Unroll' al método de prueba (que tiene tablas de datos como entrada de datos).
#2) Ahora, entendamos cómo agregar información significativa a estas pruebas basadas en datos (en lugar de algunos índices agregados automáticamente como en la captura de pantalla anterior).
Podemos usar marcadores de posición para las propiedades de entrada y salida (según la tabla de datos) y luego podemos ver los valores rellenados en los nombres de las pruebas con datos de las tablas de datos.
Usemos el mismo ejemplo y actualicemos el nombre de la prueba para obtener datos de la entrada y la salida esperada como se menciona en las tablas de datos:
|_+_|Ahora veamos cómo se ve la salida en la terminal y los informes basados en HTML:
Entonces, como puede ver aquí, los datos de entrada y salida ahora se muestran junto con los nombres de prueba cuando se ejecutan. De esta manera, facilita la resolución de problemas y la depuración, ya que indica claramente qué entrada causó que la prueba fallara o se comportara mal.
Conclusión
En este tutorial, aprendimos cómo escribir pruebas parametrizadas con el marco Spock. También discutimos varias características de las tablas de datos y cómo se pueden usar.
¡Mira nuestro próximo tutorial para saber cómo usar Mocks y Stubs con Spock!
PREV Tutorial | SIGUIENTE Tutorial
Lectura recomendada
- Escribir pruebas unitarias con Spock Framework
- Preguntas de la entrevista de Spock con respuestas (las más populares)
- Spock para pruebas funcionales y de integración con selenio
- Spock Mocking and Stubbing (ejemplos con tutoriales en video)
- Tutorial de Spock: Prueba con Spock y Groovy
- Marco basado en datos en Selenium WebDriver usando Apache POI
- Cómo realizar pruebas basadas en datos con la herramienta TestComplete
- Cómo funcionan las pruebas basadas en datos (ejemplos de QTP y selenio)