Articles

Tutorial de Specflow: La Guía Definitiva de la Herramienta BDD

Una Guía Completa de Specflow y Desarrollo Impulsado por el Comportamiento (BDD) Tutorial:

¿Qué es Specflow?

Specflow es un marco de pruebas que admite prácticas BDD en.NET framework. Es un framework de código abierto alojado en GitHub. Ayuda en el uso de ATDD (Desarrollo de controladores de prueba de aceptación) para aplicaciones. NET. Con esto, podemos definir el escenario en un inglés sencillo definido por un lenguaje de pepinillos que sea claramente comprensible para cualquier persona.

Hay varias herramientas para escribir pruebas en el enfoque BDD, como Cucumber/JBehave para Java, Lettuce para Python, Jasmine para Javascript, Specflow para .NET.

Specflow y BDD

El BDD (Desarrollo impulsado por el comportamiento) es un conjunto de prácticas o un enfoque similar al TDD (Desarrollo impulsado por pruebas), que tiene como objetivo cerrar la brecha de comunicación entre Probadores.

El objetivo final del enfoque BDD es crear requisitos de negocio que puedan ser entendidos por todo el equipo para evitar malentendidos, y ayuda a enviar la característica que se está desarrollando de la manera más aceptable.

Una Serie Completa de Tutoriales de Specflow:

Lea la Serie Completa de Capacitación de Specflow para comprender mejor el concepto.

Tutorial #1: Introducción a la Herramienta Specflow BDD (Este Tutorial)
Tutorial #2: Ejemplo de Specflow y Selenio
Tutorial #3: Enlace de Specflow & Conceptos avanzados
Tutorial #4: Transformaciones de argumentos de paso & Tablas Specflow
Tutorial #5: Documentación Viva de Specflow con Pepinillos
Tutorial # 6: Generador de informes de Specflow
Tutorial #7: Preguntas de entrevista de Specflow

Una breve descripción de los tutoriales de la Serie Specflow:

Tutorial # Descripción
1 Introducción a Specflow BDD Herramienta (Este Tutorial)
Este tutorial de introducción explicará todo acerca de la Specflow en detalle. Specflow es un marco de pruebas que admite prácticas BDD en.NET framework. Es un framework de código abierto alojado en GitHub. Ayuda en el uso de ATDD (Desarrollo de controladores de prueba de aceptación) para aplicaciones. NET.
2 Ejemplo de Specflow y Selenium
Este tutorial se centrará en la Integración de Selenium con el marco de trabajo Specflow a través de un escenario de prueba simple de búsqueda de videos en la aplicación Youtube. También comprobará cómo compartir datos entre diferentes enlaces a través de campos de clase privada.
3 Ejemplo de Specflow y Selenium
Este tutorial se centrará en la Integración de Selenium con el marco de trabajo Specflow a través de un escenario de prueba simple de búsqueda de videos en la aplicación Youtube. También comprobará cómo compartir datos entre diferentes enlaces a través de campos de clase privada.
4 Transformaciones de argumentos de paso &Tablas de flujo de especulaciones
Este tutorial informativo de flujo de especulaciones expalin en detalle sobre las transformaciones de argumentos de paso que permiten conversiones de tipos personalizados para argumentos de flujo de especulaciones para evitar el código repetitivo y las tablas de flujo de especulaciones son útiles cuando necesita pasar muchos campos/datos en un solo paso en un formato tabular fácil de usar.
5 Documentación viva de Specflow con Pickles
En este tutorial de Specflow, aprenderá a generar documentación viva atractiva a través de un marco de código abierto llamado pickles utilizando sus archivos de Specflow existentes.
6 Generador de informes de Specflow
En este tutorial de informes de Specflow, aprenderá las formas de ejecutar pruebas de características de Specflow junto con la generación de informes HTML a través del ejecutable de Specflow.
7 Preguntas de entrevista de Specflow
En este tutorial se incluye una lista de las preguntas y respuestas de entrevista de Specflow más populares con ejemplos para que pueda descifrar cualquier entrevista de Specflow con éxito al primer intento.

Vamos a empezar con el primer tutorial de esta serie.

Introducción a la herramienta BDD de Flujo de Espectros

Vea el Video Tutorial:

Aquí hay un video tutorial sobre Flujo de Espectros y Desarrollo Impulsado por el Comportamiento:

Características de BDD

Las características clave de BDD se detallan a continuación:

#1) Intenta definir el comportamiento del sistema o característica que se está desarrollando a través de un ejemplo o escenario. Por ejemplo, si está construyendo una aplicación de calculadora simple, los diferentes comportamientos incluyen suma,multiplicación, división, etc.

Por lo tanto, a través de BDD, todos los interesados se reunirán primero para decidir el comportamiento de la aplicación, como la Adición, y tendrán escenarios como se muestra a continuación.

Given, I have 2 numbers 30 and 50 as inputWhen I add these 2 numbersThen I should get an output of 80

Si ve la representación anterior, es un escenario en inglés sencillo que es claramente comprensible para cualquier persona y hace que los requisitos para una característica sean claros (según los criterios de aceptación). Por lo tanto, el primer paso es articular estos requisitos.

#2) Ahora, con un conjunto de estos escenarios, el control de calidad escribe pruebas en función de estos y esto fallará inicialmente ya que la función aún no está desarrollada.

#3) Ahora, el desarrollador escribe un código de entidad y ejecuta estas pruebas de nuevo.

#4) Las pruebas pueden pasar o fallar. Si fallan, refactorice el código y repita el proceso

#5) Una vez que se complete la refactorización de código, todos los escenarios/pruebas deben pasar.

Por lo tanto, en esencia, BDD utiliza el enfoque TDD y lo lleva al siguiente nivel al tener algunas especificaciones comunes fácilmente comprensibles en forma de escenarios. También representan la documentación de la característica en sí misma.

Hay varias herramientas para escribir pruebas en el enfoque BDD como Cucumber/JBehave para Java, Lettuce para Python, Jasmine para Javascript, Specflow para .NET.

En este tutorial, nos centraremos en Specflow.

También Lee => Las mejores herramientas BDD y el marco de pruebas

Las palabras clave Dadas, Cuando & Luego

Desde el mundo de las pruebas unitarias, la mayoría de nosotros estamos familiarizados con 3 A, es decir, Organizar, Actuar y Afirmar. Ahora, Dado, Cuándo y Entonces son los reemplazos para estos en el mundo BDD.

Tomemos un ejemplo para entender cada uno de ellos. Supongamos que está enumerando un escenario para validar un producto que se agrega al carrito de compras de una aplicación de comercio electrónico que requiere que inicie sesión como requisito previo.

La especificación se puede escribir de la siguiente manera:

Scenario: Products get added to cart for a logged in customerGiven I have a logged-in customer on my applicationWhen I add 2 quantity of a product to my shopping cartThen the shopping cart should get updated and have the right product and quantity 

Dado: Esto se usa para describir un conjunto de precondiciones para el escenario que se está definiendo. Por ejemplo, en el ejemplo, el requisito previo del escenario es un cliente conectado. Por lo tanto, en comparación con la analogía de Arreglos en una prueba unitaria, la implementación de pasos deberá asegurarse de que haya un cliente conectado.

Cuando: Se usa para describir una acción o un paso de ejecución. En el ejemplo, muestra que el cliente está tratando de agregar un producto a su carrito de compras. Por lo tanto, la implementación del paso para este paso se encargará del código de simulación para agregar un producto al carrito. Esto se puede comparar con el paso Act en las pruebas unitarias.

Entonces: Se usa para describir el Resultado del escenario y, esencialmente, dónde se deben colocar las validaciones. Se puede comparar con el paso Assert en el mundo de las pruebas unitarias. En el ejemplo de aquí, la implementación de pasos afirmará si el producto se agregó realmente y la cantidad es la misma que la elegida por el cliente.

El archivo de características

El archivo de características es esencialmente una agrupación de múltiples escenarios para la aplicación en desarrollo o prueba. También se puede considerar simplemente como diferentes módulos de la aplicación mediante los cuales la aplicación se puede separar lógicamente.

Por ejemplo:

Una aplicación de comercio electrónico puede decidir tener diferentes archivos de características de alto nivel como:

  • Funcionalidad de inicio de sesión / Cierre de sesión
  • Carrito de compras
  • Pago, etc.

¿Qué es Specflow?

Specflow es una herramienta que admite prácticas BDD en. NET framework. Es un framework de código abierto alojado en GitHub. Ayuda en el uso de ATDD (Desarrollo de controladores de prueba de aceptación) para aplicaciones. NET.

Los requisitos comerciales vinculantes para una aplicación que utiliza el paradigma de Especificación Por ejemplo ayudan a comprender mejor el comportamiento de la aplicación por parte de todas las partes interesadas y, por lo tanto, resultan en el envío del producto con las expectativas correctas.

Hace uso de la sintaxis de pepinillo para crear escenarios de características &. También tiene un foro de discusión/desarrollo activo.

Specflow-Introducción

En esta sección, exploraremos la instalación de specflow en el IDE de Visual Studio y la creación de archivos de características para una aplicación de Utilidad de cadena simple.

Acerca de la aplicación de ejemplo

Ilustraremos diferentes características del framework Specflow en este tutorial utilizando una Aplicación de Calculadora que tiene funciones / interfaces para proporcionar diferentes operaciones como:

  1. Agregando 2 números.
  2. Restando 2 números.
  3. Dividir y multiplicar 2 números.
  4. Encontrar la raíz Cuadrada del número dado.

Guía de instalación de Specflow

La instalación de Specflow es un proceso de 2 pasos

#1) Instalar los complementos necesarios en el IDE de Visual Studio.

  • Para instalar el complemento specflow, vaya a Herramientas – > Extensión & Actualizaciones.
  • Ahora haga clic en «En línea» en el panel izquierdo.
  • Ahora busque specflow en el panel derecho.
  • En los resultados de búsqueda, seleccione «Flujo de espectros para Visual Studio 2017».

Instalación de Specflow-Plugin

#2) Configuración del proyecto con archivos de características y definiciones de pasos.

  • Cree un nuevo proyecto sencillo en Visual Studio. Podemos crear cualquier tipo de proyecto como Biblioteca de clases / Aplicación de consola / Proyecto de prueba de unidad, etc. Para simplificar, estamos llevando a cabo un proyecto de Biblioteca de Clases. Nombre el proyecto como «SpecflowBasic».
  • Para ejecutar los escenarios de flujo de espectros que vamos a crear, necesitamos un ejecutor de pruebas. Specflow proporciona un corredor listo para usar llamado Specflow + Runner (que es una versión de pago y la versión gratuita introduce un retraso).

(Otros corredores también están disponibles para NUnit y MSTest, que veremos en los artículos adicionales de esta serie).

Para instalar Specflow + Runner – Vaya a Herramientas -> NuGet Package Manager -> Consola del Administrador de Paquetes.

Una vez que se abra la Consola del Administrador de paquetes, ejecute el comando.

 Install-Package SpecRun.SpecFlow

Specrun-Installation

  • Además, para afirmar los valores, necesitaremos la ayuda de un marco de prueba. NUnit puede ser una de las opciones y las otras incluyen MSTest, etc. Para instalar el marco NUnit en la aplicación, abra la consola del Administrador de paquetes y escriba el comando.
 Install-Package NUnit 

#3) Cree una nueva clase llamada «CalculatorApplication» que se convertirá en nuestra aplicación en prueba. Esta es una clase simple que tiene funciones para realizar suma / multiplicación/división / raíz cuadrada, etc. para la entrada dada. Así es como se ve la clase de aplicación Calculator.

#4) Una vez instalado el paquete, cree 2 carpetas en el proyecto y nómbrelas como Características y Definiciones de pasos para almacenar los archivos de características y los enlaces de pasos, respectivamente. Discutiremos en detalle la razón de esta organización de carpetas para las definiciones de pasos de la característica &.

#5) Ahora en la carpeta de características, agregue un nuevo archivo de características y asígnele el nombre de CalculatorFeature.

Función de calculadora

Verá que, de forma predeterminada, el archivo de función tiene alguna descripción en Función y Escenario.

Reemplace eso con lo que vamos a probar.

 Feature: CalculatorFeatureIn order to test my applicationAs a developerI want to validate different operations of the applicationScenario: Add two numbersGiven I have provided 70 and 20 as the inputsWhen I press addThen the result should be 90Scenario: Substract two numbersGiven I have provided 70 and 20 as the inputsWhen I press substractThen the result should be 50Scenario: Multiply two numbersGiven I have provided 70 and 20 as the inputsWhen I press multiplyThen the result should be 1400Scenario: Divide two numbersGiven I have provided 70 and 20 as the inputsWhen I press divideThen the result should be 3.5Scenario: SquareRoot of numberGiven I have provided 70 as inputWhen I press squarerootThen the result should be 8.37

#6) Generación de definiciones de pasos: Specflow proporciona una forma automatizada de generar enlaces/implementación para los diferentes pasos en escenarios de archivos de características. Esto se puede lograr haciendo clic con el botón derecho en el archivo de características y haciendo clic en «Generar definiciones de pasos».

Generar Definición de paso

Este paso no garantiza una implementación para todos los pasos, pero hace todo lo posible para agrupar los pasos comunes en escenarios y reutilizar tantos enlaces como pueda. Sin embargo, hace el trabajo de evitar el código repetitivo cada vez que se necesita implementar un paso de escenario.

Después de hacer clic en «Generar definiciones de pasos», aparecerá una ventana con una lista de las implementaciones de pasos identificadas que el procesador ha detectado. Se puede seleccionar o deseleccionar según los requisitos.

Generar Esqueleto de definición de paso

En las secciones posteriores, veremos más detalles sobre el menú desplegable de estilo que se muestra en la captura de pantalla anterior.

Por ahora, mantengamos todos ellos seleccionados con la configuración predeterminada. Al hacer clic en la vista previa, se mostrará una instantánea de cómo se verá la implementación.

Instantánea de la implementación

Después de crear definiciones de pasos, aún así, si hay algunos pasos sin implementar, los archivos de características tienen una forma visual de identificar las aplicaciones no implementadas. Muestra esos pasos en un color diferente al hacer que sea absolutamente sencillo saber que hay algunos pasos que aún no tienen una implementación (o que tienen definiciones de pasos ambiguas).

Una Pantalla de ejemplo Muestra esto A continuación:

Implementación faltante

Nota: Las definiciones de pasos también se pueden crear manualmente, Cualquiera .cs file having Attribute es una clase de implementación de pasos y la sintaxis de Pepinillo buscará que coincida con la implementación del escenario dado step

Execution

Como ya hemos agregado Specflow+ Runner en la sección anterior, ejecutar los escenarios es bastante sencillo (ya que es una versión de evaluación de Specrun, introduce un retraso variable de 10 a 20 segundos antes de que se ejecuten los escenarios. , Este retraso no está presente para variantes registradas y otros sabores de Specrun runner como NUnit y MSTest).

Si no se han implementado todos los pasos y si todavía hay enlaces que tienen un estado pendiente. A continuación, la salida se mostrará como pendiente.

Intentemos ejecutar estas pruebas / escenarios en este punto cuando no hay implementación para los enlaces, y todos los escenarios están pendientes.

Escenarios pendientes

Ahora intentemos implementar la clase CalculatorApplication con los métodos que queremos probar, es decir, sumar, restar, multiplicar, dividir y sqrt.

A continuación se muestra un ejemplo de código de cómo se ve nuestra clase CalculatorApplication:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SpecflowBasic { class CalculatorApplication { public int add(int input1, int input2) { return input1 + input2; } public int subsctract(int input1, int input2) { return input1 - input2; } public int multiply(int input1, int input2) { return input1 * input2; } public double divide(double input1, double input2) { return input2 != 0 ? Math.Round(input1 / input2, 2) : 0; } public double squareRoot(int input1) { return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0; } } } 

Una vez que la aplicación esté lista, intentemos averiguar las formas de implementar los enlaces para cada uno de los pasos del escenario.

Veamos el enfoque paso a paso para implementar estos:

  • Primero, necesitamos tener una instancia de la aplicación que necesita ser probada. Para simplificar, podemos crear instancias de AUT (Aplicación Bajo clase de prueba) en enlaces de pasos y usar la instancia instanciada para llamar a diferentes métodos/funciones según el paso implementado.
  • Para capturar la entrada y la salida, estamos declarando variables para mantener estos valores con el fin de llamar a funciones en la instancia de la aplicación.

Veamos la implementación de extremo a extremo para todos los enlaces involucrados en la validación de la funcionalidad Add (el resto de los escenarios simplemente están extendiendo esto).

El escenario de adición se ve como se muestra a continuación:

Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should 

Veamos la implementación de pasos para cada uno de estos pasos individuales. Para el uso de todas las implementaciones de pasos, estamos declarando una instancia de Aplicación bajo prueba, así como variables para mantener variables de entrada y salida como se muestra a continuación:

// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output; 

Veamos la implementación de pasos de escenario uno por uno.

Paso 1: Dado que he proporcionado 70 y 20 como entradas.

 public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; } 

Aquí, acabamos de inicializar las variables de entrada con los valores pasados de los pasos del escenario. p0 y p1 son los valores que se pasan desde el paso del escenario y se inicializarán como 70 & 20 respectivamente.

Paso 2: Cuando presiono agregar.

 public void WhenIPressAdd() { output = app.add(input1, input2); } 

Este es el paso de ejecución (o Acto) donde se llama al método real en la Aplicación bajo prueba. Tenga en cuenta que, dado que las variables de entrada input1 e input2 ya contienen los valores pasados en el paso 1, la instancia de la aplicación puede llamar al método con estas variables.

Paso 3: – Entonces el resultado debe ser 90.

 public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }

Este es el paso de validación (o Afirmación) en el que la llamada al método genera la salida y la instancia de aplicación se valida contra la salida esperada.

Tenga en cuenta que la palabra clave Assert utilizada es de NUnit Framework, que devuelve verdadero o falso dependiendo de la validación/expectativa que se establezca. En caso de que devuelva false, hará que la implementación de pasos falle y mostrará el resultado del escenario como error.

Además, tenga en cuenta que la variable de salida obtiene el valor del paso anterior en el que se llamó al método real en la instancia de la aplicación.

Similar a lo anterior, las implementaciones de pasos para el resto de los pasos del escenario se realizan de la misma manera, la diferencia está en llamar a diferentes métodos en la instancia de la aplicación y afirmar diferentes valores de salida.

Una vez que se implementan todos los pasos del escenario, se pueden ejecutar las pruebas.

La salida resultante se verá como se muestra a continuación:

Salida consolidada

También puede ver la salida del escenario individual que enumera la salida de los pasos individuales también:

Salida del escenario

Conclusión

Espero que este artículo le haya dado una comprensión básica de lo que es BDD y cuáles son las herramientas que admiten BDD para.NET en las que cubrimos Specflow.

También discutimos la instalación y ejecución de archivos de características Specflow con la ayuda de una aplicación de ejemplo.

Archivos de código

Los archivos de código utilizados en la aplicación se muestran a continuación:

Pasos de la función del calculador.cs

using System;using TechTalk.SpecFlow;using NUnit;using NUnit.Framework;namespace SpecflowBasic.StepDefinitions{public class CalculatorFeatureSteps{// instantiating application instanceCalculatorApplication app = new CalculatorApplication();// variables to hold input values and the intermeditate resultint input1, input2;double output;public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1){input1 = p0;input2 = p1;}public void GivenIHaveProvidedAsInput(int p0){input1 = p0;}public void WhenIPressAdd(){output = app.add(input1, input2);}public void WhenIPressSubstract(){output = app.subsctract(input1, input2);}public void WhenIPressMultiply(){output = app.multiply(input1, input2);}public void WhenIPressDivide(){output = app.divide(input1, input2);}public void WhenIPressSquareroot(){output = app.squareRoot(input1);}public void ThenTheResultShouldBe(double p0){Assert.AreEqual(p0, output);}}} 

Aplicación del calculador.cs

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SpecflowBasic{class CalculatorApplication{public int add(int input1, int input2){return input1 + input2;}public int subsctract(int input1, int input2){return input1 - input2;}public int multiply(int input1, int input2){return input1 * input2;}public double divide(double input1, double input2){return input2 != 0 ? Math.Round(input1 / input2, 2) : 0;}public double squareRoot(int input1){return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0;}}} 

paquetes.config

<?xml version="1.0" encoding="utf-8"?><packages><package version="10.0.3" targetFramework="net461" /><package version="3.11.0" targetFramework="net461" /><package version="2.4.0" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="4.3.0" targetFramework="net461" /></packages>

Nuestro próximo tutorial le informará sobre un ejemplo completo de uso de Specflow y Selenium Webdriver.

SIGUIENTE tutorial