Specflow bemutató: a BDD eszköz végső útmutatója
teljes útmutató a Specflow és a Viselkedésvezérelt fejlesztés (BDD) Oktatóprogramjához:
mi a Specflow?
a Specflow egy tesztelési keretrendszer, amely támogatja a BDD gyakorlatokat a.net-keretrendszerben. Ez egy nyílt forráskódú keretrendszer, amelyet a GitHub üzemeltet. Segíti az ATDD (Acceptance test driver development) használatát. Net alkalmazásokhoz. Ezzel, tudjuk meghatározni forgatókönyv egyszerű angol által meghatározott uborka nyelv, amely egyértelműen érthető bárki.
különböző eszközök vannak a tesztek írására a BDD megközelítésben, mint például a uborka/JBehave Java-hoz, saláta Pythonhoz, Jasmine Javascript-hez, Specflow .NET-hez.
a BDD (Behavior Driven Development) a TDD-hez (Test Driven Development) hasonló gyakorlatok vagy megközelítés, amelynek célja a kommunikációs szakadék áthidalása a különböző érdekeltek, például a termékek, a fejlesztők és a fejlesztők között tesztelők.
a BDD megközelítés végső célja, hogy olyan üzleti követelményeket hozzon létre, amelyeket az egész csapat megérthet a félreértések elkerülése érdekében, és segít a fejlesztés alatt álló funkció legmegfelelőbb módon történő szállításában.
a teljes Specflow bemutató sorozat:
olvassa el a teljes Specflow képzési sorozat jobb megértéséhez a koncepció.
Tutorial # 1: Bevezetés a Specflow BDD eszköz (Ez a bemutató)
Tutorial #2: Specflow és szelén példa
Tutorial #3: Specflow kötés & speciális fogalmak
Tutorial # 4: Lépés argumentum transzformációk & Specflow táblázatok
Tutorial #5: Specflow Living dokumentáció savanyúsággal
Tutorial #6: Specflow jelentés generátor
Tutorial # 7: Specflow Interjú kérdések
a rövid áttekintést oktatóanyagok a Specflow sorozat:
oktatóanyag # | leírás |
---|---|
1 | bevezetés a specflow BDD eszközbe (ez a bemutató) ez a bevezető bemutató részletesen elmagyarázza a specflow-t. A Specflow egy tesztelési keretrendszer, amely támogatja a BDD gyakorlatokat a. net-keretrendszerben. Ez egy nyílt forráskódú keretrendszer, amelyet a GitHub üzemeltet. Segíti az ATDD (Acceptance test driver development) használatát. Net alkalmazásokhoz. |
2 | Specflow and Selenium Example Ez az oktatóanyag a Selenium és a Specflow keretrendszer integrációjára összpontosít egy egyszerű tesztforgatókönyv segítségével a YouTube alkalmazásban. Azt is ellenőrizheti, hogyan oszthatja meg az adatokat a különböző kötések között a privát osztály mezőkön keresztül. |
3 | Specflow and Selenium Example Ez az oktatóanyag a Selenium és a Specflow keretrendszer integrációjára összpontosít egy egyszerű tesztforgatókönyv segítségével a YouTube alkalmazásban. Azt is ellenőrizheti, hogyan oszthatja meg az adatokat a különböző kötések között a privát osztály mezőkön keresztül. |
4 | Step argumentum transzformációk &Specflow Tables Ez az informatív Specflow bemutató részletesen bemutatja a Step argumentum transzformációkat, amelyek lehetővé teszik az egyéni típusú konverziókat a Specflow argumentumokhoz, hogy elkerüljék a boilerplate kódot és a Specflow táblákat, amikor sok mezőt / adatot kell átadni egy lépésben, felhasználóbarát táblázatos formátumban. |
5 | Specflow Living Documentation with Pickles ebből a Specflow oktatóanyagból megtudhatja, hogyan hozhat létre jó megjelenésű living dokumentációt a pickles nevű nyílt forráskódú keretrendszeren keresztül a meglévő Specflow fájlok felhasználásával. |
6 | Specflow Report Generator ebben a Specflow jelentési oktatóanyagban megtudhatja a Specflow funkciótesztek végrehajtásának módjait, valamint a HTML jelentések generálását a Specflow futtatható fájlon keresztül. |
7 | Specflow Interjú kérdések a lista a legnépszerűbb Specflow interjú kérdések és válaszok példákkal szerepelnek ebben a bemutató, hogy kiváló minden Specflow interjú sikeresen az első kísérlet. |
kezdjük a sorozat első bemutatójával.
Bevezetés a Specflow BDD eszköz
nézze meg a videó bemutató:
itt van egy videó bemutató a Specflow és a viselkedés vezérelt fejlesztés:
a BDD jellemzői
a BDD legfontosabb jellemzőit az alábbiakban ismertetjük:
#1) megpróbálja meghatározni a fejlesztés alatt álló rendszer vagy funkció viselkedését egy példa vagy forgatókönyv segítségével. Például, ha egy egyszerű számológép alkalmazást épít, akkor a különböző viselkedések közé tartozik az összeadás, a szorzás, Az osztás stb.
ezért a BDD-n keresztül minden érdekelt fél először találkozik, hogy eldöntse az alkalmazás viselkedését, mint például az összeadás, és az alábbi forgatókönyvek lesznek.
Given, I have 2 numbers 30 and 50 as inputWhen I add these 2 numbersThen I should get an output of 80
Ha a fenti ábrázolást látja, ez egy egyszerű angol nyelvű forgatókönyv, amely bárki számára egyértelműen érthető, és egyértelművé teszi a szolgáltatás követelményeit (az elfogadási kritériumok szerint). Ezért az első lépés ezeknek a követelményeknek a megfogalmazása.
#2) most egy sor ilyen forgatókönyv, A QA ír tesztek ezek ellen, és ez kezdetben nem sikerül, mivel a funkció még nem fejlesztették ki.
# 3) Most a fejlesztő ír egy funkciókódot, és újra végrehajtja ezeket a teszteket.
#4) a tesztek sikertelenek vagy sikertelenek lehetnek. Ha nem sikerül-refactor kódot, majd ismételje meg a folyamatot
# 5) egyszer kód refactoring befejeződött minden forgatókönyv / tesztek át kell mennie.
ezért lényegében a BDD TDD megközelítést alkalmaz, és a következő szintre emeli néhány közös, könnyen érthető specifikációval forgatókönyvek formájában. Ők is képviselik a szolgáltatás dokumentációját.
különböző eszközök vannak a tesztek írására a BDD megközelítésben, mint például a uborka/JBehave Java-hoz, saláta Pythonhoz, Jasmine Javascript-hez, Specflow .NET-hez.
ebben az oktatóanyagban a Specflow-ra fogunk összpontosítani.
Also Read = > A legjobb BDD eszközök és tesztelési keretrendszer
A Kulcsszavak – adott, amikor & akkor
az egységtesztelés világából a legtöbben ismerik a 3 A-t, azaz elrendezik, cselekszenek és állítják. Most, adott, mikor és akkor helyettesítik ezeket a BDD világában.
Vegyünk egy példát ezek megértésére. Tegyük fel, hogy felsorol egy forgatókönyvet egy olyan termék érvényesítésére, amely hozzáadódik egy e-kereskedelmi alkalmazás bevásárlókosarához, amely megköveteli, hogy előfeltételként jelentkezzen be.
a specifikáció a következőképpen írható:
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
adott: ez a meghatározandó forgatókönyv előfeltételeinek leírására szolgál. Például a példában a forgatókönyv előfeltétele egy bejelentkezett ügyfél. Ezért összehasonlítva a rendezzen analógiát egy egységtesztben, a lépés megvalósításának biztosítania kell, hogy van bejelentkezett ügyfél.
When: ez egy művelet vagy végrehajtási lépés leírására szolgál. A példában azt mutatja, hogy az ügyfél megpróbál hozzáadni egy terméket a bevásárlókosarához. Ezért ennek a lépésnek a végrehajtása gondoskodik a szimulációs kódról, hogy egy terméket hozzáadjon a kosárhoz. Ez összehasonlítható az Egységtesztek Act lépésével.
ezután: Ez a forgatókönyv kimenetelének leírására szolgál, és lényegében arra, hogy az érvényesítéseket hol kell elhelyezni. Összehasonlítható az Egységtesztelési világ Assert lépésével. Az itt látható példában a lépés végrehajtása azt állítja, hogy a termék ténylegesen hozzáadódott-e, és a mennyiség megegyezik-e az ügyfél által választott mennyiséggel.
A Funkciófájl
a funkciófájl lényegében a fejlesztés vagy tesztelés alatt álló alkalmazás több forgatókönyvének csoportosítása. Egyszerűen úgy is felfogható, mint az alkalmazás különböző moduljai, amelyekkel az alkalmazás logikusan elválasztható.
például:
egy e-kereskedelmi alkalmazás dönthet úgy, hogy különböző magas szintű szolgáltatásfájlokkal rendelkezik, mint például:
- bejelentkezési/kijelentkezési funkció
- Bevásárlókosár
- fizetés stb.
mi az a Specflow?
a Specflow a.NET framework BDD gyakorlatait támogató eszköz. Ez egy nyílt forráskódú keretrendszer, amelyet a GitHub üzemeltet. Segíti az ATDD (Acceptance test driver development) használatát. Net alkalmazásokhoz.
kötelező érvényű üzleti követelmények egy alkalmazás számára a specifikáció példa paradigma segítségével segít az összes érdekelt fél alkalmazásának viselkedésének jobb megértésében, és ezáltal a termék megfelelő elvárásokkal történő szállítását eredményezi.
az uborka szintaxisát használja a funkciók létrehozásához& forgatókönyvek. Ez is egy aktív vita / fejlesztői fórum.
Specflow – első lépések
ebben a részben megvizsgáljuk a specflow telepítését a Visual Studio IDE-be, és létrehozunk funkciófájlokat egy egyszerű String segédprogramhoz.
A Mintaalkalmazásról
ebben az oktatóanyagban a Specflow keretrendszer különböző jellemzőit mutatjuk be egy számológép alkalmazás segítségével, amelynek funkciói/interfészei különböző műveleteket biztosítanak, mint például:
- 2 szám hozzáadása.
- 2 szám kivonása.
- 2 szám osztása és szorzása.
- az adott szám négyzetgyökének megkeresése.
Specflow telepítési útmutató
a Specflow telepítése 2 lépéses folyamat
#1) A szükséges bővítmények telepítése a Visual Studio IDE-be.
- a specflow plugin telepítéséhez keresse meg az eszközök- >Extension& frissítéseket.
- most kattintson az “Online” gombra a bal oldali panelen.
- most keresse meg a specflow – t a jobb oldali panelen.
- a keresési eredmények közül válassza a “Specflow for Visual Studio 2017″lehetőséget.
#2) A Projekt beállítása funkciófájlokkal és lépésdefiníciókkal.
- hozzon létre egy egyszerű új projektet a Visual Studio alkalmazásban. Bármilyen projektet létrehozhatunk, például osztálykönyvtár / konzol alkalmazás / egység teszt projekt stb. Az egyszerűség kedvéért, veszünk fel egy osztály könyvtár projekt. Nevezze el a projektet “SpecflowBasic”néven.
- a létrehozni kívánt Specflow forgatókönyvek futtatásához szükségünk van egy tesztfutóra. A Specflow egy futót biztosít a dobozból Specflow + Runner néven (amely fizetett verzió, az ingyenes verzió pedig késleltetést vezet be).
(más futók is elérhetők a NUnit és az MsTest számára, amelyeket a sorozat további cikkeiben fogunk látni).
a Specflow + Runner telepítéséhez keresse meg az eszközök – >NuGet csomagkezelő- > csomagkezelő konzol.
amint megnyílik a Csomagkezelő konzol – futtassa a parancsot.
Install-Package SpecRun.SpecFlow
- az értékek érvényesítéséhez szükségünk lesz egy teszt keretrendszer segítségére is. A NUnit lehet az egyik lehetőség, a többi pedig az MsTest stb. A NUnit keretrendszer alkalmazásba történő telepítéséhez nyissa meg a Csomagkezelő konzolt, majd írja be a parancsot.
Install-Package NUnit
#3) Hozzon létre egy új osztályt “CalculatorApplication” néven, amely a teszt alatt álló alkalmazásunk lesz. Ez egy egyszerű osztály, amelynek funkciói az összeadás/szorzás/osztás/négyzetgyök stb., az adott bemenethez. Így néz ki a Számológépalkalmazási osztály.
# 4) a csomag telepítése után hozzon létre 2 mappát a projektben, és nevezze el őket funkcióként és Lépésdefinícióként a funkciófájlok és lépéskötések tárolására. Részletesen megvitatjuk ennek a mappaszervezésnek az okát a & Lépésdefiníciók számára.
#5) Most a funkciók mappában adjon hozzá egy új Funkciófájlt, majd nevezze el CalculatorFeature néven.
láthatja, hogy alapértelmezés szerint a funkciófájl tartalmaz néhány leírást a funkcióban és a forgatókönyvben.
cserélje ki azt, amit tesztelni fogunk.
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) Lépésdefiníciók generálása: a Specflow automatizált módon hoz létre kötéseket/megvalósítást a funkciófájl-forgatókönyvek különböző lépéseihez. Ez úgy érhető el, hogy jobb egérgombbal kattint a szolgáltatásfájlra, majd a “Lépésdefiníciók létrehozása”gombra kattint.
Ez a lépés nem garantálja az összes lépés implementációját, de mindent megtesz annak érdekében, hogy a közös lépéseket csoportosítsa a forgatókönyvekben, és minél több kötést használjon újra. Azonban ez teszi a munkát, elkerülve boilerplate kódot minden alkalommal, amikor egy forgatókönyv lépést kell végrehajtani.
a “Lépésdefiníciók létrehozása” gombra kattintás után megjelenik egy ablak, amely felsorolja a processzor által észlelt azonosított lépés implementációkat. Lehet választani, vagy de-select, mint egy a követelményeknek.
a későbbi szakaszokban további részleteket fogunk megvizsgálni a fenti képernyőképen látható Stílus legördülő menüből.
egyelőre tartsuk mindegyiket kiválasztva az alapértelmezett beállításokkal. Az előnézetre kattintva pillanatkép jelenik meg arról, hogy a megvalósítás hogyan fog kinézni.
a Lépésdefiníciók létrehozása után, ha vannak végrehajtatlan lépések, a Funkciófájlok vizuális módon azonosítják a nem megvalósított alkalmazásokat. Ez azt mutatja, ezeket a lépéseket egy másik színt azáltal, hogy teljesen egyszerű tudni, hogy vannak olyan lépések, amelyek nem rendelkeznek a végrehajtás még (vagy amelyek bármilyen kétértelmű lépés definíciók).
a minta képernyő ábrázolja, hogy az alábbi:
megjegyzés: a lépés definíciók lehet létrehozni kézzel is – bármilyen .az attribútummal rendelkező cs fájl egy lépés implementációs osztály, és a Gherkin szintaxis megkeresi az adott forgatókönyv megvalósításának illesztését
végrehajtás
mivel a fenti szakaszban már hozzáadtuk a Specflow+ Runnert, a forgatókönyvek végrehajtása meglehetősen egyszerű (mivel ez a Specrun próbaverziója, 10-20 másodperces változó késleltetést vezet be a forgatókönyvek végrehajtása előtt. , Ez a késleltetés nincs jelen a specrun runner regisztrált változatainál és más ízeknél, mint a NUnit és az MsTest).
Ha az összes lépést nem hajtották végre, és ha még mindig vannak függőben lévő állapotú kötések. Ezután a kimenet függőben lesz.
próbáljuk meg futtatni ezeket a teszteket/forgatókönyveket ezen a ponton, amikor nincs implementáció a kötésekhez, és a forgatókönyvek mind függőben vannak.
most próbáljuk meg végrehajtani a CalculatorApplication osztályt a tesztelni kívánt módszerekkel, azaz összeadás, kivonás, szorzás, osztás és sqrt.
Az alábbiakban egy kódmintát adunk arról, hogyan néz ki a CalculatorApplication osztályunk:
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; } } }
miután elkészült az alkalmazás, próbáljuk kitalálni, hogyan lehet végrehajtani a kötéseket az egyes forgatókönyv-lépésekhez.
nézzük meg a lépésről lépésre történő megközelítést ezek megvalósításához:
- először meg kell adnunk az alkalmazás egy példányát, amelyet tesztelni kell. Az egyszerűség kedvéért az Aut-t (Application Under Test class) lépéskötésekben példányosíthatjuk, és a példányosított példány segítségével különböző metódusokat/függvényeket hívhatunk meg a végrehajtott lépésnek megfelelően.
- a bemenet és kimenet rögzítéséhez változókat deklarálunk, hogy megtartsuk ezeket az értékeket az alkalmazáspéldány függvényeinek meghívásához.
nézzük meg az Add funkció érvényesítésében részt vevő összes kötés végponttól végpontig történő megvalósítását (a többi forgatókönyv egyszerűen kiterjeszti ezt).
az Add forgatókönyv az alábbiak szerint néz ki:
Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should
nézzük meg az egyes lépések végrehajtásának lépéseit. Az összes lépés implementáció használatához deklaráljuk a vizsgált alkalmazás egy példányát, valamint a bemeneti és kimeneti változók tárolására szolgáló változókat az alábbiak szerint:
// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output;
nézzük meg a forgatókönyv lépések végrehajtását egyenként.
1. lépés: mivel 70-et és 20-at adtam meg bemenetként.
public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; }
itt most inicializáltuk a bemeneti változókat a forgatókönyv lépéseiből átadott értékekkel. a p0 és a p1 azok az értékek, amelyek a forgatókönyv lépéséből kerülnek átadásra, és inicializálásra kerülnek 70 & 20 sorrendben.
2. lépés: amikor megnyomom a Hozzáadás gombot.
public void WhenIPressAdd() { output = app.add(input1, input2); }
Ez az a végrehajtási (vagy Act) lépés, ahol a tényleges módszert meghívják a vizsgált alkalmazásra. Figyeljük meg, hogy mivel az input1 és input2 bemeneti változók már tartalmazzák az 1.lépésben átadott értékeket, az alkalmazáspéldány meghívhatja a metódust ezekkel a változókkal.
3. lépés: – akkor az eredménynek 90-nek kell lennie.
public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
Ez az érvényesítési (vagy érvényesítési) lépés, ahol a kimenetet a metódushívás generálja, és az Alkalmazáspéldányt a várt kimenettel szemben érvényesíti.
figyeljük meg, hogy az Assert kulcsszó használt származó NUnit Framework, amely visszatér true vagy false függően érvényesítési/elvárás, hogy be van állítva. Abban az esetben, ha hamis értéket ad vissza, a lépés végrehajtása meghiúsul, és a forgatókönyv eredménye sikertelen lesz.
kérjük, vegye figyelembe, hogy a kimeneti változó az előző lépés értékét kapja, ahol a tényleges metódust meghívták az alkalmazáspéldányra.
a fentiekhez hasonlóan a forgatókönyv többi lépésének lépés implementációit is ugyanúgy hajtják végre, a különbség az alkalmazáspéldány különböző metódusainak meghívásában és különböző kimeneti értékek érvényesítésében rejlik.
a forgatókönyv összes lépésének végrehajtása után a tesztek végrehajthatók.
a kapott kimenet az alábbiak szerint fog kinézni:
megtekintheti az egyedi forgatókönyv kimenetét is, amely felsorolja az egyes lépések kimenetét is:
következtetés
remélem, hogy ez a cikk alapvető megértést adott volna Önnek arról, hogy mi a BDD, és melyek azok az eszközök, amelyek támogatják a BDD for.Net alkalmazást, ahol a specflow-t lefedtük.
megvitattuk a Specflow funkciófájlok telepítését és végrehajtását egy mintaalkalmazás segítségével.
Kódfájlok
az alkalmazásban használt kódfájlok az alábbiakban láthatók:
Számológépfeaturelépések.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);}}}
Számológépalkalmazás.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;}}}
csomagok.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>
a közelgő tutorial rövidít, a végpontok közötti példa segítségével Specflow és Selenium Webdriver!
következő bemutató