step argument transformations specflow tables
Tutorial de tablas de flujo de especificación y transformaciones de argumentos de paso:
Nuestro tutorial anterior de Specflow nos informó sobre Reutilización de enlaces, ganchos y pasos compartidos y con ámbito en detalle. Aquí, en este tutorial, exploraremos más acerca de las transformaciones de argumentos de paso en Specflow.
Siéntase libre de leer nuestro Guía completa de formación Specflow para principiantes para una comprensión clara del concepto. La función de transformación de argumento de paso de Specflow permite al usuario proporcionar una transformación personalizada para los parámetros proporcionados en los pasos.
Permite agregar lógica personalizada para convertir parámetros de entrada en un parámetro específico. Por ejemplo, puede crear directamente un objeto de clase a partir de los parámetros y devolver el objeto construido desde la función de transformación.
Otra característica de Specflow que veremos son las Tablas de Specflow que permiten pasar datos de entrada en forma tabular con un solo paso y los ayudantes de Tabla pueden mapearlos directamente a una instancia de Objeto como se desee.
Ver el vídeo:
Aquí hay un video tutorial sobre Transformaciones de argumentos de paso y tablas Specflow:
Lo que vas a aprender:
Transformaciones de argumentos de paso
Para comprender mejor las transformaciones de argumentos, primero intentemos averiguar cómo coincide exactamente Specflow con los parámetros. Como hemos visto en nuestros artículos anteriores, para el ejemplo de búsqueda de YouTube, pasamos el término de búsqueda como un parámetro para que se ejecute el escenario.
La coincidencia de parámetros generalmente ocurre a través de una expresión regular y la expresión regular coincidente da como resultado la configuración del parámetro del método en el término de búsqueda proporcionado en el paso.
Primero intentemos comprender cuáles son las conversiones admitidas por defecto en Specflow y cuándo las transformaciones de argumentos pueden ser útiles.
Conversiones admitidas
Specflow admite muchas conversiones listas para usar, al observar el tipo de datos después de la coincidencia de expresiones regulares. Puede encargarse automáticamente de conversiones como: cadena, entero, GUID, enumeraciones, etc.
Veamos un ejemplo de algunos de estos a continuación:
|_+_|En el ejemplo de código anterior, hemos resaltado diferentes tipos de entrada que estamos pasando en los Pasos, y en las implementaciones de los pasos, estos se están convirtiendo a los respectivos tipos de datos.
Veamos las implementaciones de pasos para estos a continuación (para simplificar, acabamos de hacer una consola para cada uno de los pasos para ilustrar que el argumento proporcionado se convierte automáticamente al tipo esperado):
|_+_|Al ejecutar el escenario anterior, la salida imprime todos los valores correctamente indicando que la conversión automática de argumentos a los tipos de datos esperados fue exitosa.
Así es como se ve la salida:
|_+_|Transformaciones de argumentos
Veamos un ejemplo en acción para entender esto. Soporte, tienes una aplicación que convierte el tiempo dado y lo convierte en minutos. Ejemplo: Si la entrada del usuario es 1 día, la salida es 1440, si la entrada del usuario es 1 día 2 horas 2 minutos, la salida debe ser 1562.
Ahora, se puede ver que para admitir diferentes tipos de entradas, se necesitará escribir diferentes implementaciones de enlace según el tipo de entradas. Por ejemplo: Para las entradas que solo tengan una franja horaria, habrá una implementación de paso separada, para las entradas que tengan una parte de día, mes, habrá una implementación de paso separada, etc.
Veamos cómo se puede implementar esto a través de una implementación de un solo paso a través de la transformación de argumento de paso y la entrada proporcionada simplemente se convierte en un objeto de marca de tiempo y se devuelve al paso original que se denomina transformación de paso.
Piense en ello como un escaneo de expresiones regulares de primer nivel a su entrada que devuelve el valor parcialmente transformado al paso de llamada.
Mire el archivo de características que tiene 3 variantes de entrada diferentes, con una sola transformación convirtiéndolo en un objeto de intervalo de tiempo completo y regresando.
|_+_|Mire los valores resaltados en el ejemplo de código anterior. Todos estos se encargarán de la misma transformación exacta y el resultado final será un valor de entrada TimeSpan transformado que se envía de vuelta al Paso Specflow que llama.
Veamos la implementación de la Transformación a continuación:
|_+_|Para que el marco sepa que se trata de un enlace de transformación, se debe agregar el atributo StepArgumentTransformation al método que implementa la conversión de Argument.
Los otros puntos importantes que deben tenerse en cuenta con respecto a las conversiones de argumentos son:
#1) Las transformaciones de argumentos de paso se ejecutan para cada paso coincidente, es decir, independientemente del tipo de paso, es decir, si se da, cuándo o entonces, la transformación ocurrirá para cada expresión regular coincidente.
#2) Dependiendo del tipo de retorno de la salida transformada, si el paso de llamada real no tiene el tipo de retorno correspondiente para el parámetro de entrada, la transformación no se llevará a cabo.
Lo que esto significa es que, suponga que el paso de llamada requiere una entrada transformada pero tiene la marca de tiempo de entrada mencionada como algo que no coincide con el tipo de retorno del método transformado, entonces la coincidencia de expresiones regulares se anulará y la conversión no se llevará a cabo.
Veamos la implementación de llamar al paso 'Dado':
|_+_|Mire el tipo de parámetro de entrada aquí, es decir, su TimeSpan, que coincide con el tipo devuelto por el paso de transformación si se cambia a otro tipo. Por ejemplo, String, entonces la conversión de argumentos no ocurrirá y la coincidencia de regex será anulada por la implementación de Step original.
Consejo profesional: Un punto importante a tener en cuenta aquí es que todo el texto que necesita ser transformado debe ser alimentado / emparejado a través de la transformación paso a paso. Por lo tanto, el paso Dado ahora ajustará todos los formatos de entrada posibles en una sola cadena y la expresión regular de transformación lo convertirá en un objeto TimeSpan y regresará.Tablas Specflow
Las tablas de Specflow son una forma de pasar una lista de los valores a la función de implementación del paso. En nuestros artículos anteriores, analizamos la forma de implementar pruebas basadas en datos utilizando el esquema del escenario y los ejemplos. Pero eso fue principalmente para ejecutar el escenario con diferentes entradas.
Aquí, en las tablas, se trata de pasar todos los datos a la vez en forma tabular a la implementación del paso que proporciona los datos.
Por ejemplo, considere un ejemplo en el que está probando un sistema de gestión de estudiantes y, para crear un nuevo objeto de estudiante, se le solicita que complete muchos detalles como nombre, apellido, edad, año de nacimiento, etc.
Una forma es pasar cada una de esta información como un Paso separado que será esencialmente una gran cantidad de código repetitivo y en cada paso, terminará actualizando el mismo objeto que debe probarse. Otra forma puede ser construir una expresión regular compleja e intentar pasar todos los datos en el mismo paso, pero es bastante propenso a errores y poco convincente.
Las tablas vienen aquí a nuestro rescate. Todos los datos de entrada relacionados con el estudiante se pueden enviar a la implementación del mismo paso de una manera tabular agradable a través de la función de tabla de specflow.
Veamos un ejemplo de código a continuación para la implementación de funciones y pasos:
|_+_|Los datos de la tabla se resaltan en el paso del escenario anterior.
cómo abrir un frasco con java
Specflow proporciona una gran cantidad de TableHelpers, que permiten directamente funciones útiles como crear una instancia de objeto a partir de los datos de entrada proporcionados por el usuario en lugar de analizar cada campo por su cuenta.
Veamos la implementación del paso a continuación:
|_+_|Mire la sección resaltada arriba. Aquí hay solo una pequeña línea de código, el objeto StudentInfo completo (que es un POCO que contiene los campos de datos del estudiante, es decir, nombre, apellido, edad, año de nacimiento, etc.)
Algunas otras características / conceptos relacionados con las tablas de Specflow se muestran a continuación:
#1) Las tablas pueden ser horizontales o verticales. Las tablas verticales son más como pares clave-valor y en el escenario anterior más como asignaciones de nombre-valor, mientras que las tablas horizontales contienen todos los datos de un objeto en una sola fila (como vimos en nuestro ejemplo).
#2) Las tablas verticales se pueden asignar a un solo objeto .NET, mientras que las tablas horizontales también se pueden asignar a un conjunto o colección de objetos.
#3) Cada valor de campo en la tabla debe ser atómico, ya que se asignará a un solo campo correspondiente en el objeto analizado.
Un punto importante a tener en cuenta aquí es que incluso si autogenerar enlaces por pasos con los datos tabulares, el generador de enlaces Specflow automáticamente contabilizará dichos tipos de entrada y los reconocerá como datos tabulares válidos.
Conclusión
En este artículo, intentamos explicar 2 conceptos importantes y útiles en Specflow.
El primer paso es el Paso Transformaciones de argumentos que permiten conversiones de tipos personalizados para argumentos de Specflow para evitar el código repetitivo (y permite que el script de prueba parezca más modular y lógico) y la segunda característica que analizamos es Tablas Specflow que son útiles cuando necesita pasar muchos campos / datos en un solo paso en un formato tabular fácil de usar.
En nuestro próximo tutorial, aprenderemos más sobre cómo puede generar automáticamente documentación hermosa usando Specflow en diferentes formatos usando herramientas de código abierto como Pickles que pueden servir como una referencia fácil para todas las partes interesadas del proyecto.
PREV Tutorial | SIGUIENTE Tutorial
Lectura recomendada
- Implementación en MongoDB: tutorial paso a paso
- Instalación y configuración paso a paso de Appium Studio
- Ejemplo de extremo a extremo de Specflow y Selenium Webdriver
- Una guía paso a paso para integrar QTP con ALM / QC
- Las 15 preguntas más populares de la entrevista de Specflow
- Enlaces, ganchos y reutilización de pasos compartidos y con ámbito de Specflow avanzados
- Instale MongoDB en Windows: una guía paso a paso
- Cómo integrar JIRA con qTest: una guía paso a paso