specflow tutorial ultimate guide bdd tool
Cjelovit vodič za specflow i ponašanje usmjeren na razvoj (BDD):
Što je Specflow?
Specflow je okvir za testiranje koji podržava prakse BDD-a u .NET okviru. To je okvir otvorenog koda hostiran na GitHubu. Pomaže u korištenju ATDD (Acceptance test driver driver) za .NET aplikacije. Ovim možemo definirati scenarij na običnom engleskom jeziku definiran Gherkin jezikom koji je svima jasno razumljiv.
Postoje različiti alati za pisanje testova u BDD pristupu kao što su Krastavac / JBehave za Javu, Zelena salata za Python, Jasmine za Javascript, Spektok za .NET.
BDD (Behaviour Driven Development) skup je praksi ili pristupa sličnog TDD-u (Test Driven Development), čiji je cilj premostiti komunikacijski jaz između različitih dionika kao što su Product, Developers i Testers.
Krajnji cilj BDD pristupa je stvoriti poslovne zahtjeve koje bi mogao razumjeti cijeli tim kako bi se izbjegli nesporazumi i pomaže u isporuci značajke koja se razvija na najprihvatljiviji način.
Kompletna serija vodiča o specflowu:
Pročitajte Kompletna serija specflow treninga radi boljeg razumijevanja koncepta.
Vodič br. 1: Uvod u Specflow BDD alat (Ovaj vodič)
Vodič br. 2: Primjer spektluka i selena
Vodič br. 3: Povezivanje spektra i napredni koncepti
Vodič br. 4: Korak Argument transformacije i tablice specflowa
Vodič br. 5: Specflow dnevna dokumentacija s kiselim krastavcima
Vodič br. 6: Generator izvješća o spektlu
Vodič br. 7: Pitanja za specflow intervju
Kratki pregled vodiča u seriji Specflow:
Vodič # | Opis |
---|---|
7 | Pitanja za specflow intervju Popis najpopularnijih pitanja i odgovora s intervjuima za Specflow uključeni su u ovu lekciju kako biste uspješno razbili bilo koji intervju iz Specflowa iz prvog pokušaja. |
1 | Uvod u Specflow BDD alat (Ovaj vodič) Ovaj će vam uvod detaljno objasniti sve o Specflowu. Specflow je okvir za testiranje koji podržava prakse BDD-a u .NET okviru. To je okvir otvorenog koda hostiran na GitHubu. Pomaže u korištenju ATDD (Acceptance test driver driver) za .NET aplikacije. |
dva | Primjer spektluka i selena Ovaj će se vodič usredotočiti na integraciju selena s okvirom Specflow kroz jednostavan testni scenarij pretraživanja video zapisa u aplikaciji Youtube. Također ćete provjeriti kako dijeliti podatke između različitih veza putem polja privatne klase. |
3 | Primjer spektluka i selena Ovaj će se vodič usredotočiti na integraciju selena s okvirom Specflow kroz jednostavan testni scenarij pretraživanja video zapisa u aplikaciji Youtube. Također ćete provjeriti kako dijeliti podatke između različitih veza putem polja privatne klase. |
4 | Korak Argument transformacije i tablice specflowa Ovaj informativni vodič za Specflow detaljno će objasniti transformacije koraka argumenata koje omogućuju pretvorbu prilagođenih tipova za argumente Specflow kako bi se izbjegao standardni obrazac i tablice Specflow dobro dođu kada trebate u puno polja / podataka unijeti u jednom koraku u tabelu prilagođenu korisniku format. |
5 | Specflow dnevna dokumentacija s kiselim krastavcima Iz ovog vodiča za Specflow upoznat ćete kako generirati živu dokumentaciju koja izgleda lijepo kroz otvoreni izvorni okvir nazvan kiseli krastavci pomoću postojećih datoteka Specflow. |
6 | Generator izvješća o spektlu U ovom vodiču za izvještavanje o specflowu naučit ćete načine izvođenja testova značajki Specflow uz generiranje HTML izvještaja kroz izvršnu datoteku Specflow. |
Počnimo s prvim tutorijalom iz ove serije.
Što ćete naučiti:
Uvod u Specflow BDD alat
Pogledajte video vodič:
Evo video vodiča o razvoju specflowa i ponašanja:
Značajke BDD-a
Ključne značajke BDD-a navedene su u nastavku:
# 1) Pokušava definirati ponašanje sustava ili značajke koja se razvija kroz primjer ili scenarij. Na primjer, ako gradite jednostavnu aplikaciju Kalkulator, tada različita ponašanja uključuju zbrajanje, množenje, dijeljenje itd.
Stoga će se kroz BDD svi dionici prvo sastati kako bi odlučili o ponašanju aplikacije poput Dodavanja i imat će scenarije kako je prikazano u nastavku.
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80
Ako vidite gornju predstavu, to je scenarij na običnom engleskom jeziku koji je svima jasno razumljiv i koji jasno postavlja zahtjeve za značajku (prema kriterijima prihvaćanja). Stoga je prvi korak artikuliranje ovih zahtjeva.
#dva) Sad s nizom ovih scenarija, QA piše testove protiv njih i to će u početku zakazati jer značajka još nije razvijena.
# 3) Sada programer napiše kod značajke i ponovno izvršava ove testove.
# 4) Testovi mogu proći ili ne uspjeti. Ako ne uspiju - prepravite kod i ponovite postupak
# 5) Nakon završetka refaktoriranja koda trebali bi proći svi scenariji / testovi.
Stoga, u osnovi, BDD koristi TDD pristup i podiže ga na sljedeću razinu imajući neke zajedničke lako razumljive specifikacije u obliku scenarija. Oni također predstavljaju dokumentaciju značajke same po sebi.
Postoje različiti alati za pisanje testova u BDD pristupu poput Cucumber / JBehave za Javu, Zelena salata za Piton , Jasmine za Javascript, Spektok za .NET.
pitanja i odgovori za internetske usluge
U ovom uputstvu usredotočit ćemo se na Specflow.
Također pročitajte => Vrhunski BDD alati i okvir za testiranje
Ključne riječi - dano, kada i tada
Iz svijeta jediničnog testiranja, većini nas su poznata 3 A, tj. Rasporedi, djeluj i potvrdi. Sada, s obzirom na to kada i kada su zamjene za njih u BDD svijetu.
Uzmimo Primjer za razumijevanje svake od njih. Pretpostavimo da navodite scenarij za provjeru valjanosti proizvoda koji se dodaje u košaru aplikacije za e-trgovinu koji zahtijeva prijavu kao preduvjet.
Specifikacija se može napisati na sljedeći način:
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
S obzirom :To se koristi za opis skupa preduvjeta za scenarij koji se definira. Na primjer, u primjeru je preduvjet scenarija prijavljeni kupac. Stoga usporedba s Dogovori se analogno jedinstvenom testu, implementacija koraka morat će osigurati da je prijavljeni kupac.
Kada :Ovim se opisuje radnju ili korak izvršenja. U primjeru pokazuje da kupac pokušava dodati proizvod u svoju košaricu. Stoga će se implementacija koraka za ovaj korak pobrinuti za simulacijski kod za dodavanje proizvoda u košaricu. To se može usporediti s Djelujte korak u Unit testovima.
Zatim :Ovo se koristi za opisivanje ishoda scenarija i zapravo mjesta u koje valja staviti validacije. Može se usporediti s Tvrditi korak u svijet testiranja jedinica. U primjeru ovdje, implementacija koraka utvrdit će je li proizvod stvarno dodan i je li količina jednaka onoj koju je odabrao kupac.
Datoteka značajke
Datoteka značajke u osnovi je grupiranje više scenarija za aplikaciju koja se razvija ili testira. To se također može jednostavno smatrati različitim modulima aplikacije pomoću kojih se aplikacija može logički odvojiti.
Na primjer:
Aplikacija za e-trgovinu može odlučiti imati različite značajke na visokoj razini, kao što su:
- Funkcija prijave / odjave
- Košarica
- Plaćanje itd.
Što je Specflow?
Specflow je alat koji podržava prakse BDD-a u .NET okviru. To je okvir otvorenog koda hostiran na GitHubu. Pomaže u korištenju ATDD (Acceptance test driver driver) za .NET aplikacije.
Vezivanje poslovnih zahtjeva za aplikaciju pomoću paradigme Specifikacija na primjeru pomaže boljem razumijevanju ponašanja aplikacije od strane svih dionika i time rezultira isporukom proizvoda s ispravnim očekivanjima.
Koristi se Kornišion sintaksa za stvaranje značajki i scenarija. Također ima aktivnu raspravu / programera forum .
Specflow - početak rada
U ovom ćemo odjeljku istražiti instaliranje specflowa u Visual Studio IDE i stvaranje datoteka značajki za jednostavnu uslužnu aplikaciju String.
O uzorku prijave
Ilustrirat ćemo različite značajke okvira Specflow u ovom vodiču pomoću aplikacije Kalkulator koja ima funkcije / sučelja za pružanje različitih operacija poput:
- Dodavanje 2 broja.
- Oduzimanje 2 broja.
- Dijeljenje i množenje 2 broja.
- Pronalaženje kvadratnog korijena zadanog broja.
Spektok Vodič za instalaciju
Instalacija specflow-a postupak je u dva koraka
# 1) Instaliranje potrebnih dodataka u Visual Studio IDE.
- Da biste instalirali dodatak za specflow, idite na Alati -> Proširenje i ažuriranja.
- Sada kliknite 'Online' na lijevoj ploči.
- Sada potražite specflow na desnoj ploči.
- Iz rezultata pretraživanja odaberite 'Specflow za Visual Studio 2017'.
#dva) Postavljanje projekta s datotekama značajki i definicijama koraka.
- Stvorite jednostavan novi projekt u Visual Studiju. Možemo stvoriti bilo koju vrstu projekta poput projekta Biblioteka razreda / Aplikacija konzole / Jedinstveni test itd. Radi jednostavnosti preuzimamo projekt Knjižnice razreda. Nazovite projekt 'SpecflowBasic'.
- Da bismo pokrenuli scenarije Specflow koje ćemo stvoriti, potreban nam je testni pokretač. Specflow nudi trkač izvan okvira nazvan Specflow + Runner (koji je plaćena verzija, a besplatna verzija uvodi kašnjenje).
(Ostali trkači također su dostupni za NUnit i MsTest što ćemo vidjeti u daljnjim člancima ove serije).
Da biste instalirali Specflow + Runner - Idite na Alati -> NuGet upravitelj paketa -> Konzola upravitelja paketa.
Jednom kada se otvori konzola upravitelja paketa - pokrenite naredbu.
Install-Package SpecRun.SpecFlow
- Također, kako bismo utvrdili vrijednosti, trebat će nam pomoć testnog okvira. NUnit može biti jedna od opcija, a ostale uključuju MsTest itd. Da biste instalirali okvir NUnit u aplikaciju, otvorite Konzolu upravitelja paketa i upišite naredbu.
Install-Package NUnit
# 3) Stvorite novu klasu nazvanu 'CalculatorApplication' koja će postati naša aplikacija na testiranju. Ovo je jednostavna klasa koja ima funkcije za izvođenje zbrajanja / množenja / dijeljenja / kvadratnog korijena itd. Za zadani ulaz. Ovako izgleda klasa CalculatorApplication.
# 4) Jednom kada se paket instalira, stvorite 2 mape u projektu i nazovite ih kao Značajke i Definicije koraka za spremanje datoteka značajki, odnosno veza koraka. Detaljno ćemo razmotriti razlog ove organizacije mapa za značajke i definicije koraka.
# 5) Sada u mapu značajki dodajte novu datoteku značajke i nazovite je KalkulatorFeatura.
Vidjeli biste da datoteka značajki prema zadanim postavkama ima neki opis u značajci i scenariju.
Zamijenite to onim što ćemo testirati.
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) Generiranje definicija koraka: Specflow pruža automatizirani način generiranja veza / implementacije za različite korake u scenarijima datoteka značajki. To se može postići desnim klikom na datoteku značajke i klikom na 'Generiraj definicije koraka'.
Ovaj korak ne jamči provedbu za sve korake, ali najbolje se trudi grupirati uobičajene korake u scenarijima i ponovno koristiti što više veza. Međutim, to čini posao izbjegavanja šifre uzorka svaki put kada treba implementirati korak scenarija.
Nakon klika 'Generiraj definicije koraka' , Pojavit će se prozor s popisom identificiranih implementacija koraka koje je procesor otkrio. Može se odabrati ili poništiti odabir prema zahtjevima.
U kasnijim odjeljcima proučit ćemo više detalja o padajućem izborniku Stil prikazanom na gornjoj snimci zaslona.
Za sada neka svi budu odabrani sa zadanim postavkama. Klikom na Pregled prikazat će se snimka kako će izgledati implementacija.
Nakon stvaranja definicija koraka, i dalje, ako postoje neki neispunjeni koraci, datoteke značajki imaju vizualni način identificiranja neprovedenih aplikacija. Te korake prikazuje u drugoj boji čineći da je apsolutno jednostavno znati da postoje neki koraci koji još nemaju implementaciju (ili imaju bilo kakve dvosmislene definicije koraka).
Uzorak prikazanih slika na zaslonu:
Bilješka: Definicije koraka mogu se kreirati i ručno - bilo koja .cs datoteka koja ima (Binding) atribut je klasa izvedbe koraka i sintaksa Gherkin tražit će podudaranje provedbe zadanog koraka scenarija
Izvršenje
Kao što smo već dodali Specflow + Runner u gornji odjeljak, izvršavanje Scenarija prilično je jednostavno (budući da je riječ o evaluacijskoj verziji Specruna, uvodi varijabilno kašnjenje od 10-20s prije izvođenja scenarija., Ovo kašnjenje nije prisutno za registrirane inačice i druge okuse Specrun runnera poput NUnit i MsTest).
Ako svi koraci imaju nije bio implementiran i ako još uvijek postoje vezovi koji imaju stanje na čekanju. Tada će se izlaz prikazati kao na čekanju.
Pokušajmo pokrenuti ove testove / scenarije u ovom trenutku kada nema implementacije za povezivanja, a svi su scenariji na čekanju.
Pokušajmo sada implementirati klasu CalculatorApplication s metodama koje želimo testirati, tj. Zbrajati, oduzimati, množiti, dijeliti i sqrt.
Dolje je dat uzorak koda kako izgleda naša klasa 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; } } }
Nakon što aplikacija bude spremna, pokušajmo shvatiti načine implementacije veza za svaki od koraka scenarija.
Pogledajmo korak po korak pristup provedbi sljedećih:
- Prvo, moramo imati primjerak aplikacije koji treba testirati. Radi jednostavnosti, možemo instancirati AUT (klasa aplikacije pod testom) u povezivanjima koraka i upotrijebiti instanciranu instancu za stvarno pozivanje različitih metoda / funkcija prema koraku koji je implementiran.
- Da bismo uhvatili ulaz i izlaz, deklariramo varijable da drže ove vrijednosti kako bi pozvali funkcije na instanci aplikacije.
Pogledajmo implementaciju od kraja do kraja za sve veze uključene u provjeru valjanosti funkcije Add (Ostali scenariji to jednostavno proširuju).
Scenarij Dodaj izgleda kako je prikazano u nastavku:
Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should
Pogledajmo implementaciju koraka za svaki od ovih pojedinačnih koraka. Za upotrebu svih implementacija koraka, deklariramo primjerak aplikacije koja se testira, kao i varijable za zadržavanje ulaznih i izlaznih varijabli, kao što je prikazano dolje:
// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output;
Pogledajmo provedbu koraka scenarija jedan po jedan.
Korak 1: S obzirom da sam osigurao 70 i 20 kao ulazi.
(Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; }
Ovdje smo upravo inicijalizirali ulazne varijable vrijednostima proslijeđenim iz koraka scenarija. p0 i p1 su vrijednosti koje se prenose iz koraka scenarija i inicijalizirat će se kao 70, odnosno 20.
Korak 2: Kad pritisnem dodaj.
(When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); }
Ovo je korak Izvršenje (ili Akt) u kojem se u aplikaciji koja se testira poziva stvarna metoda. Primijetite da budući da ulazne varijable input1 i input2 već sadrže vrijednosti proslijeđene u koraku1, instanca aplikacije može pozvati metodu s tim varijablama.
Korak 3: - Tada bi rezultat trebao biti 90.
(Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
Ovo je korak provjere valjanosti (ili potvrde) u kojem se izlaz generira pozivom metode, a instanca aplikacije provjerava u odnosu na očekivani izlaz.
Primijetite, da Tvrditi Ključna riječ korištena je iz NUnit Framework-a, koja vraća true ili false ovisno o provjeri / očekivanju koje je postavljeno. U slučaju da vrati false, uzrokovat će neuspjeh implementacije Koraka, a rezultat scenarija će se prikazati kao neuspješan.
Primjer podudaranja regularnog izraza c ++
Također, imajte na umu da izlazna varijabla dobiva vrijednost iz prethodnog koraka gdje je stvarna metoda pozvana na instanci aplikacije.
Slično gore navedenom, implementacije koraka za ostatak koraka scenarija izvode se na isti način, razlika je u pozivanju različitih metoda na instanci aplikacije i utvrđivanju različitih izlaznih vrijednosti.
Jednom kada su svi koraci scenarija implementirani, testovi se mogu izvršiti.
Rezultat će izgledati kako je prikazano u nastavku:
Možete pogledati i rezultate pojedinačnog scenarija koji također navode rezultate pojedinih koraka:
Zaključak
Nadam se da bi vam ovaj članak dao osnovno razumijevanje što je BDD i koji su alati koji podržavaju BDD za .NET gdje smo obradili Specflow.
Također smo razgovarali o instaliranju i izvršavanju datoteka značajki Specflow uz pomoć uzorka aplikacije.
Datoteke koda
Datoteke koda korištene u aplikaciji prikazane su u nastavku:
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; } } }
paketi.config
Naš predstojeći vodič će vas upoznati s primjerom korištenja Specflow i Selenium Webdriver od kraja do kraja!
Preporučena literatura
- Dubinski vodiči za pomračenje za početnike
- Vodič za TestLink: Vodič za laike za alat za upravljanje testom TestLink (Tutorial # 1)
- Vodič za Bugzilla: Praktični vodič za alat za upravljanje nedostacima
- Vodič za testiranje: Potpuni vodič za alate za testiranje GUI-a za početnike
- Vodič za automatizaciju SeeTesta: Vodič za alat za automatizaciju mobilnih testova
- Vodič za računalno umrežavanje: Krajnji vodič
- Vodič za alat za testiranje pristupačnosti WAVE-a
- Okvir BDD (Behaviour Driven Development): Kompletna lekcija