specflow tutorial ultimate guide bdd tool
Una guia completa sobre el tutorial de desenvolupament de fluxos d'especificacions i comportament (BDD):
Què és Specflow?
Specflow és un marc de proves que admet pràctiques de BDD en .NET framework. És un marc de codi obert allotjat a GitHub. Ajuda a utilitzar ATDD (Acceptance test driver development) per a aplicacions .NET. Amb això, podem definir un escenari en anglès senzill definit pel llenguatge gherkiní que sigui clarament comprensible per tothom.
Hi ha diverses eines per escriure proves a l’enfocament BDD com Cucumber / JBehave for Java, Lettuce for Python, Jasmine for Javascript, Flux d’especificacions per a .NET.
BDD (Desenvolupament impulsat pel comportament) és un conjunt de pràctiques o un enfocament semblant al TDD (Test Driven Development), que té com a objectiu salvar la bretxa comunicativa entre diferents grups d'interès com Producte, Desenvolupadors i Testers.
L’objectiu final de l’enfocament BDD és crear requisits empresarials que tot l’equip pugui entendre per evitar malentesos i que ajudi a enviar la característica que es desenvolupa de la manera més acceptable.
Una sèrie completa de tutorials de Specflow:
Llegiu el document Sèrie d'entrenament completa de Specflow per a una millor comprensió del concepte.
Tutorial # 1: Introducció a l'eina Specflow BDD (Aquest tutorial)
Tutorial # 2: Specflow i Exemple de seleni
Tutorial # 3: Specflow Binding i conceptes avançats
Tutorial # 4: Transformacions d'arguments de pas i taules de flux de dades
Tutorial # 5: Documentació vital Specflow amb adobats
Tutorial # 6: Generador d'informes Specflow
Tutorial # 7: Preguntes sobre l'entrevista Specflow
Una breu descripció general dels tutorials de la sèrie Specflow:
tutorial # | Descripció |
---|---|
7 | Preguntes sobre l'entrevista Specflow En aquest tutorial s'inclou una llista de les preguntes i respostes més freqüents de les entrevistes Specflow amb exemples per trencar qualsevol entrevista Specflow amb èxit al primer intent. |
1 | Introducció a l'eina Specflow BDD (Aquest tutorial) Aquest tutorial introductori us explicarà detalladament tot sobre Specflow. Specflow és un marc de proves que admet pràctiques de BDD en .NET framework. És un marc de codi obert allotjat a GitHub. Ajuda a utilitzar ATDD (Acceptance test driver development) per a aplicacions .NET. |
2 | Specflow i Exemple de seleni Aquest tutorial se centrarà en la integració de Selenium amb el marc Specflow mitjançant un escenari de prova senzill de cerca de vídeo a l'aplicació Youtube. També comprovareu com compartir dades entre diferents enllaços a través de camps de classes privades. |
3 | Specflow i Exemple de seleni Aquest tutorial se centrarà en la integració de Selenium amb el marc Specflow mitjançant un escenari de prova senzill de cerca de vídeo a l'aplicació Youtube. També comprovareu com compartir dades entre diferents enllaços a través de camps de classes privades. |
4 | Transformacions d'arguments de pas i taules de flux de dades Aquest tutorial informatiu de Specflow explicarà detalladament sobre les transformacions d’arguments de pas que permeten fer conversions de tipus personalitzades per a arguments de Specflow per evitar el codi de la caldera i les taules de Specflow són útils quan cal passar molts camps / dades en un sol pas en un tabular fàcil d’utilitzar. format. |
5 | Documentació vital Specflow amb adobats A partir d’aquest tutorial de Specflow podreu conèixer com generar una documentació de vida atractiva a través d’un marc de codi obert anomenat escabetxos mitjançant els fitxers Specflow existents. |
6 | Generador d'informes Specflow En aquest tutorial d'informes de Specflow, aprendreu les maneres d'executar les proves de característiques Specflow juntament amb la generació d'informes HTML mitjançant l'executable Specflow. |
Comencem pel primer tutorial d'aquesta sèrie.
Què aprendreu:
Introducció a l'eina Specflow BDD
Mireu el vídeo tutorial:
Aquí teniu un vídeo tutorial sobre Specflow i Behavior Driven Development:
Característiques de BDD
A continuació es detallen les característiques clau de BDD:
# 1) Intenta definir el comportament del sistema o característica que s'està desenvolupant a través d'un exemple o escenari. Per exemple, si esteu creant una aplicació de calculadora simple, els diferents comportaments inclouen la suma, la multiplicació, la divisió, etc.
Per tant, a través de BDD, tots els grups d'interès es reuniran primer per decidir el comportament de l'aplicació com Addition i tindran els escenaris que es mostren a continuació.
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80
Si veieu la representació anterior, es tracta d’un escenari en anglès senzill que tothom pot entendre i que fa que els requisits d’una funció siguin clars (segons els criteris d’acceptació). Per tant, el primer pas és articular aquests requisits.
# 2) Ara, amb un conjunt d’aquests escenaris, el control de qualitat escriu proves contra aquests i inicialment fallarà ja que la característica encara no està desenvolupada.
# 3) Ara, el desenvolupador escriu un codi de funcions i torna a executar aquestes proves.
# 4) Les proves poden superar o fracassar. Si fallen, refacteu el codi i repetiu el procés
# 5) Un cop s'hagi completat la refactorització de codi, hauran de passar tots els escenaris / proves.
Per tant, en essència, BDD utilitza l'enfocament TDD i el porta al següent nivell en tenir algunes especificacions comunes fàcilment comprensibles en forma d'escenaris. També representen la documentació de la característica en si mateixa.
Hi ha diverses eines per escriure proves en l'enfocament BDD, com Cucumber / JBehave for Java, Lettuce for Python , Gessamí per a Javascript, Flux d’especificacions per a .NET.
millor eliminació gratuïta de programari maliciós per a Windows 7
En aquest tutorial, ens centrarem en Specflow.
Llegiu també => Principals marcs d'eines i proves BDD
Les paraules clau: donades, quan i després
Des del món de les proves d’unitats, la majoria de nosaltres coneixem les 3 A, és a dir, Arranja, Actua i Afirma. Ara, donat, quan i llavors són els substituts d’aquestes en el món BDD.
Prenem un Exemple per entendre cadascun d’aquests. Suposem que enumereu un escenari per validar un producte que s’afegeix al carret de la compra d’una aplicació de comerç electrònic que requereix que hàgiu iniciat la sessió com a requisit previ.
L'especificació es pot escriure de la següent manera:
Scenario: Products get added to cart for a logged in customer Given I have a logged-in customer on my application When I add 2 quantity of a product to my shopping cart Then the shopping cart should get updated and have the right product and quantity
Donat :S'utilitza per descriure un conjunt de condicions prèvies per a l'escenari que s'està definint. Per exemple, a l’exemple, el requisit previ de l’escenari és un client que hagi iniciat la sessió. Per tant, es compara amb el Organitzar per analogia en una prova unitària, la implementació del pas haurà de garantir que hi hagi un client connectat.
Quan :S'utilitza per descriure una acció o un pas d'execució. A l'exemple, es mostra que el client intenta afegir un producte al seu carret de la compra. Per tant, la implementació del pas per a aquest pas s'encarregarà del codi de simulació per afegir un producte al carretó. Això es pot comparar amb el Act pas a les proves d’unitat.
Llavors :S'utilitza per descriure el resultat de l'escenari i, bàsicament, on s'han de col·locar les validacions. Es pot comparar amb el Afirmar pas al món de les proves d’unitats. A l'exemple aquí, la implementació del pas afirmarà si el producte s'ha afegit realment i la quantitat és la mateixa que ha escollit el client.
El fitxer de funcions
El fitxer de funcions és essencialment una agrupació de múltiples escenaris per a l'aplicació en desenvolupament o prova. També es pot considerar simplement com a diferents mòduls de l'aplicació mitjançant els quals es pot separar lògicament l'aplicació.
Per exemple:
Una aplicació de comerç electrònic pot decidir tenir diferents fitxers de funcions d'alt nivell com:
- Funcionalitat d’inici de sessió / tancament de sessió
- Carret de compra
- Pagament, etc.
Què és Specflow?
Specflow és una eina que admet pràctiques BDD en .NET framework. És un marc de codi obert allotjat a GitHub. Ajuda a utilitzar ATDD (Acceptance test driver development) per a aplicacions .NET.
Els requisits empresarials vinculants per a una aplicació que utilitza el paradigma Especificació per exemple ajuda a una millor comprensió del comportament de l’aplicació per part de totes les parts interessades i, per tant, permet enviar el producte amb les expectatives correctes.
Fa ús de Cogombre sintaxi per crear funcions i escenaris. També té un debat / desenvolupador actiu fòrum .
Specflow - Introducció
En aquesta secció, explorarem la instal·lació de specflow al Visual Studio IDE i la creació de fitxers de funcions per a una aplicació senzilla d’utilitat de cadenes.
Quant a l'aplicació de mostra
Il·lustrarem diferents característiques del marc Specflow en aquest tutorial mitjançant una aplicació de calculadora que té funcions / interfícies per proporcionar diferents operacions com:
- Suma 2 números.
- Restant 2 nombres.
- Dividint i multiplicant 2 nombres.
- Trobar l’arrel quadrada del número donat.
Flux d’especificacions Guia d'instal·lació
La instal·lació de Specflow és un procés de dos passos
# 1) Instal·lació dels connectors necessaris a l'IDE de Visual Studio.
- Per instal·lar el connector specflow, aneu a Eines -> Extensió i actualitzacions.
- Ara feu clic a 'En línia' al tauler esquerre.
- Ara cerqueu el flux de dades al tauler dret.
- Seleccioneu 'Specflow for Visual Studio 2017' als resultats de la cerca.
# 2) Configuració del projecte amb fitxers de funcions i definicions de passos.
- Creeu un projecte nou i senzill a Visual Studio. Podem crear qualsevol tipus de projecte, com ara Biblioteca de classes / Aplicacions de consola / Projecte de prova d’unitat, etc. Per simplificar, estem prenent un projecte de Biblioteca de classes. Anomeneu el projecte com a 'SpecflowBasic'.
- Per executar els escenaris de Specflow que crearem, necessitem un corredor de prova. Specflow proporciona un corredor fora de la caixa anomenat Specflow + Runner (que és una versió de pagament i la versió gratuïta introdueix un retard).
(Altres corredors també estan disponibles per a NUnit i MsTest, que veurem en els articles següents d'aquesta sèrie).
Per instal·lar Specflow + Runner - Aneu a Eines -> NuGet Package Manager -> Package Manager Console.
Un cop s'obri la consola del gestor de paquets, executeu l'ordre.
Install-Package SpecRun.SpecFlow
- A més, per afirmar els valors, necessitarem l’ajut d’un marc de prova. NUnit pot ser una de les opcions i les altres inclouen MsTest, etc. Per instal·lar el framework NUnit a l'aplicació, obriu la consola del gestor de paquets i escriviu l'ordre.
Install-Package NUnit
# 3) Creeu una nova classe anomenada 'CalculatorApplication' que es convertirà en la nostra aplicació en prova. Aquesta és una classe senzilla que té funcions per realitzar addició / multiplicació / divisió / arrel quadrada, etc., per a l'entrada donada. Així és com es veu la classe CalculatorApplication.
# 4) Un cop instal·lat el paquet, creeu 2 carpetes al projecte i anomeneu-les com a funcions i definicions de passos per emmagatzemar els fitxers de funcions i les vinculacions de passos respectivament. Analitzarem detalladament el motiu d'aquesta organització de carpetes per a les definicions de funcions i passos.
# 5) Ara, a la carpeta de funcions, afegiu un fitxer de funcions nou i nomeneu-lo com a CalculatorFeature.
Veureu que per defecte el fitxer de funcions té alguna descripció a Funció i escenari.
Substitueix això pel que anem a provar.
Feature: CalculatorFeature In order to test my application As a developer I want to validate different operations of the application Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should be 90 Scenario: Substract two numbers Given I have provided 70 and 20 as the inputs When I press substract Then the result should be 50 Scenario: Multiply two numbers Given I have provided 70 and 20 as the inputs When I press multiply Then the result should be 1400 Scenario: Divide two numbers Given I have provided 70 and 20 as the inputs When I press divide Then the result should be 3.5 Scenario: SquareRoot of number Given I have provided 70 as input When I press squareroot Then the result should be 8.37
# 6) Generació de definicions de passos: Specflow proporciona una manera automatitzada de generar vinculacions / implementació per als diferents passos dels escenaris de fitxers de característiques. Per aconseguir-ho, feu clic amb el botó dret al fitxer de funcions i feu clic a 'Genera definicions de pas'.
Aquest pas no garanteix una implementació per a tots els passos, però s’esforça al màxim per agrupar els passos habituals en escenaris i reutilitzar tantes combinacions com pugui. Tanmateix, fa la feina d'evitar el codi de la caldera cada vegada que cal implementar un pas d'escenari.
Després de fer clic 'Genera definicions de pas' , Es mostrarà una finestra on s'indiquen les implementacions de passos identificats que el processador ha detectat. Es pot seleccionar o deseleccionar segons els requisits.
A les seccions posteriors, examinarem més detalls sobre el menú desplegable Estil que es mostra a la captura de pantalla anterior.
De moment, mantenim-los seleccionats amb la configuració predeterminada. En fer clic a la vista prèvia es mostrarà una instantània de com serà la implementació.
Després de crear definicions de pas, encara que hi hagi alguns passos no implementats, els fitxers de funcions tenen una manera visual d’identificar les aplicacions no implementades. Mostra aquests passos amb un color diferent, fent que sigui absolutament senzill saber que hi ha alguns passos que encara no tenen una implementació (o que tenen definicions de passos ambigües).
Una pantalla de mostra mostra el següent:
Nota: Les definicions de pas també es poden crear manualment: qualsevol fitxer .cs que tingui l'atribut (Binding) és una classe d'implementació de passos i la sintaxi de Gherkin buscarà que coincideixi amb la implementació del pas de l'escenari donat.
Execució
Com ja hem afegit Specflow + Runner a la secció anterior, executar els escenaris és bastant senzill (ja que es tracta d’una versió d’avaluació de Specrun, introdueix un retard variable de 10-20 segons abans que s’executin els escenaris. Aquest retard no és present per a les variants registrades i altres sabors del corredor Specrun com NUnit i MsTest).
Si tots els passos tenen no ha estat implementat i si encara hi ha vinculacions que tenen un estat pendent. Llavors la sortida es mostrarà com a pendent.
Intentem executar aquestes proves / escenaris en aquest moment quan no hi hagi cap implementació per a les vinculacions i els escenaris estiguin tots pendents.
Ara intentem implementar la classe CalculatorApplication amb els mètodes que volem provar, és a dir, sumar, restar, multiplicar, dividir i sqrt.
A continuació es mostra una mostra de codi de l’aspecte de la nostra classe 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; } } }
Quan l’aplicació estigui llesta, intentem esbrinar les maneres d’implementar les vinculacions per a cadascun dels passos de l’escenari.
Vegem l'enfocament pas a pas per implementar aquests:
- En primer lloc, hem de tenir una instància de l'aplicació que cal provar. Per simplificar-ho, podem instanciar l’automàtica (classe d’aplicació sota prova) en enllaços de passos i utilitzar la instància instantània per cridar realment a diferents mètodes / funcions segons el pas implementat.
- Per capturar l'entrada i la sortida, declarem variables que contenen aquests valors per trucar a funcions a la instància de l'aplicació.
Vegem la implementació de final a fi de totes les vinculacions implicades en la validació de la funcionalitat Afegeix (la resta d’escenaris simplement amplien aquesta funció).
L’escenari Afegeix es veu com es mostra a continuació:
Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should
Vegem la implementació del pas per a cadascun d’aquests passos individuals. Per utilitzar totes les implementacions de passos, declarem una instància de l'aplicació sota prova, així com variables per contenir les variables d'entrada i sortida, tal com es mostra a continuació:
// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output;
Vegem la implementació dels passos de l’escenari un per un.
Pas 1: Tenint en compte que n'he proporcionat 70 i 20 com les entrades.
(Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; }
Aquí, acabem d'inicialitzar les variables d'entrada amb els valors transmesos des dels passos de l'escenari. p0 i p1 són els valors que es passen des del pas de l'escenari i que s'inicialitzaran com a 70 i 20 respectivament.
Pas 2: Quan premo afegir.
(When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); }
Aquest és el pas d'Execució (o Llei) on es demana el mètode real a l'aplicació sotmesa a prova. Tingueu en compte que, atès que les variables d'entrada input1 i input2 ja contenen els valors aprovats al pas 1, la instància de l'aplicació pot trucar al mètode amb aquestes variables.
Pas 3: - Aleshores el resultat hauria de ser 90.
(Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
Aquest és el pas de validació (o afirmació) en què la sortida es genera mitjançant el mètode de crida i la instància de l'aplicació es valida amb la sortida esperada.
Tingueu en compte que Afirmar La paraula clau utilitzada prové de NUnit Framework, que retorna cert o fals en funció de la validació / expectativa que es defineixi. En cas que es torni fals, provocarà un error en la implementació del pas i es mostrarà el resultat de l'escenari com a fallat.
com obrir un fitxer bin al PC
Tingueu en compte també que la variable de sortida obté el valor del pas anterior on es va cridar el mètode real a la instància de l’aplicació.
De manera similar a l'anterior, les implementacions de passos per a la resta de passos de l'escenari es realitzen de la mateixa manera, la diferència consisteix a cridar diferents mètodes a la instància de l'aplicació i a afirmar diferents valors de sortida.
Un cop implementats tots els passos de l'escenari, es poden executar les proves.
La sortida resultant serà la següent:
També podeu veure la sortida de l’escenari individual que enumera també la sortida de passos individuals:
Conclusió
Espero que aquest article us hagi donat una comprensió bàsica de què és BDD i quines són les eines que admeten BDD per .NET, on hem tractat Specflow.
També hem parlat sobre la instal·lació i l'execució de fitxers de característiques Specflow amb l'ajut d'una aplicació de mostra.
Fitxers de codi
Els fitxers de codi utilitzats a l'aplicació es mostren a continuació:
CalculatorFeatureSteps.cs
using System; using TechTalk.SpecFlow; using NUnit; using NUnit.Framework; namespace SpecflowBasic.StepDefinitions { (Binding) public class CalculatorFeatureSteps { // instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output; (Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; } (Given(@'I have provided (.*) as input')) public void GivenIHaveProvidedAsInput(int p0) { input1 = p0; } (When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); } (When(@'I press substract')) public void WhenIPressSubstract() { output = app.subsctract(input1, input2); } (When(@'I press multiply')) public void WhenIPressMultiply() { output = app.multiply(input1, input2); } (When(@'I press divide')) public void WhenIPressDivide() { output = app.divide(input1, input2); } (When(@'I press squareroot')) public void WhenIPressSquareroot() { output = app.squareRoot(input1); } (Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); } } }
CalculatorApplication.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; } } }
packages.config
El nostre pròxim tutorial us informarà sobre l’exemple d’extrem a extrem d’utilitzar Specflow i Selenium Webdriver.
Lectura recomanada
- Tutorials Eclipse en profunditat per a principiants
- Tutorial TestLink: una guia per a la gent de l'eina de gestió de proves TestLink (tutorial núm. 1)
- Tutorial Bugzilla: Tutorial pràctic de l'eina de gestió de defectes
- TestComplete Tutorial: una guia completa de l'eina de proves GUI per a principiants
- Veure tutorial d’automatització: una guia d’eines d’automatització de proves mòbils
- Tutorial de xarxes informàtiques: la guia definitiva
- Tutorial de l'eina de proves d'accessibilitat WAVE
- Marc BDD (Behavior Driven Development): un tutorial complet