Articles

Specflow Tutorial: The Ultimate Guide to BDD Tool

een Complete Guide to Specflow and Behavior Driven Development (BDD) Tutorial:

Wat is Specflow?

Specflow is een test framework dat BDD-praktijken in. NET framework ondersteunt. Het is een open source framework gehost op GitHub. Het helpt bij het gebruik van ATDD (Acceptance test driver development) voor.net toepassingen. Hiermee kunnen we scenario in gewoon Engels gedefinieerd door Gherkin taal die duidelijk begrijpelijk is voor iedereen te definiëren.

Er zijn verschillende tools voor het schrijven van tests in de BDD-aanpak zoals Cucumber/JBehave voor Java, Sla voor Python, Jasmine voor Javascript, Specflow voor .NET.

Specflow en BDD

BDD (Behavior Driven Development) is een reeks praktijken of een aanpak vergelijkbaar met TDD (Test Driven Development), die gericht is op het overbruggen van de communicatiekloof tussen verschillende stakeholders zoals Product, ontwikkelaars en testers.

het einddoel van de BDD-aanpak is het creëren van zakelijke vereisten die door het hele team kunnen worden begrepen om misverstanden te voorkomen, en helpt om de functie die wordt ontwikkeld op de meest acceptabele manier te verzenden.

een Complete Specflow-instructiereeks:

Lees de volledige Specflow-Trainingsserie door voor een beter begrip van het concept.

Tutorial # 1: Inleiding tot Specflow BDD Tool (Deze Tutorial)
Tutorial # 2: Specflow en Selenium voorbeeld
Tutorial # 3: Specflow Binding & Advanced Concepts
Tutorial # 4: Stap Argument transformaties & Specflow tabellen
Tutorial # 5: Specflow levende documentatie met augurken
Tutorial # 6: Specflow Report Generator
Tutorial # 7: Specflow Interview questions

een kort overzicht van Tutorials in de Specflow serie:

Tutorial # Description
1 inleiding tot specflow BDD tool (deze tutorial)
deze inleidende tutorial zal u alles over specflow in detail uitleggen. Specflow is een testkader ter ondersteuning van BDD praktijken in. NET framework. Het is een open source framework gehost op GitHub. Het helpt bij het gebruik van ATDD (Acceptance test driver development) voor.net toepassingen.
2 Specflow en Selenium voorbeeld
Deze tutorial zal zich richten op de integratie van Selenium met Specflow framework door middel van een eenvoudig testscenario van video zoeken op Youtube applicatie. U zult ook controleren hoe u gegevens kunt delen over verschillende bindingen via privé-klassenvelden.
3 Specflow en Selenium voorbeeld
Deze tutorial zal zich richten op de integratie van Selenium met Specflow framework door middel van een eenvoudig testscenario van video zoeken op Youtube applicatie. U zult ook controleren hoe u gegevens kunt delen over verschillende bindingen via privé-klassenvelden.
4 Stapargumenttransformaties & Specflow-tabellen
deze informatieve Specflow-tutorial zal in detail ingaan op Stapargumenttransformaties die aangepaste typeconversies voor Specflow-argumenten toestaan om boilerplate-code te vermijden en Specflow-tabellen zijn handig wanneer u in veel velden/gegevens in één stap moet doorgeven in een gebruiksvriendelijk tabelformaat.
5 Specflow levende documentatie met Pickles
vanuit deze specflow tutorial leert u hoe u goed uitziende levende documentatie kunt genereren via een open source framework genaamd pickles met behulp van uw bestaande Specflow-bestanden.
6 Specflow Report Generator
In deze handleiding voor Specflow-rapportage leert u hoe u Specflow-functietests kunt uitvoeren en hoe u HTML-rapporten kunt genereren via het uitvoerbare bestand Specflow.
7 Specflow Interview questions
Een lijst van de meest populaire Specflow interview vragen en antwoorden met voorbeelden zijn opgenomen in deze tutorial voor u om elk Specflow interview met succes te kraken bij de eerste poging.

laten we beginnen met de eerste tutorial in deze serie.

Inleiding tot Specflow BDD Tool

bekijk de video Tutorial:

Hier is een video tutorial over Specflow en gedrag gedreven ontwikkeling:

Features of BDD

De belangrijkste features van BDD worden hieronder beschreven:

#1) het probeert het gedrag van het systeem of de functie te definiëren die wordt ontwikkeld door middel van een voorbeeld of scenario. Bijvoorbeeld, als u het bouwen van een eenvoudige rekenmachine applicatie dan de verschillende gedragingen omvatten optellen, vermenigvuldigen, deling, enz.

vandaar dat door middel van BDD, alle stakeholders eerst zullen samenkomen om het gedrag van de toepassing te bepalen, zoals optellen en zullen scenario ‘ s hebben zoals hieronder getoond.

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

Als u de bovenstaande weergave ziet, is het een scenario in gewoon Engels dat voor iedereen begrijpelijk is en de vereisten voor een functie duidelijk maakt (volgens de acceptatiecriteria). Vandaar dat de eerste stap is om deze eisen te verwoorden.

#2) nu met een set van deze scenario ‘ s, schrijft de QA tests tegen deze en dit zal in eerste instantie mislukken omdat de functie nog niet is ontwikkeld.

#3) nu schrijft de ontwikkelaar een functiecode en voert deze tests opnieuw uit.

#4) de tests kunnen slagen of mislukken. Als ze fail-refactor code en herhaal het proces

#5) Zodra code refactoring is voltooid alle scenario ‘ s / tests moeten passeren.

daarom gebruikt BDD in wezen de TDD-benadering en tilt deze naar het volgende niveau door enkele gemeenschappelijke gemakkelijk te begrijpen specificaties te hebben in de vorm van scenario ‘ s. Ze vertegenwoordigen ook de documentatie van de functie op zich.

Er zijn verschillende tools voor het schrijven van testen in de BDD aanpak zoals Cucumber/JBehave voor Java, Sla voor Python, Jasmine voor Javascript, Specflow voor .NET.

in deze tutorial zullen we ons richten op Specflow.

Lees ook = > Top BDD Tools and Testing Framework

de sleutelwoorden – gegeven, wanneer & dan

uit de unit testing wereld, de meesten van ons zijn bekend met 3 A ‘ S dat wil zeggen arrangeren, handelen en beweren. Nu, gegeven, wanneer en dan zijn de vervangingen voor deze in de BDD wereld.

laten we een voorbeeld nemen voor het begrijpen van elk van deze. Stel dat u een lijst neer een scenario voor het valideren van een product dat wordt toegevoegd aan de winkelwagen van een e-commerce applicatie die vereist dat u bent ingelogd als een vereiste.

de specificatie kan als volgt worden geschreven:

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 

gegeven: dit wordt gebruikt voor het beschrijven van een reeks voorwaarden voor het scenario dat wordt gedefinieerd. Bijvoorbeeld, in het voorbeeld, het scenario ‘ s voorwaarde is een ingelogde klant. Vandaar in vergelijking met de rangschikking analogie in een unit test, de stap implementatie moet ervoor zorgen dat er een ingelogde klant.

wanneer: dit wordt gebruikt om een actie of uitvoeringsstap te beschrijven. In het voorbeeld, het laat zien dat de klant probeert om een product toe te voegen aan zijn Winkelwagen. Vandaar dat de stap implementatie voor deze stap zal zorgen voor de simulatie code om een product toe te voegen aan de winkelwagen. Dit kan worden vergeleken met de Act stap in de Unit tests.

dan: dit wordt gebruikt om de uitkomst van het scenario te beschrijven en in wezen waar de validaties moeten worden geplaatst. Het kan worden vergeleken met de Assert stap in de Unit testing wereld. In het voorbeeld hier, de stap implementatie zal bevestigen of het product daadwerkelijk werd toegevoegd en de hoeveelheid is hetzelfde als dat werd gekozen door de klant.

het Feature-bestand

Het feature-bestand is in wezen een groepering van meerdere scenario ‘ s voor de toepassing die wordt ontwikkeld of getest. Het kan ook eenvoudig worden beschouwd als verschillende modules van de toepassing waardoor de toepassing logisch kan worden gescheiden.

bijvoorbeeld:

een e-commerce toepassing kan beslissen om verschillende high-level feature bestanden zoals:

  • Login/Logout functionaliteit
  • winkelwagen
  • betaling etc.

Wat is Specflow?

Specflow is een tool die BDD-praktijken ondersteunt in. NET framework. Het is een open source framework gehost op GitHub. Het helpt bij het gebruik van ATDD (Acceptance test driver development) voor.net toepassingen.

Binding business requirements for an application using Specification By Example paradigm helpt bij een beter begrip van het applicatiegedrag door alle stakeholders en resulteert daardoor in het verzenden van het product met de juiste verwachtingen.

het maakt gebruik van Gherkin syntaxis voor het maken van functies & scenario ‘ s. Het heeft ook een actieve discussie / ontwikkelaar forum.

Specflow-aan de slag

In deze sectie zullen we het installeren van specflow in de Visual Studio IDE onderzoeken en featurebestanden maken voor een eenvoudige String Utility-toepassing.

over voorbeeldtoepassing

We zullen verschillende kenmerken van het Specflow-framework illustreren in deze handleiding met behulp van een Rekenmachinetoepassing die functies/interfaces heeft om verschillende bewerkingen te leveren, zoals:

  1. Het toevoegen van 2 getallen.
  2. 2 getallen aftrekken.
  3. delen en vermenigvuldigen van 2 getallen.
  4. het vinden van de vierkantswortel van het gegeven getal.

Specflow Installation Guide

Specflow installatie is een 2 stappen proces

#1) het installeren van de vereiste plugins in de Visual Studio IDE.

  • om de specflow-plug-in te installeren navigeer naar Hulpmiddelen – > extensie & Updates.
  • klik nu op “Online” in het linker paneel.
  • zoek nu naar specflow in het rechterpaneel.
  • selecteer in de zoekresultaten “Specflow for Visual Studio 2017”.

Specflow-plugin installatie

#2) het project instellen met feature-bestanden en step-definities.

  • Maak een eenvoudig nieuw project aan in Visual Studio. We kunnen elk soort project maken zoals Class Library / Console Application / Unit test project etc. Voor de eenvoud, we nemen een klas bibliotheek project. Noem het project “SpecflowBasic”.
  • om de Specflow scenario ‘ s die we gaan maken uit te voeren, hebben we een test runner nodig. Specflow biedt een runner uit de doos genaamd Specflow + Runner (dat is een betaalde versie en de gratis versie introduceert een vertraging).

(andere lopers zijn ook beschikbaar voor NUnit en MsTest die we zullen zien in de verdere artikelen in deze serie).

om Specflow + Runner te installeren-Navigeer naar Tools – > NuGet Package Manager -> Package Manager Console.

zodra de Package Manager Console opent – voer het commando uit.

 Install-Package SpecRun.SpecFlow

Specrun-installatie

  • om de waarden te bevestigen, hebben we ook de hulp van een test framework nodig. NUnit kan een van de opties en de anderen omvatten MsTest, enz. Om het NUnit framework in de toepassing te installeren, opent u de Package Manager Console en typt u command.
 Install-Package NUnit 

#3) Maak een nieuwe klasse aan met de naam” CalculatorApplication ” die onze toepassing wordt die wordt getest. Dit is een eenvoudige klasse met functies om optellen/vermenigvuldigen/delen/vierkantswortel enz.uit te voeren., voor de gegeven input. Zo ziet de calculatortoepassing er uit.

#4) Maak, zodra het pakket is geïnstalleerd, 2 mappen aan in het project en noem ze als functies en Stapdefinities voor respectievelijk het opslaan van de functiebestanden en stapbindingen. We zullen in detail de reden bespreken voor deze mappenorganisatie voor functie & Stapdefinities.

#5) Voeg nu in de map features een nieuw Feature-bestand toe en noem het CalculatorFeature.

Calculator Feature

u zou zien dat standaard het feature bestand enige beschrijving heeft in Feature en Scenario.

Vervang dat door wat we gaan testen.

 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) genererende Stapdefinities: Specflow biedt een geautomatiseerde manier om bindingen/implementatie te genereren voor de verschillende stappen in feature file scenario ‘ s. Dit kan worden bereikt door met de rechtermuisknop op het functiebestand te klikken en te klikken op “Generate Step Definitions”.

genereer Stapdefinitie

Deze stap garandeert geen implementatie voor alle stappen, maar het doet zijn best om de algemene stappen in scenario ‘ s te groeperen en zoveel mogelijk bindingen te hergebruiken. Echter, het maakt de taak van het vermijden van boilerplate code elke keer wanneer een scenario stap moet worden geïmplementeerd.

na het klikken op” Generate Step Definitions”, verschijnt er een venster met de geà dentificeerde stap-implementaties die de processor heeft gedetecteerd. Men kan selecteren of de-select volgens de vereisten.

genereer Step Definition Skeleton

In de latere secties zullen we meer details bekijken over de stijl dropdown getoond in de bovenstaande screenshot.

laten we ze nu allemaal geselecteerd houden met de standaardinstellingen. Als u op de Preview klikt, ziet u een momentopname van hoe de implementatie eruit zal zien.

momentopname van implementatie

na het maken van Stapdefinities, hebben de Featurebestanden nog steeds een visuele manier om de niet-geà mplementeerde toepassingen te identificeren. Het toont die stappen in een andere kleur door het absoluut eenvoudig te maken om te weten dat er een aantal stappen die nog geen implementatie hebben (of hebben een ambigue stap definities).

een voorbeeld scherm toont dat hieronder:

ontbrekende implementatie

Opmerking: De Step definities kunnen ook handmatig worden gemaakt – Any .cs-bestand met attribuut is een stap implementatie klasse en de Gherkin syntaxis zal zoeken naar het matchen van de implementatie van het gegeven scenario stap

uitvoering

zoals we al Specflow+ Runner hebben toegevoegd in de bovenstaande sectie, is het uitvoeren van de scenario ’s vrij eenvoudig (aangezien het een evaluatieversie van Specrun is, introduceert het een variabele vertraging van 10-20s voordat de scenario’ s worden uitgevoerd. , Deze vertraging is niet aanwezig voor geregistreerde varianten en andere smaken van Specrun runner zoals NUnit en MsTest).

als alle stappen niet zijn geïmplementeerd en als er nog bindingen zijn die een wachtende status hebben. Dan wordt de uitvoer weergegeven als in behandeling.

laten we proberen om deze tests/scenario ’s uit te voeren op dit punt wanneer er geen implementatie is voor de bindingen, en de scenario’ s allemaal in behandeling zijn.

Hangende scenario ' s

laten we nu proberen de CalculatorApplication class te implementeren met de methoden die we willen testen, d.w.z. optellen, aftrekken, vermenigvuldigen, delen en sqrt.

Hieronder is een code voorbeeld van hoe onze calculator toepassing klasse eruit ziet:

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; } } } 

zodra de toepassing klaar is, proberen we manieren te vinden om de bindingen te implementeren voor elk van de scenario stappen.

laten we de stapsgewijze aanpak bekijken om deze te implementeren:

  • eerst moeten we een instantie van de toepassing hebben die moet worden getest. Voor de eenvoud kunnen we de AUT (Application Under Test class) instantiëren in stapbindingen en de instantiated instantie gebruiken om daadwerkelijk verschillende methoden/functies aan te roepen volgens de stap die is geïmplementeerd.
  • om de invoer en uitvoer vast te leggen verklaren we variabelen om deze waarden vast te houden om functies op de toepassing instantie aan te roepen.

laten we eens kijken naar de end to end implementatie voor alle bindingen die betrokken zijn bij het valideren van de Add functionaliteit (de rest van de scenario ‘ s breiden dit simpelweg uit).

Het Add-scenario ziet er als volgt uit:

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

laten we de stap-implementatie voor elk van deze afzonderlijke stappen bekijken. Voor het gebruik van alle step implementaties, verklaren we een instance van applicatie die wordt getest, evenals variabelen om invoer-en uitvoervariabelen vast te houden zoals hieronder getoond:

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

laten we de implementatie van scenario stappen één voor één bekijken.

Stap 1: gegeven dat ik 70 en 20 als input heb gegeven.

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

Hier hebben we zojuist de invoervariabelen geïnitialiseerd met de waarden die in de scenariostappen worden doorgegeven. p0 en p1 zijn de waarden die worden doorgegeven vanuit de scenariostap en zullen worden geïnitialiseerd als respectievelijk 70 & 20.

Stap 2: als ik op toevoegen druk.

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

Dit is de Uitvoeringsstap (of Act) waarbij de werkelijke methode wordt aangeroepen op de te testen toepassing. Merk op dat aangezien de invoervariabelen input1 en input2 al de waarden bevatten die in Step1 worden doorgegeven, de toepassing de methode met deze variabelen kan aanroepen.

Stap 3: – dan moet het resultaat 90 zijn.

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

Dit is de validatie (of Assert) stap waarbij de output wordt gegenereerd door de methode aanroep en de toepassing instantie wordt gevalideerd tegen de verwachte output.

merk op dat het gebruikte sleutelwoord Assert afkomstig is van NUnit Framework, dat true of false retourneert, afhankelijk van de validatie/verwachting die is ingesteld. In het geval dat het retourneert false, zal het leiden tot de stap implementatie te mislukken en dat zal het scenario resultaat als mislukken.

houd er ook rekening mee dat de output variabele de waarde krijgt van de vorige stap waar de werkelijke methode werd aangeroepen op de toepassing instantie.

net als hierboven worden stap-implementaties voor de rest van het scenario-stappen op dezelfde manier uitgevoerd, het verschil is in het aanroepen van verschillende methoden op de toepassing-instantie en het bevestigen van verschillende uitvoerwaarden.

zodra alle Scenariostappen zijn geïmplementeerd, kunnen de tests worden uitgevoerd.

de resulterende uitvoer zal eruit zien zoals hieronder getoond:

Consolidated output

U kunt ook de uitvoer van het individuele scenario bekijken die ook de uitvoer van individuele stappen weergeeft:

Scenario-uitvoer

conclusie

hoop dat dit artikel u een basiskennis zou hebben gegeven van wat BDD is en wat de hulpmiddelen zijn die ondersteuning BDD voor.net waar we specflow behandeld.

we hebben ook gesproken over het installeren en uitvoeren van Specflow-functiebestanden met behulp van een voorbeeldtoepassing.

codebestanden

De codebestanden die in de toepassing worden gebruikt, worden hieronder weergegeven:

Rekenmachinefeaturesteps.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);}}} 

Calculatorapplicatie.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;}}} 

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

onze aankomende tutorial zal u informeren over het End-to-End voorbeeld van het gebruik van Specflow en Selenium Webdriver!

volgende Les