specflow tutorial ultimate guide bdd tool
En komplett veiledning for spesifikasjon og atferdsdrevet utvikling (BDD):
Hva er Specflow?
Specflow er et testrammeverk som støtter BDD-praksis i .NET framework. Det er et open source-rammeverk som er vert på GitHub. Det hjelper med å bruke ATDD (Acceptance test driver development) for .NET Applications. Med dette kan vi definere scenario på vanlig engelsk definert av surkornsspråket som er tydelig forståelig for alle.
Det er forskjellige verktøy for å skrive tester i BDD-tilnærmingen som Agurk / JBehave for Java, Salat for Python, Jasmine for Javascript, Specflow for .NET.
BDD (Behavior Driven Development) er et sett med praksis eller en tilnærming som ligner på TDD (Test Driven Development), som tar sikte på å bygge bro over kommunikasjonsgapet mellom forskjellige interessenter som Product, Developers og Testers.
Målet med BDD-tilnærmingen er å skape forretningskrav som kan forstås av hele teamet for å unngå misforståelser, og hjelper til med å sende funksjonen som utvikles på den mest akseptable måten.
En komplett spesifikasjonsveiledningsserie:
Les gjennom Komplett Specflow Training Series for bedre forståelse av konseptet.
Opplæring # 1: Introduksjon til Specflow BDD Tool (Denne opplæringen)
Opplæring nr. 2: Specflow og Selenium Eksempel
Opplæring # 3: Specflow Binding og avanserte konsepter
Opplæring # 4: Step Argument Transformations & Specflow Tables
Opplæring # 5: Specflow Living dokumentasjon med pickles
Opplæring # 6: Specflow Report Generator
Opplæring # 7: Specflow Intervju spørsmål
En kort oversikt over opplæringsprogrammer i Specflow-serien:
Opplæringen # | Beskrivelse |
---|---|
7 | Specflow Intervju spørsmål En liste over de mest populære Specflow-intervjuspørsmålene og svarene med eksempler er inkludert i denne opplæringen, slik at du kan knekke ethvert Specflow-intervju vellykket ved første forsøk. |
en | Introduksjon til Specflow BDD Tool (Denne opplæringen) Denne innledende veiledningen vil forklare deg alt om Specflow i detalj. Specflow er et testrammeverk som støtter BDD-praksis i .NET framework. Det er et open source-rammeverk som er vert på GitHub. Det hjelper med å bruke ATDD (Acceptance test driver development) for .NET Applications. |
to | Specflow og Selenium Eksempel Denne opplæringen vil fokusere på integrering av Selenium med Specflow-rammeverk gjennom et enkelt testscenario for videosøk på Youtube-applikasjonen. Du vil også sjekke hvordan du deler data på tvers av forskjellige bindinger gjennom private klassefelt. |
3 | Specflow og Selenium Eksempel Denne opplæringen vil fokusere på integrering av Selenium med Specflow-rammeverk gjennom et enkelt testscenario for videosøk på Youtube-applikasjonen. Du vil også sjekke hvordan du deler data på tvers av forskjellige bindinger gjennom private klassefelt. |
4 | Step Argument Transformations & Specflow Tables Denne informative Specflow-opplæringen vil ekspandere i detalj om Step Argument-transformasjoner som tillater tilpassede konverteringstype for Specflow-argumenter for å unngå kjeleplatekode og Specflow-tabeller er nyttige når du trenger å sende inn mange felt / data i ett trinn i en brukervennlig tabell. format. |
5 | Specflow Living dokumentasjon med pickles Fra denne Specflow-opplæringen vil du bli kjent med hvordan du kan generere en flott levende dokumentasjon gjennom et åpen kildekode-rammeverk kalt pickles ved hjelp av dine eksisterende Specflow-filer. |
6 | Specflow Report Generator I denne opplæringen for spesifikasjonsrapportering vil du lære hvordan du utfører spesifikke funksjonstester sammen med generering av HTML-rapporter gjennom spesifikke kjørbare filer. |
La oss starte med den første veiledningen i denne serien.
Hva du vil lære:
Introduksjon til Specflow BDD Tool
Se videoopplæringen:
Her er en videoopplæring om spesifikasjon og atferdsdrevet utvikling:
Funksjoner av BDD
Nøkkelfunksjonene i BDD er beskrevet nedenfor:
#1) Den prøver å definere oppførselen til systemet eller funksjonen som utvikles gjennom et eksempel eller scenario. For eksempel, hvis du bygger en enkel kalkulatorapplikasjon, inkluderer de forskjellige atferdene addisjon, multiplikasjon, divisjon etc.
Derfor gjennom BDD vil alle interessentene først møtes for å bestemme oppførselen til applikasjonen, som Addition, og vil ha scenarier som vist nedenfor.
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80
Hvis du ser representasjonen ovenfor, er det et scenario på engelsk som er tydelig forståelig for alle, og som gjør kravene til en funksjon tydelige (i henhold til akseptkriteriene). Derfor er det første trinnet å formulere disse kravene.
#to) Nå med et sett av disse scenariene, skriver QA tester mot disse, og dette vil i utgangspunktet mislykkes ettersom funksjonen ennå ikke er utviklet.
# 3) Nå skriver utvikleren en funksjonskode og utfører disse testene igjen.
# 4) Testene kan bestå eller mislykkes. Hvis de mislykkes - refaktorkode og gjenta prosessen
# 5) Når kodereformering er fullført, skal alle scenarier / tester bestå.
Derfor bruker BDD 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 er forskjellige verktøy for å skrive tester i BDD-tilnærmingen som Agurk / JBehave for Java, Salat for Python , Jasmine for Javascript, Specflow for .NET.
hvor forskjellig er c fra c ++
I denne opplæringen vil vi fokusere på Specflow.
Les også => Topp BDD-verktøy og testrammer
Nøkkelordene - gitt, når og da
Fra enhetstestverdenen er de fleste av oss kjent med 3 A’er, dvs. Arranger, Act og Assert. Nå, gitt, når og da er erstatningene for disse i BDD-verdenen.
La oss ta en Eksempel for å forstå hver av disse. Anta at du noterer et scenario for validering av et produkt som blir lagt til i handlekurven til en e-handelsapplikasjon 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 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
Gitt :Dette brukes til å beskrive et sett med forutsetninger for scenariet som defineres. For eksempel, i eksemplet, er scenarioets forutsetning en innlogget kunde. Derfor sammenligne med Arrangere analogi i en enhetstest, vil trinnimplementeringen trenge for å sikre at det er en innlogget kunde.
Når :Dette brukes til å beskrive et handlings- eller gjennomføringstrinn. I eksemplet viser det at kunden prøver å legge 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 Handling trinn i enhetstestene.
Deretter :Dette brukes til å beskrive utfallet av scenariet og egentlig hvor valideringene skal plasseres i. Det kan sammenlignes med Påstå trinn i enhetstestverdenen. I eksemplet her vil trinnimplementeringen hevde om produktet faktisk ble tilsatt og mengden er den samme som det som ble valgt av kunden.
Funksjonsfilen
Funksjonsfilen er egentlig en gruppering av flere scenarier for applikasjonen under utvikling eller test. Det kan også bare betraktes som forskjellige moduler i applikasjonen der applikasjonen kan skilles logisk.
For eksempel:
En e-handelsapplikasjon kan bestemme seg for å ha forskjellige funksjonsfiler på høyt nivå som:
- Påloggings- / utloggingsfunksjonalitet
- Handlevogn
- Betaling mv.
Hva er Specflow?
Specflow er et verktøy som støtter BDD-praksis i .NET framework. Det er et open source-rammeverk som er vert på GitHub. Det hjelper med å bruke ATDD (Acceptance test driver development) for .NET Applications.
Bindende forretningskrav for en applikasjon ved hjelp av Specification By Example-paradigme hjelper til å få en bedre forståelse av applikasjonsatferden fra alle interessenter og resulterer derved i å sende produktet med riktige forventninger.
Den bruker Agurk syntaks for å lage funksjoner og scenarier. Den har også en aktiv diskusjon / utvikler forum .
Specflow - Komme i gang
I denne delen vil vi utforske installering av specflow i Visual Studio IDE og oppretting av funksjonsfiler for et enkelt String Utility-program.
Om prøveapplikasjon
Vi vil illustrere forskjellige funksjoner i Specflow-rammeverket i denne opplæringen ved hjelp av et kalkulatorapplikasjon som har funksjoner / grensesnitt for å gi forskjellige operasjoner som:
- Legger til 2 tall.
- Subtrahere 2 tall.
- Dele og multiplisere 2 tall.
- Finne kvadratroten til det angitte nummeret.
Specflow Installasjonsveiledning
Specflow installasjon er en 2-trinns prosess
#1) Installere de nødvendige plugins i Visual Studio IDE.
- For å installere plugin for specflow navigerer du til Verktøy -> Utvidelse og oppdateringer.
- Klikk nå “Online” på venstre panel.
- Søk nå etter specflow i høyre panel.
- Velg “Specflow for Visual Studio 2017” fra søkeresultatene.
#to) Sette opp prosjektet med funksjonsfiler og trinndefinisjoner.
- Lag et enkelt nytt prosjekt i Visual Studio. Vi kan lage alle slags prosjekter som Class Library / Console Application / Unit test project etc. For enkelhets skyld tar vi opp et Class Library-prosjekt. 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 som heter 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 ytterligere artiklene i denne serien).
Slik installerer du 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
- For å hevde verdiene trenger vi også hjelp fra et testrammeverk. NUnit kan være et av alternativene, og de andre inkluderer MsTest, etc. For å installere NUnit-rammeverket til applikasjonen, åpne Package Manager Console og skriv kommandoen.
Install-Package NUnit
# 3) Lag en ny klasse kalt “CalculatorApplication” som blir vår applikasjon under test. Dette er en enkel klasse som har funksjoner for å utføre tillegg / multiplikasjon / deling / kvadratrot etc. for den gitte inngangen. Slik ser klassen CalculatorApplication ut.
# 4) Når pakken er installert, oppretter du to mapper i prosjektet og navngir dem som henholdsvis Funksjoner og Trinndefinisjoner for lagring av funksjonsfilene og trinnbindinger. Vi vil diskutere i detalj årsaken til denne mappeorganisasjonen for definisjoner av funksjoner og trinn.
# 5) Nå i funksjonsmappen, legg til en ny funksjonsfil og gi den navnet CalculatorFeature.
Du vil se at funksjonsfilen som standard har noen beskrivelse i Feature og Scenario.
Erstatt det med det vi skal teste.
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) Generere trinndefinisjoner: Specflow gir en automatisert måte å generere bindinger / implementering for de forskjellige trinnene i funksjonsfilscenarier. Dette kan oppnås ved å høyreklikke på funksjonsfilen og klikke på 'Generer trinndefinisjoner'.
Dette trinnet garanterer ikke en implementering for alle trinnene, men den prøver sitt beste for å gruppere de vanlige trinnene i scenarier og bruke så mange bindinger den kan. Det gjør imidlertid jobben med å unngå kokerplatekode hver gang et scenetrinn må implementeres.
Etter å ha klikket “Generer trinndefinisjoner” , Det vises et vindu som viser de identifiserte trinnimplementeringene som prosessoren har oppdaget. Man kan velge eller fjerne markeringen i henhold til kravene.
I de senere avsnittene vil vi se på mer detaljer om rullegardinmenyen for stil vist i skjermbildet ovenfor.
Foreløpig, la oss holde dem alle valgt med standardinnstillinger. Ved å klikke på forhåndsvisningen vises et øyeblikksbilde av hvordan implementeringen vil se ut.
Etter at du har opprettet trinndefinisjoner, men det er noen ikke-implementerte 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 som har noen tvetydige trinndefinisjoner).
En eksempelskjerm viser det nedenfor:
Merk: Trinndefinisjonene kan også opprettes manuelt - Enhver .cs-fil som har [Binding] -attributt er en trinnimplementeringsklasse, og agurkasyntaksen vil se etter å matche implementeringen av det gitte scenario-trinnet
Henrettelse
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-20 sekunder før scenariene utføres., Denne forsinkelsen er ikke til stede for registrerte varianter og andre smaker av Specrun runner som NUnit og MsTest).
Hvis alle trinnene har det ikke vært implementert, og hvis det fremdeles 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.
La oss nå prøve å implementere CalculatorApplication-klassen med metodene vi vil teste, dvs. legge til, trekke fra, multiplisere, dele og sqrt.
Nedenfor er et kodeeksempel på hvordan vår CalculatorApplication-klasse 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 applikasjonen er klar, kan vi prøve å finne ut måtene å implementere bindingene for hvert av trinnene i scenariet.
La oss se trinnvis tilnærming for å implementere disse:
- Først må vi ha en forekomst av applikasjonen som må testes. For enkelhets skyld kan vi instantiere AUT (Application Under Test-klasse) i trinnbindinger og bruke den instantierte forekomsten til å kalle forskjellige metoder / funksjoner i henhold til trinnet som er implementert.
- For å fange inngang og utgang erklærer vi at variabler holder disse verdiene for å kunne ringe funksjoner på applikasjonsinstansen.
La oss se slutt-til-slutt-implementeringen for alle bindinger som er involvert i å validere Add-funksjonaliteten (Resten av scenariene utvider ganske enkelt 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 trinnimplementeringene erklærer vi en forekomst av applikasjon som testes, samt variabler som inneholder input- og outputvariabler 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 gjennomføringen av scenarietrinn en etter en.
Trinn 1: Gitt at jeg har gitt 70 og 20 som inngangene.
[Given(@'I have provided (.*) and (.*) as the inputs')] public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; }
Her har vi nettopp initialisert inngangsvariablene med verdiene som ble sendt inn fra scenariotrinnene. p0 og p1 er verdiene som sendes inn fra scenarietrinnet og vil initialiseres til henholdsvis 70 og 20.
Steg 2: Når jeg trykker på add.
[When(@'I press add')] public void WhenIPressAdd() { output = app.add(input1, input2); }
Dette er gjennomføringstrinnet (eller lov) der den faktiske metoden kalles på applikasjonen som testes. Legg merke til at siden inngangsvariablene input1 og input2 allerede inneholder verdiene som ble sendt i trinn 1, kan applikasjonsforekomsten kalle metoden med disse variablene.
Trinn 3: - Da skal resultatet bli 90.
[Then(@'the result should be (.*)')] public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
Dette er Validering (eller Assert) trinn der utdata genereres av metodeanropet og applikasjonsforekomsten valideres mot forventet utgang.
Legg merke til at Påstå nøkkelordet som brukes er fra NUnit Framework, som returnerer true eller false, avhengig av valideringen / forventningen som er angitt. Hvis det returnerer falskt, vil det føre til at trinnimplementeringen mislykkes, og det vil vise scenarioresultatet som mislykket.
lage et objekt array i java
Vær også oppmerksom på at utdatavariabelen får verdien fra forrige trinn der den faktiske metoden ble kalt på applikasjonsinstansen.
I likhet med det ovennevnte utføres trinnimplementeringer for resten av scenariotrinnene på samme måte, forskjellen ligger i å ringe forskjellige metoder på applikasjonsinstansen og hevde forskjellige utgangsverdier.
Når alle trinnene i scenariet er implementert, kan testene utføres.
Den resulterende produksjonen vil se ut som vist nedenfor:
Du kan også se utdataene fra det enkelte scenariet som også viser utdataene fra individuelle trinn:
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 der vi dekket Specflow.
Vi diskuterte også installering og kjøring av Specflow-funksjonsfiler ved hjelp av et eksempel på et program.
Kodefiler
Kodefilene som brukes i applikasjonen er vist nedenfor:
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
Vår kommende opplæring vil orientere deg om eksemplet fra slutt til slutt om bruk av Specflow og Selenium Webdriver!
Anbefalt lesing
- In-Depth Eclipse Tutorials For Beginners
- TestLink Tutorial: A Layman's Guide to TestLink Test Management Tool (Tutorial # 1)
- Bugzilla Tutorial: Defect Management Tool Hands-on Tutorial
- TestComplete Tutorial: En omfattende GUI-testverktøyveiledning for nybegynnere
- SeeTest Automation Tutorial: A Mobile Test Automation Tool Guide
- Computer Networking Tutorial: The Ultimate Guide
- Veiledning for WAVE tilgjengelighetstestverktøy
- BDD (Behavior Driven Development) Framework: A Complete Tutorial