Articles

Specflow Tutorial :The Ultimate Guide TO Bdd Tool

En Komplett Guide Til Specflow Og Behavior Driven Development (BDD) Tutorial:

Hva Er Specflow?Specflow Er et testrammeverk som støtter bdd-praksis i. NET framework. Det er en åpen kildekode rammeverk vert På GitHub. Det hjelpemidler i å bruke Atdd (Aksept test driver development) FOR NET Applikasjoner. Med dette kan vi definere scenario på vanlig engelsk definert Av Gherkin-språk som er tydelig forståelig av noen.

Det finnes ulike verktøy for å skrive tester I bdd-tilnærmingen som Agurk/Jbehave For Java, Salat For Python, Jasmine For Javascript, Specflow for .NET.

Specflow og Bdd

BDD (Behavior Driven Development) er et sett med praksis eller en tilnærming som ligner PÅ Tdd (Test Driven Development), som har som mål å bygge bro over kommunikasjonsgapet mellom ulike interessenter Som Produkt, utviklere og testere.

målet MED bdd-tilnærmingen er å skape forretningskrav som kan forstås av hele teamet for å unngå misforståelser, og bidrar til å sende funksjonen som utvikles på den mest akseptable måten.

En Komplett Specflow Tutorial Series:

Les Gjennom Hele Specflow Training Series for bedre forståelse av konseptet.

Tutorial #1: Introduksjon Til Specflow Bdd Verktøy (Denne Opplæringen)
Tutorial # 2: Specflow Og Selen Eksempel
Tutorial #3: Specflow Binding & Avanserte Konsepter
Tutorial # 4: Trinn Argument Transformasjoner &Specflow Tabeller
Tutorial #5: Specflow Levende Dokumentasjon Med Pickles
Tutorial #6: Specflow Report Generator
Tutorial # 7 :Specflow Intervju spørsmål

En Kort Oversikt Over Tutorials I Specflow Serien:

Tutorial #

Beskrivelse
1 introduksjon til specflow bdd tool (denne opplæringen)
denne innledende opplæringen vil forklare deg alt om specflow i detalj. Specflow er en testing rammeverk som støtter BDD praksis I. NET framework. Det er en åpen kildekode rammeverk vert På GitHub. Det hjelpemidler i å bruke Atdd (Aksept test driver development) FOR NET Applikasjoner.
2 Specflow Og Selen Eksempel
denne opplæringen vil fokusere På Integrering Av Selen Med Specflow rammeverk gjennom en enkel test scenario av video søk På Youtube søknad. Du vil også sjekke hvordan du deler data på tvers av ulike bindinger gjennom private klassefelt.
3 Specflow Og Selen Eksempel
denne opplæringen vil fokusere På Integrering Av Selen Med Specflow rammeverk gjennom en enkel test scenario av video søk På Youtube søknad. Du vil også sjekke hvordan du deler data på tvers av ulike bindinger gjennom private klassefelt.
4 Trinnargumenttransformasjoner&Specflow-Tabeller
Denne informative Specflow-opplæringen vil utvide i detalj Om Trinnargumenttransformasjoner som tillater egendefinerte typekonverteringer for Specflow-argumenter for å unngå standardkode og Specflow-tabeller, kommer til nytte når du må passere i mange felt / data i ett trinn i et brukervennlig tabellformat.
5 Specflow Levende Dokumentasjon Med Pickles
fra Denne Specflow opplæringen vil du få vite hvordan å generere god jakt levende dokumentasjon gjennom en åpen kildekode rammeverk kalt pickles bruke eksisterende Specflow filer.
6 Specflow Report Generator
i Denne Specflow Rapportering opplæringen, vil du lære måter å utføre Specflow funksjonstester sammen med generere HTML rapporter gjennom Specflow kjørbar.7
Specflow Intervju spørsmål
en liste over De mest populære Specflow intervju spørsmål og svar med eksempler er inkludert i denne opplæringen for deg å knekke Noen Specflow intervju vellykket på første forsøk.

la oss starte med den første opplæringen i denne serien.

Introduksjon Til Specflow Bdd Tool

Se Videoen Opplæringen:

Her er en video tutorial På Specflow Og Atferd Drevet Utvikling:

Funksjoner AV BDD

de viktigste funksjonene I BDD er orientert nedenfor:

#1) den prøver å definere virkemåten til systemet eller funksjonen som utvikles gjennom et eksempel eller scenario. For eksempel, hvis du bygger en enkel Kalkulatorapplikasjon, inkluderer de forskjellige oppføringene tillegg, multiplikasjon, divisjon, etc.

Derfor gjennom BDD, vil alle interessenter først møtes for å bestemme oppførselen til søknaden som Tillegg og vil ha scenarier som vist nedenfor.

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

hvis du ser ovennevnte representasjon, er det et scenario på vanlig engelsk som er tydelig forståelig av alle og gjør kravene til en funksjon klar (i henhold til akseptkriteriene). Derfor er det første trinnet å formulere disse kravene.#2) NÅ med et sett av disse scenariene, QA skriver tester mot disse, og dette vil i utgangspunktet mislykkes som funksjonen ennå ikke er utviklet.

#3) nå skriver utvikleren en funksjonskode og utfører disse testene igjen.

#4) testene kan passere eller mislykkes. Hvis de mislykkes – refactor kode og gjenta prosessen

#5) når kode refactoring er fullført alle scenarier / tester skal passere.Derfor bruker BDD I hovedsak tdd-tilnærming og tar det til neste nivå ved å ha noen vanlige, lett forståelige spesifikasjoner i form av scenarier. De representerer også funksjonsdokumentasjonen i seg selv.Det finnes ulike verktøy for å skrive tester I bdd-tilnærmingen som Agurk / JBehave For Java, Salat For Python, Jasmine For Javascript, Specflow for. NET.

i denne opplæringen vil Vi fokusere På Specflow.

Les også = > Topp Bdd Verktøy og Testing Rammeverk

Søkeordene-Gitt, når& deretter

fra enheten testing verden, de fleste av oss er kjent med 3 A er Dvs.Ordne, Handle og Hevde. Nå, Gitt, Når og Da er erstatninger for disse i BDD verden.

La Oss ta Et Eksempel for å forstå hver av disse. Anta at du er liste ned et scenario for å validere et produkt som blir lagt til handlekurven av en e-handel program som krever at du er logget inn som en forutsetning.

spesifikasjonen kan skrives som følger:

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 

Gitt: Dette brukes til å beskrive et sett av forutsetninger for scenariet som defineres. I eksemplet er for eksempel scenarioets forutsetning en innlogget kunde. Derfor sammenligner Du Med Ordne analogi i en enhetstest, må trinnimplementeringen sørge for at det er en innlogget kunde.

Når: dette brukes til å beskrive et trinn for handling eller utførelse. I eksemplet viser det at kunden prøver å legge til et produkt i handlekurven. Derfor vil trinnimplementeringen for dette trinnet ta seg av simuleringskoden for å legge til et produkt i handlekurven. Dette kan sammenlignes Med Act-trinnet i Enhetstestene.

Deretter: dette brukes til å beskrive Utfallet av scenariet og i hovedsak hvor valideringene skal plasseres. Det kan sammenlignes Med Assert trinn I Enheten testing verden. I eksemplet her vil trinnimplementeringen hevde om produktet faktisk ble lagt til og antallet er det samme som det ble valgt av kunden.

Funksjonsfilen

funksjonsfilen er i hovedsak en gruppering av flere scenarier for applikasjonen under utvikling eller test. Det kan også bare tenkes på som forskjellige moduler av applikasjonen som applikasjonen kan logisk skilles fra.

for Eksempel:

et e-handelsprogram kan bestemme seg for å ha forskjellige funksjonsfiler på høyt nivå som:

  • Login/Logout-funksjonalitet
  • Handlekurv
  • Betaling etc.

Hva Er Specflow?

Specflow er et verktøy som støtter bdd praksis I. NET framework. Det er en åpen kildekode rammeverk vert På GitHub. Det hjelpemidler i å bruke Atdd (Aksept test driver development) FOR NET Applikasjoner.

Bindende forretningskrav for en applikasjon ved Hjelp Av Specification By Example paradigm bidrar til en bedre forståelse av applikasjonsadferden av alle interessenter og resulterer dermed i å sende produktet med riktige forventninger.

Det gjør bruk Av Gherkin syntaks for å lage funksjoner& scenarier. Det har også en aktiv diskusjon / utviklerforum.

Specflow-Komme I Gang

i denne delen vil vi utforske installere specflow i Visual Studio IDE og lage funksjonsfiler for et enkelt Strengverktøy.

Om Sample Application

Vi vil illustrere ulike funksjoner I Specflow framework i denne opplæringen ved hjelp Av En Kalkulator Program som har funksjoner/grensesnitt for å gi ulike operasjoner som:

  1. Legge til 2 tall.
  2. Trekker 2 tall.
  3. Dele og Multiplisere 2 tall.
  4. Finne Kvadratroten av det oppgitte nummeret.

Specflow Installasjonsveiledning

Specflow installasjon er en 2-trinns prosess

#1) Installere de nødvendige pluginene i Visual Studio IDE.

  • for å installere specflow-plugin, naviger til Verktøy – > Utvidelse & Oppdateringer.
  • klikk Nå «Online» på venstre panel.
  • søk nå etter specflow i høyre panel.
  • fra søkeresultatene velger Du «Specflow For Visual Studio 2017».

Specflow-Plugin Installasjon

#2) Sette opp prosjektet med funksjonsfiler og trinndefinisjoner.

  • Opprett et enkelt nytt prosjekt I Visual Studio. Vi kan lage noen form for prosjekt som Klassebibliotek / Konsollprogram / Enhetstestprosjekt etc. For enkelhets skyld tar vi opp Et Klassebibliotekprosjekt. Navngi prosjektet som «SpecflowBasic».
  • for å kjøre Specflow-scenariene som vi skal lage, trenger vi en testløper. Specflow gir en løper ut av boksen Kalt Specflow + Runner (som er en betalt versjon og den gratis versjonen introduserer en forsinkelse).

(Andre løpere er også tilgjengelige For NUnit og MsTest som vi vil se i de videre artiklene i denne serien).

for å installere Specflow + Runner – Naviger Til Verktøy- > NuGet Package Manager- > Package Manager Console.

Når Package Manager – Konsollen åpnes-Kjør kommandoen.

 Install-Package SpecRun.SpecFlow

Specrun-Installasjon

  • Også, For Å Hevde verdiene, trenger vi hjelp av et testramme. NUnit kan være et av alternativene, og de andre inkluderer MsTest, etc. Hvis Du vil installere nunit framework til programmet, åpner Du Package Manager-Konsollen og skriver kommandoen.
 Install-Package NUnit 

#3) Opprett en ny klasse som heter «CalculatorApplication» som vil bli vår søknad under test. Dette er en enkel klasse som har funksjoner for å utføre tillegg/multiplikasjon / divisjon / kvadratrot etc., for den gitte inngangen. Slik Ser Kalkulatorensøknadsklasse ut.#4) når pakken blir installert, opprett 2 mapper i prosjektet og navn dem Som Funksjoner og Trinndefinisjoner for lagring av funksjonsfiler og trinnbindinger. Vi vil diskutere i detalj årsaken til denne mappeorganisasjonen for Funksjonen & Trinndefinisjoner.

#5) nå i funksjoner-mappen, legg til en ny Funksjonsfil og navngi Den Som CalculatorFeature.

Kalkulatorfunksjon

du vil se at funksjonsfilen som standard har en beskrivelse I Funksjon og Scenario.

Erstatt det med det vi skal teste.

 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) Generering Av Trinndefinisjoner: Specflow gir en automatisert måte å generere bindinger / implementering for de ulike trinnene i funksjonsfilscenarier. Dette kan oppnås ved å høyreklikke på funksjonsfilen og klikke på «Generer Trinndefinisjoner».

Generer Trinndefinisjon

dette trinnet garanterer ikke en implementering for alle trinnene, men det prøver sitt beste for å gruppere de vanlige trinnene i scenarier og gjenbruke så mange bindinger det kan. Men gjør det jobben med å unngå standardtekst kode hver gang når et scenario trinn må implementeres.

etter å ha klikket På «Generer Trinndefinisjoner», Vises et vindu som viser de identifiserte trinnimplementeringene som prosessoren har oppdaget. Man kan velge eller velge bort i henhold til kravene.

Generer Step Definition Skeleton

I de senere avsnittene vil vi se nærmere på Stilen rullegardinmenyen vist på skjermbildet ovenfor.

For nå, la oss holde dem alle valgt med standardinnstillinger. Ved Å klikke På Forhåndsvisningen vil vise et øyeblikksbilde av hvordan implementeringen vil se ut.

Snapshot Av Implementering

Etter å ha opprettet Trinndefinisjoner, fortsatt, hvis Det er noen uimplementerte trinn, Har Funksjonsfilene en visuell måte å identifisere de ikke-implementerte applikasjonene på. Det viser disse trinnene i en annen farge ved å gjøre det helt enkelt å vite at det er noen trinn som ikke har en implementering ennå (eller har noen tvetydige trinndefinisjoner).

Et Eksempelskjermbilde Viser det Nedenfor:

Manglende implementering

Merk: Trinndefinisjonene kan også opprettes manuelt – Noen .cs-fil Som Har Attributt er En trinnimplementeringsklasse, og Gherkin-syntaksen vil se etter å matche implementeringen av det gitte scenariet trinn

Utførelse

Som vi allerede har lagt Til Specflow + Runner i avsnittet ovenfor, er det ganske greit å utføre Scenariene (siden Det er en evalueringsversjon Av Specrun, introduserer den en variabel forsinkelse på 10-20s før scenariene utføres. , Er denne forsinkelsen ikke til stede for registrerte varianter og andre smaker Av Specrun runner som NUnit og MsTest).

hvis alle trinnene ikke er implementert, og hvis det fortsatt er bindinger som har en ventende tilstand. Da vil utgangen vises som ventende.

La oss prøve å kjøre disse testene / scenariene på dette tidspunktet når det ikke er noen implementering for bindingene, og scenariene er alle ventende.

Ventende Scenarier

la Oss nå prøve Å implementere CalculatorApplication-klassen med metodene vi vil teste, dvs.legge til, trekke fra, multiplisere, dele og sqrt.

Nedenfor Er en kodeeksempel på Hvordan Vår CalculatorApplication class ser ut:

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

når programmet er klart, la oss prøve å finne ut hvordan du implementerer bindingene for hvert av scenariostrinnene.

La Oss se trinnvis tilnærming til å implementere disse:

  • Først må Vi ha en forekomst av programmet som må testes. For enkelhets skyld kan VI instantiere Aut (Application Under Test class) i trinnbindinger og bruke den instantierte forekomsten til å faktisk kalle forskjellige metoder/funksjoner i henhold til trinnet som er implementert.
  • for å fange inngang og utgang erklærer vi variabler for å holde disse verdiene for å ringe funksjoner på Programforekomsten.

La oss se ende-til-ende-implementeringen for alle bindingene som er involvert i å validere Add-funksjonaliteten(Resten av scenariene utvider bare dette).

Add-scenariet ser ut som vist nedenfor:

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

La oss se trinnimplementeringen for hvert av disse individuelle trinnene. For bruk av alle trinn implementeringer, erklærer vi en forekomst Av Søknad under test samt variabler for å holde input og output variabler som vist nedenfor:

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

La oss se implementeringen av scenario trinn en etter en.

Trinn 1: Gitt jeg har gitt 70 og 20 som innganger.

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

Her har vi nettopp initialisert inngangsvariablene med verdiene som er sendt inn fra scenariostrinnene. p0 og p1 er verdiene som sendes inn fra scenariostadiet og vil bli initialisert som 70 & 20 henholdsvis.

Trinn 2: når jeg trykker legg til.

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

Dette Er Utførelsesstrinnet (Eller Act) der den faktiske metoden kalles På Søknaden under test. Legg merke til at siden inngangsvariablene input1 og input2 allerede inneholder verdiene som er gått I Trinn1, kan programforekomsten kalle metoden med disse variablene.

Trinn 3: – da skal resultatet være 90.

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

dette Er Valideringstrinnet (Eller Assert) der utdataene genereres av metodekallet, og Programforekomsten er validert mot forventet utgang.

Legg Merke til at Assert-nøkkelordet som brukes er Fra Nunit Framework, som returnerer sann eller usann avhengig av validering / forventning som er angitt. Hvis det returnerer false, vil Det føre Til At Trinnimplementeringen mislykkes, og det vil vise scenariet som feil.

vær også oppmerksom på at utgangsvariabelen får verdien fra forrige trinn der den faktiske metoden ble kalt på programforekomsten.

I Likhet med ovenstående Utføres Trinnimplementeringer for resten av scenariostrinnene på samme måte, forskjellen er å kalle forskjellige metoder på applikasjonsinstansen og hevde forskjellige utgangsverdier.

når Alle Scenariostrinnene er implementert, kan testene utføres.

den resulterende utgangen vil se ut som vist nedenfor:

Konsolidert Ouput

du kan også vise utdataene for det enkelte scenariet som også viser utdata av individuelle trinn:

Scenarioutgang

Konklusjon

Håper denne artikkelen ville ha gitt deg en grunnleggende forståelse av HVA BDD er og hva er verktøyene som støtter bdd for.net hvor vi dekket specflow.

vi diskuterte også å installere Og utføre Specflow-funksjonsfiler ved hjelp av et prøveprogram.

Kodefiler

kodefilene som brukes i programmet er vist nedenfor:

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

Kalkulatorsøknad.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;}}} 

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

Vår kommende opplæringen vil orientere Deg På Ende til Ende eksempel På Bruk Specflow Og Selen Webdriver!

NESTE Opplæring