Articles

Specflow Tutorial: the Ultimate Guide to BDD Tool

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

mikä on Specflow?

Specflow on.NET Frameworkin BDD-käytäntöjä tukeva testauskehys. Se on avoimen lähdekoodin kehys, jota isännöi GitHub. Se auttaa atdd: n (Acceptance test driver development) käytössä.Net-sovelluksissa. Tämän avulla voimme määritellä skenaarion selkokielellä, joka on määritelty Gherkin-kielellä, joka on selvästi kenen tahansa ymmärrettävissä.

on olemassa erilaisia työkaluja testien kirjoittamiseen BDD-lähestymistavassa, kuten Cucumber/JBehave Javalle, lehtisalaatti Pythonille, Jasmine JavaScriptille, Specflow .netille.

Specflow ja BDD

BDD (Behavior Driven Development) on joukko käytäntöjä tai lähestymistapa, joka on samankaltainen kuin TDD (Test Driven Development), jolla pyritään kuromaan umpeen kommunikaatiokuilu eri sidosryhmien, kuten tuotteen, kehittäjien, ja testaajat.

BDD-lähestymistavan tavoitteena on luoda liiketoimintavaatimuksia, jotka koko tiimi voisi ymmärtää väärinkäsitysten välttämiseksi, ja auttaa toimittamaan kehitettävää ominaisuutta mahdollisimman hyväksyttävällä tavalla.

täydellinen Specflow-opetussarja:

Lue läpi koko Specflow-Koulutussarja, jotta ymmärrät konseptin paremmin.

Tutorial #1: Introduction to Specflow BDD Tool (This Tutorial)
Tutorial #2: Specflow and Selenium Example
Tutorial #3: Specflow Binding & Advanced Concepts
Tutorial #4: Step Argument Transformations & Specflow Tables
Tutorial #5: Specflow Living Documentation with Pickles
Tutorial #6: Specflow Report Generator
Tutorial # 7: Specflow Interview questions

lyhyt katsaus Tutorials in the Specflow Series:

td> 1

Tutorial #
johdatus specflow BDD-työkaluun (tämä opetusohjelma)
tässä johdantotutkielmassa kerrotaan yksityiskohtaisesti kaikki specflow ’ sta. Specflow on. NET Frameworkin BDD-käytäntöjä tukeva testauskehys. Se on avoimen lähdekoodin kehys, jota isännöi GitHub. Se auttaa atdd: n (Acceptance test driver development) käytössä.Net-sovelluksissa.
2 Specflow and Selenium Example
Tämä opetusohjelma keskittyy seleenin integrointiin Specflow frameworkiin Youtube-sovelluksen videohaun yksinkertaisen testiskenaarion avulla. Voit myös tarkistaa, miten jakaa tietoja eri sidosten kautta private class kentät.
3 Specflow and Selenium Example
Tämä opetusohjelma keskittyy seleenin integrointiin Specflow frameworkiin Youtube-sovelluksen videohaun yksinkertaisen testiskenaarion avulla. Voit myös tarkistaa, miten jakaa tietoja eri sidosten kautta private class kentät.
4 Step Argument Transformations&Specflow-taulukot
tämä informatiivinen Specflow-opetusohjelma valottaa yksityiskohtaisesti Vaiheargumenttien muunnoksia, jotka mahdollistavat Specflow-argumenttien mukautetut muunnokset välttääkseen boilerplate-koodin ja Specflow-taulukot ovat käteviä, kun sinun on syötettävä paljon kenttiä / tietoja yhdessä vaiheessa käyttäjäystävällisessä taulukkomuodossa.
5 Specflow Living Documentation with Pickles
tästä Specflow-tutoriaalista saat tietää, miten luoda hyvännäköistä livedokumentaatiota avoimen lähdekoodin puitteissa nimeltä pickles olemassa olevien Specflow-tiedostojen avulla.
6 Specflow-Raportointigeneraattori
tässä Specflow-Raportointiohjeessa opit tavat suorittaa Specflow-ominaisuustestejä sekä tuottaa HTML-raportteja Specflow-ohjelman kautta.
7 Specflow-haastattelukysymykset
tässä opetusohjelmassa on luettelo suosituimmista Specflow-haastattelukysymyksistä ja vastaukset esimerkein, joiden avulla voit ratkaista minkä tahansa Specflow-haastattelun onnistuneesti ensimmäisellä yrittämällä.

aloitetaan tämän sarjan ensimmäisellä tutoriaalilla.

Johdatus Specflow BDD-työkaluun

Katso opetusvideo:

tässä on opetusvideo Specflow ’ n ja käyttäytymisen kehittämisestä:

BDD: n ominaisuudet

BDD: n keskeiset ominaisuudet on kerrottu alla:

# # 1) Se pyrkii määrittelemään kehitteillä olevan järjestelmän tai ominaisuuden käyttäytymistä esimerkin tai skenaarion avulla. Esimerkiksi, jos olet rakentamassa yksinkertainen laskin sovellus sitten erilaisia käyttäytymismalleja ovat yhteenlasku, kertolasku, jako, jne.

näin ollen BDD: n kautta kaikki sidosryhmät kokoontuvat ensin päättämään sovelluksen käyttäytymisestä kuten lisäys ja heillä on skenaarioita alla esitetyllä tavalla.

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

Jos näet yllä olevan esityksen, se on selkokielinen skenaario, jonka kuka tahansa voi selvästi ymmärtää ja tekee ominaisuuden vaatimukset selkeiksi (hyväksymiskriteerien mukaisesti). Näin ollen ensimmäinen askel on näiden vaatimusten ilmaiseminen.

#2) nyt joukko näitä skenaarioita, QA kirjoittaa testejä näitä ja tämä aluksi epäonnistuu, koska ominaisuus ei ole vielä kehitetty.

#3) nyt kehittäjä kirjoittaa ominaisuuskoodin ja suorittaa nämä testit uudelleen.

#4) testit voivat läpäistä tai epäonnistua. Jos ne epäonnistuvat – refaktorikoodi ja toista prosessi

#5) Kun koodin refaktorointi on suoritettu, kaikkien skenaarioiden / testien pitäisi läpäistä.

BDD käyttää siis pohjimmiltaan TDD-lähestymistapaa ja vie sen seuraavalle tasolle ottamalla käyttöön yhteisiä helposti ymmärrettäviä eritelmiä skenaarioiden muodossa. Ne edustavat myös ominaisuusdokumenttia itsessään.

BDD-lähestymistavan kokeiden kirjoittamiseen on erilaisia työkaluja, kuten Cucumber/JBehave Java-ohjelmalle, salaatti Pythonille, Jasmine JavaScriptille, Specflow .NET-sivustolle.

tässä opetusohjelmassa keskitytään Specflow-ohjelmaan.

Lue myös => Top BDD Tools and Testing Framework

the Keywords – Given, When & Then

from the unit testing world, useimmat meistä tuntevat 3 A: n eli järjestää, toimia ja puolustaa. Nyt, ottaen huomioon, milloin ja milloin ovat näiden korvaajat BDD-maailmassa.

Otetaanpa esimerkki jokaisen näistä ymmärtämisestä. Oletetaan olet listaamalla alas skenaario validointi tuote, joka saa lisätään ostoskoriin sähköisen kaupankäynnin sovellus, joka edellyttää, että olet kirjautunut sisään ennakkoedellytys.

eritelmä voidaan kirjoittaa seuraavasti:

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 

annettu: Tätä käytetään kuvaamaan joukko määriteltävän skenaarion ennakkoehtoja. Esimerkissä skenaarion ennakkoedellytys on esimerkiksi sisään Kirjautunut asiakas. Näin ollen vertaamalla järjestää analogisesti yksikön testi, vaihe täytäntöönpano on varmistettava, että on kirjautunut asiakas.

kun: Tätä käytetään kuvaamaan toimea tai suoritusvaihetta. Esimerkissä näkyy, että asiakas yrittää lisätä tuotetta ostoskoriinsa. Näin ollen tämän vaiheen toteutus huolehtii simulaatiokoodista lisätäksesi tuotteen ostoskoriin. Tätä voidaan verrata Yksikkötestien Act-vaiheeseen.

sitten: Tätä käytetään kuvaamaan skenaarion lopputulosta ja lähinnä sitä, mihin validoinnit pitäisi sijoittaa. Sitä voidaan verrata Assert askel yksikön testaus maailmassa. Esimerkissä tässä, vaihe täytäntöönpano vakuuttaa, onko tuote sai todella lisätty ja määrä on sama kuin se oli valinnut asiakkaan.

ominaisuustiedosto

ominaisuustiedosto on lähinnä useiden skenaarioiden ryhmittely kehitteillä olevalle sovellukselle tai testille. Se voidaan myös yksinkertaisesti ajatella sovelluksen eri moduuleina, joilla sovellus voidaan loogisesti erottaa toisistaan.

esimerkiksi:

verkkokauppasovellus voi päättää, että sillä on erilaisia korkean tason ominaisuustiedostoja, kuten:

  • Kirjaudu/Kirjaudu ulos-toiminto
  • ostoskori
  • maksu jne.

mikä on Specflow?

Specflow on.NET Frameworkin BDD-käytäntöjä tukeva työkalu. Se on avoimen lähdekoodin kehys, jota isännöi GitHub. Se auttaa atdd: n (Acceptance test driver development) käytössä.Net-sovelluksissa.

sitovat liiketoimintavaatimukset sovellukselle Specification By Example paradigman avulla auttavat kaikkia sidosryhmiä ymmärtämään paremmin sovelluskäyttäytymistä ja johtavat siten tuotteen toimittamiseen oikeilla odotuksilla.

se käyttää Gherkin-syntaksia ominaisuuksien luomiseen & skenaarioita. Se on myös aktiivinen keskustelu / Kehittäjä foorumi.

Specflow – Getting Started

tässä osiossa tutkitaan specflow: n asentamista Visual Studio IDE: hen ja ominaisuustiedostojen luomista yksinkertaiselle String Utility-sovellukselle.

Näytesovelluksesta

esitämme tässä opetusohjelmassa Specflow-kehyksen eri ominaisuuksia käyttäen Laskinsovellusta, jossa on toimintoja/rajapintoja, jotka tarjoavat erilaisia toimintoja, kuten:

  1. lisäämällä 2 numeroa.
  2. vähennetään 2 numeroa.
  3. jakamalla ja kertomalla 2 lukua.
  4. löytää annetun luvun neliöjuuren.

Specflow-asennusopas

Specflow-asennus on kaksivaiheinen prosessi

#1) tarvittavien lisäosien asentaminen Visual Studio IDE: ssä.

  • Jos haluat asentaa specflow-liitännäisen, siirry työkaluihin – > laajennus & päivitykset.
  • klikkaa nyt vasemmasta paneelista ”Online”.
  • etsi nyt specflow ’ ta oikeasta paneelista.
  • hakutuloksista valitaan ”Specflow Visual Studio 2017”.

Specflow-Plugin Installation

#2) projektin perustamiseen ominaisuustiedostoineen ja askelmäärityksineen.

  • Luo yksinkertainen uusi projekti Visual Studioon. Voimme luoda minkä tahansa projektin, kuten luokkakirjaston / Konsolisovelluksen / Yksikkötestiprojektin jne. Yksinkertaisuuden vuoksi ryhdymme Luokkakirjastoprojektiin. Nimeä projekti nimellä ”SpecflowBasic”.
  • luodun Specflow-skenaarion ajamiseen tarvitaan testijuoksija. Specflow tarjoaa juoksijan ulos laatikosta nimeltään Specflow + Runner (joka on maksettu versio ja ilmainen versio tuo viive).

(myös muita juoksijoita löytyy Nunitille ja Mstestille, jotka nähdään tämän sarjan myöhemmissä artikkeleissa).

asentaaksesi Specflow + Runner – Siirry tools -> NuGet Package Manager -> Package Manager Console.

kun Paketinhallintakonsoli aukeaa-Suorita komento.

 Install-Package SpecRun.SpecFlow

Specrun-installaatio

  • arvojen puolustamiseksi tarvitaan myös testikehikon apua. NUnit voi olla yksi vaihtoehdoista ja muut ovat MsTest, jne. Jos haluat asentaa nunit-kehyksen sovellukseen, avaa Paketinhallintakonsoli ja kirjoita komento.
 Install-Package NUnit 

#3) Luo uusi luokka nimeltä ”CalculatorApplication”, josta tulee testattavana oleva sovelluksemme. Tämä on yksinkertainen luokka, jolla on tehtäviä suorittaa yhteen – / kertolasku / jako / neliöjuuri jne., annetusta panoksesta. Tältä näyttää CalculatorApplication-Luokka.

#4) Kun paketti on asennettu, luo projektiin 2 kansiota ja nimeä ne ominaisuuksiksi ja Askelmäärityksiksi ominaisuustiedostojen ja Step-sidosten tallentamiseksi. Keskustelemme yksityiskohtaisesti tämän kansion organisaation syystä ominaisuudelle & Step definitions.

#5) Lisää nyt Ominaisuudet-kansioon Uusi ominaisuustiedosto ja nimeä se CalculatorFeature-nimellä.

Laskinominaisuus

näkisit, että ominaisuustiedostolla on oletusarvoisesti jokin kuvaus ominaisuudessa ja skenaariossa.

korvaa se sillä, mitä lähdemme testaamaan.

 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) luodaan Step Definitions: Specflow tarjoaa automaattisen tavan luoda sidokset / toteutus ominaisuustiedostoskenaarioiden eri vaiheille. Tämä voidaan saavuttaa napsauttamalla ominaisuustiedostoa hiiren kakkospainikkeella ja valitsemalla ”Luo Askelmääritykset”.

luo Askelmääritys

Tämä vaihe ei takaa kaikkien vaiheiden toteutusta, mutta se yrittää parhaansa mukaan ryhmitellä yhteiset vaiheet skenaarioihin ja käyttää uudelleen niin monta sidosta kuin mahdollista. Kuitenkin, se tekee työtä välttää boilerplate koodi aina, kun skenaario vaihe on toteutettava.

kun olet napsauttanut ”Luo Askelmäärittelyt”, näkyviin tulee ikkuna, jossa luetellaan prosessorin havaitsemat yksilöidyt askeltoteutukset. Yksi voi valita tai de-select kohti vaatimukset.

Generate Step Definition Skeleton

myöhemmissä jaksoissa käydään tarkemmin läpi yllä olevassa kuvakaappauksessa näkyvää Tyylipudotusta.

toistaiseksi pidetään ne kaikki valittuina oletusasetuksilla. Esikatselun klikkaamalla näet tilannekuvan siitä, miltä toteutus näyttää.

tilannekuva toteutuksesta

Vaihemäärittelyjen luomisen jälkeen Ominaisuustiedostoilla on visuaalinen tapa tunnistaa toteuttamattomat Sovellukset. Se näyttää nämä vaiheet eri väriä tekemällä täysin yksinkertainen tietää, että on olemassa joitakin vaiheita, jotka eivät ole täytäntöönpanoa vielä (tai joilla on epäselviä askel määritelmiä).

Otosruutu kuvaa sitä alla:

puuttuu toteutus

huomaa: Askelmäärittelyt voidaan luoda myös manuaalisesti – mikä tahansa .CS-tiedosto, jolla on attribuutti, on Askeltoteutusluokka ja Gherkin-syntaksi etsii sovitusta annetun skenaariovaiheen

toteutuksen

koska olemme jo lisänneet Specflow+ Runnerin yllä olevaan osioon, skenaarioiden toteuttaminen on melko yksinkertaista (koska se on specrunin arviointiversio, se tuo muuttuvan viiveen 10-20s ennen skenaarioiden toteutusta. , Tämä viive ei ole läsnä rekisteröityjä muunnelmia ja muita makuja Specrun runner kuten NUnit ja MsTest).

Jos kaikkia vaiheita ei ole toteutettu ja jos on vielä sidoksia, joilla on vireillä oleva tila. Sitten lähtö näkyy vireillä.

yritetään ajaa nämä testit / skenaariot tässä vaiheessa, kun sidoksia ei ole toteutettu ja skenaariot ovat kaikki vireillä.

vireillä olevat skenaariot

nyt koetetaan toteuttaa CalculatorApplication-Luokka niillä menetelmillä, joita halutaan testata eli lisätä, vähentää, kertoa, jakaa ja sqrt.

alla on koodinäyte siitä, miltä meidän CalculatorApplication-luokka näyttää:

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

kun sovellus on valmis, yritetään selvittää, miten sidokset voidaan toteuttaa kunkin skenaarion vaiheen osalta.

katsotaan askel askeleelta, miten nämä toteutetaan:

  • Ensin pitää olla sovellusesimerkki, jota pitää testata. Yksinkertaisuuden vuoksi voimme instantioida AUT: n (Testiluokan sovellus) askelsidonnoissa ja käyttää instantioitua instanssia itse asiassa kutsumaan erilaisia menetelmiä/toimintoja toteutetun vaiheen mukaan.
  • syötteen ja ulostulon kaappaamiseksi julistamme muuttujat pitämään näitä arvoja, jotta sovellusesimerkissä voidaan kutsua funktioita.

Katsotaanpa päästä päähän-toteutusta kaikille Sidonnaisuuksille, jotka liittyvät Add-toiminnallisuuden validointiin (muut skenaariot vain laajentavat tätä).

Add-skenaario näyttää alla esitetyltä:

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

katsotaan kunkin yksittäisen vaiheen toteutusta. Kaikkien askeltoteutusten käyttöön julistamme testattavan sovellusesimerkin sekä muuttujat Tulo-ja lähtömuuttujien pitämiseksi alla esitetyllä tavalla:

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

katsotaan skenaariovaiheiden toteuttaminen yksitellen.

Vaihe 1: koska I ovat antaneet tuloiksi 70 ja 20.

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

tässä on juuri alustettu syöttömuuttujat skenaarioaskeleista siirretyillä arvoilla. P0 ja p1 ovat arvoja, jotka siirretään skenaariovaiheesta ja jotka alustetaan 70 & 20.

Vaihe 2: Kun painan lisää.

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

Tämä on suoritus (tai teko) vaihe, jossa varsinainen menetelmä kutsutaan testattavaan sovellukseen. Huomaa, että koska syöttömuuttujat input1 ja input2 sisältävät jo vaiheessa 1 siirretyt arvot, sovellusesimerkki voi kutsua menetelmää näillä muuttujilla.

Vaihe 3: – silloin tuloksen pitäisi olla 90.

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

Tämä on Validointivaihe (tai Assert), jossa tuotos syntyy method call on-menetelmällä ja Sovellusesitys validoidaan odotettuun tuotokseen nähden.

ilmoitus, että Assert-avainsana on peräisin nunit Frameworkista, joka palauttaa true or false riippuen vahvistetusta / odotuksesta. Jos se palaa EPÄTOSI, se aiheuttaa vaiheen toteutus epäonnistuu ja joka näyttää skenaarion tulos epäonnistua.

huomaa myös, että lähtömuuttuja saa arvon edellisestä vaiheesta, jossa varsinaista menetelmää kutsuttiin sovellusesimerkiksi.

edellä mainittujen tapaan myös muiden skenaariovaiheiden Askeltoteutukset suoritetaan samalla tavalla, erona on eri menetelmien kutsuminen sovellusesimerkille ja erilaisten lähtöarvojen ilmoittaminen.

kun kaikki skenaarion vaiheet on toteutettu, testit voidaan suorittaa.

tuloksena oleva tuotos näyttää alla esitetyltä:

Consolidated Ouput

voit tarkastella myös yksittäisen skenaarion tuotosta, joka listaa myös yksittäisten vaiheiden tuotokset:

skenaarion Tuotos

johtopäätös

Toivottavasti tämä artikkeli olisi antanut sinulle perustiedot siitä, mitä BDD on ja mitkä ovat ne työkalut, jotka tukevat BDD.Net-sovellusta, jossa olemme käsitelleet specflow-ohjelmaa.

keskustelimme myös Specflow-ominaisuustiedostojen asentamisesta ja suorittamisesta näytesovelluksen avulla.

Kooditiedostot

sovelluksessa käytetyt kooditiedostot näkyvät alla:

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

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

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

tuleva opetusohjelma kertoo sinulle päästä päähän-esimerkin Specflow ’ n ja Selenium Webdriverin käytöstä!

seuraava opetusohjelma