Articles

Specflow Tutorial: ghidul final pentru instrumentul BDD

Un ghid complet pentru Specflow și comportamentul condus de dezvoltare (BDD) Tutorial:

Ce este Specflow?

Specflow este un cadru de testare care susține practicile BDD în.NET framework. Este un cadru open source găzduit pe GitHub. Ajută la utilizarea ATDD (Acceptance test driver development) pentru aplicațiile.Net. Cu aceasta, putem defini scenariu în engleză simplă definit de limba Gherkin care este clar de înțeles de oricine.

există diverse instrumente pentru scrierea testelor în abordarea BDD, cum ar fi castravetele/JBehave pentru Java, salata verde pentru Python, Jasmine pentru Javascript, Specflow pentru .NET.

Specflow și BDD

BDD (Behavior Driven Development) este un set de practici sau o abordare similară cu TDD (Test Driven Development), care are ca scop reducerea decalajului de comunicare între diferitele părți interesate, cum ar fi testere.scopul final al abordării BDD este de a crea cerințe de afaceri care ar putea fi înțelese de întreaga echipă pentru a evita neînțelegerile și ajută la expedierea caracteristicii dezvoltate în cel mai acceptabil mod.

o serie completă tutorial Specflow:

citit prin seria completă de formare Specflow pentru o mai bună înțelegere a conceptului.

Tutorial # 1: Introducere în Specflow instrument BDD (acest Tutorial)
Tutorial # 2: Specflow și seleniu exemplu
Tutorial # 3: Specflow obligatoriu & concepte avansate
Tutorial #4: Pas argument transformări & Specflow tabele
Tutorial # 5: Specflow documentația de viață cu muraturi
Tutorial # 6: Specflow Generator de raport
Tutorial # 7: Specflow Interviu Întrebări

o scurtă trecere în revistă a Tutoriale din seria Specflow:

Tutorial # descriere
1 introducere în specflow BDD tool (acest Tutorial)
acest tutorial introductiv vă va explica totul despre specflow în detaliu. Specflow este un cadru de testare care sprijină practicile BDD în. NET framework. Este un cadru open source găzduit pe GitHub. Ajută la utilizarea ATDD (Acceptance test driver development) pentru aplicațiile.Net.
2 Specflow și Selenium exemplu
acest tutorial se va concentra pe integrarea seleniu cu cadru Specflow printr-un scenariu de test simplu de căutare video pe aplicația Youtube. De asemenea, veți verifica modul de partajare a datelor în diferite legături prin câmpuri de clasă privată.
3 Specflow și Selenium exemplu
acest tutorial se va concentra pe integrarea seleniu cu cadru Specflow printr-un scenariu de test simplu de căutare video pe aplicația Youtube. De asemenea, veți verifica modul de partajare a datelor în diferite legături prin câmpuri de clasă privată.
4 transformări Argument pas& tabele Specflow
acest tutorial Specflow informativ va expalin în detaliu despre transformări argument pas care permit conversii de tip personalizat pentru argumente Specflow pentru a evita cod și Specflow tabele boilerplate veni la îndemână atunci când aveți nevoie pentru a trece într-o mulțime de domenii / date într-un singur pas într-un format tabelar ușor de utilizat.
5 Specflow documentația de viață cu muraturi
din acest tutorial Specflow veți ajunge să știu cum să genereze bună documentație de viață în căutarea printr-un cadru open source numit murături folosind fișierele Specflow existente.
6 Specflow Generator de rapoarte
În acest tutorial de raportare Specflow, veți învăța modalitățile de executare a testelor de caracteristici Specflow împreună cu generarea de rapoarte HTML prin executabilul Specflow.
7 Specflow Interviu Întrebări
O listă cu cele mai populare întrebări interviu Specflow și răspunsuri cu exemple sunt incluse în acest tutorial pentru tine de a sparge orice interviu Specflow cu succes la prima încercare.

să începem cu primul tutorial din această serie.

Introducere în instrumentul SPECFLOW BDD

urmăriți tutorialul Video:

Iată un tutorial video despre Specflow și dezvoltarea bazată pe comportament:

caracteristicile BDD

caracteristicile cheie ale BDD sunt prezentate mai jos:

#1) încearcă să definească comportamentul sistemului sau al caracteristicii dezvoltate printr-un exemplu sau scenariu. De exemplu, dacă construiți o aplicație simplă de Calculator, atunci diferitele comportamente includ adunarea, înmulțirea, împărțirea etc.prin urmare, prin BDD, toate părțile interesate se vor întâlni mai întâi pentru a decide comportamentul aplicației, cum ar fi adăugarea și vor avea scenarii așa cum se arată mai jos.

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

Dacă vedeți reprezentarea de mai sus, este un scenariu în limba engleză simplă, care este clar de înțeles de oricine și face clare cerințele pentru o caracteristică (conform criteriilor de acceptare). Prin urmare, primul pas este de a articula aceste cerințe.

#2) acum, cu un set de aceste scenarii, QA scrie teste împotriva acestora și acest lucru va eșua inițial, deoarece caracteristica nu este încă dezvoltată.

#3) acum, dezvoltatorul scrie un cod de caracteristică și execută din nou aceste teste.

#4) testele pot trece sau eșua. Dacă nu reușesc-codul refactor și repetați procesul

#5) Odată ce refactorizarea codului este completă, toate scenariile / testele ar trebui să treacă.

prin urmare, în esență, BDD folosește abordarea TDD și o duce la nivelul următor, având câteva specificații comune ușor de înțeles sub formă de scenarii. Ele reprezintă, de asemenea, documentația caracteristică în sine.

există diverse instrumente pentru scrierea testelor în abordarea BDD, cum ar fi castravete/JBehave pentru Java, salată pentru Python, iasomie pentru Javascript, Specflow pentru .NET.

în acest tutorial, ne vom concentra pe Specflow.

De asemenea, Read => instrumente BDD top și cadru de testare

cuvintele cheie – dat, atunci când& apoi

din lume unitate de testare, cele mai multe dintre noi sunt familiarizați cu 3 A adică aranja, acționa și afirma. Acum, având în vedere, când și atunci sunt înlocuitorii acestora în lumea BDD.

să luăm un exemplu pentru a înțelege fiecare dintre acestea. Să presupunem că listați un scenariu pentru validarea unui produs care este adăugat în coșul de cumpărături al unei aplicații de comerț electronic, care necesită să vă conectați ca o condiție prealabilă.

specificația poate fi scrisă după cum urmează:

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 

dat: acesta este utilizat pentru descrierea unui set de condiții prealabile pentru scenariul definit. De exemplu, în exemplu, condiția prealabilă a scenariului este un client conectat. Prin urmare, în comparație cu analogia aranja într-un test de unitate, punerea în aplicare pas va trebui să se asigure că există un client conectat.

când: aceasta este utilizată pentru a descrie o acțiune sau un pas de execuție. În exemplu, arată că clientul încearcă să adauge un produs în coșul său de cumpărături. Prin urmare, implementarea pasului pentru acest pas va avea grijă de codul de simulare pentru a adăuga un produs în Coș. Acest lucru poate fi comparat cu Pasul Act din testele unitare.

Apoi: Acesta este folosit pentru a descrie rezultatul scenariului și, în esență, unde ar trebui plasate validările. Acesta poate fi comparat cu Pasul Assert în lumea de testare unitate. În exemplul de aici, implementarea pasului va afirma dacă produsul a fost adăugat efectiv și cantitatea este aceeași cu cea aleasă de client.

fișierul caracteristică

fișierul caracteristică este, în esență, o grupare de mai multe scenarii pentru aplicația în curs de dezvoltare sau de testare. De asemenea, poate fi pur și simplu gândit ca diferite module ale aplicației prin care aplicația poate fi separată logic.

de exemplu:

O aplicație de comerț electronic poate decide să aibă diferite fișiere de caracteristici de nivel înalt, cum ar fi:

  • funcționalitate de conectare/deconectare
  • coș de cumpărături
  • plată etc.

ce este Specflow?

Specflow este un instrument de sprijin practici BDD în.Net framework. Este un cadru open source găzduit pe GitHub. Ajută la utilizarea ATDD (Acceptance test driver development) pentru aplicațiile.Net.

cerințele de afaceri obligatorii pentru o aplicație care utilizează specificația prin exemplu paradigma ajută la o mai bună înțelegere a comportamentului aplicației de către toate părțile interesate și, prin urmare, duce la expedierea produsului cu așteptări corecte.

se face uz de sintaxa Gherkin pentru crearea de caracteristici& scenarii. De asemenea, are un forum activ de discuții/Dezvoltatori.

Specflow – Noțiuni de bază

În această secțiune, vom explora instalarea specflow în Visual Studio IDE și crearea de fișiere de caracteristici pentru o aplicație simplă de utilitate șir.

despre aplicarea eșantionului

vom ilustra diferite caracteristici ale cadrului Specflow în acest tutorial folosind o aplicație de Calculator care are funcții/interfețe pentru a oferi diferite operații precum:

  1. adăugarea a 2 numere.
  2. scăzând 2 numere.
  3. împărțirea și înmulțirea 2 numere.
  4. găsirea rădăcina pătrată a numărului dat.

Ghid de instalare Specflow

instalarea Specflow este un proces în 2 etape

#1) instalarea pluginurilor necesare în Visual Studio IDE.

  • pentru a instala pluginul specflow navigați la instrumente- > extensie& actualizări.
  • Acum faceți clic pe” Online ” pe panoul din stânga.
  • acum căutați specflow în panoul din dreapta.
  • din rezultatele căutării selectați „Specflow pentru Visual Studio 2017”.

Specflow-instalare Plugin

#2) configurarea proiectului cu fișiere de caracteristici și definiții pas.

  • creați un nou proiect simplu în Visual Studio. Putem crea orice fel de proiect, cum ar fi biblioteca de clasă / aplicație consolă / proiect de testare unitate etc. Pentru simplitate, preluăm un proiect de bibliotecă de clasă. Denumiți proiectul ca „SpecflowBasic”.
  • pentru a rula scenariile Specflow pe care le vom crea, avem nevoie de un test runner. Specflow oferă un alergător din cutie numit Specflow + Runner (care este o versiune plătită, iar versiunea gratuită introduce o întârziere).

(alți alergători sunt de asemenea disponibili pentru NUnit și MsTest pe care le vom vedea în articolele ulterioare din această serie).

pentru a instala Specflow + Runner – navigați la Tools- > Nuget Package Manager- > Package Manager Console.

odată ce consola managerului de pachete se deschide – rulați comanda.

 Install-Package SpecRun.SpecFlow

Specrun-Installation

  • De asemenea, pentru a afirma valorile, vom avea nevoie de ajutorul unui cadru de testare. NUnit poate fi una dintre opțiuni, iar celelalte includ MsTest etc. Pentru a instala cadrul NUnit în aplicație, deschideți consola managerului de pachete și tastați comanda.
 Install-Package NUnit 

#3) Creați o nouă clasă numită „CalculatorApplication” care va deveni aplicația noastră testată. Aceasta este o clasă simplă care are funcții pentru a efectua adăugarea/multiplicarea/divizarea/rădăcina pătrată etc., pentru intrarea dată. Acesta este modul în care arată clasa CalculatorApplication.

#4) Odată ce pachetul este instalat, creați 2 foldere în proiect și denumiți-le ca caracteristici și definiții de pași pentru stocarea fișierelor de caracteristici și, respectiv, a legăturilor de pași. Vom discuta în detaliu motivul pentru această organizare dosar pentru caracteristica & definiții pas.

#5) acum, în folderul caracteristici, Adăugați un nou fișier caracteristică și denumiți-l ca CalculatorFeature.

caracteristică Calculator

veți vedea că în mod implicit fișierul caracteristică are o descriere În caracteristică și scenariu.

înlocuiți asta cu ceea ce vom testa.

 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) generarea definițiilor pasului: Specflow oferă o modalitate automată de a genera legături / implementare pentru diferitele etape din scenariile fișierelor de caracteristici. Acest lucru poate fi realizat făcând clic dreapta pe fișierul de caracteristici și făcând clic pe „Generați definiții de pași”.

generați definiția pasului

acest pas nu garantează o implementare pentru toți pașii, dar încearcă din răsputeri să grupeze pașii comuni în scenarii și să reutilizeze cât mai multe legături. Cu toate acestea, se face de locuri de muncă de a evita codul boilerplate de fiecare dată când un pas scenariu trebuie să fie puse în aplicare.

după ce faceți clic pe „Generați definiții pas”, va apărea o fereastră care afișează implementările pas identificate pe care procesorul le-a detectat. Se poate selecta sau de-select ca pe cerințele.

generați scheletul definiției pasului

în secțiunile ulterioare, vom analiza mai multe detalii despre meniul derulant stil prezentat în captura de ecran de mai sus.

deocamdată, să le păstrăm pe toate selectate cu setările implicite. Dacă faceți clic pe Previzualizare, va apărea un instantaneu al modului în care va arăta implementarea.

instantaneu al implementării

după crearea definițiilor de pași, totuși, dacă există câțiva pași neimplementați, fișierele de caracteristici au un mod vizual de identificare a aplicațiilor neimplementate. Acesta arată acești pași într-o culoare diferită, făcând absolut simplu să știți că există câțiva pași care nu au încă o implementare (sau au definiții pas ambigue).

un exemplu de ecran descrie că mai jos:

implementarea lipsă

notă: definițiile pas pot fi create manual, de asemenea – orice .fișierul cs având atributul este o clasă de implementare pas și sintaxa Gherkin va căuta potrivirea implementării etapei scenariului dat

execuție

așa cum am adăugat deja Specflow+ Runner în secțiunea de mai sus, executarea scenariilor este destul de simplă (deoarece este o versiune de evaluare a Specrun, introduce o întârziere variabilă de 10-20 de ani înainte de executarea scenariilor. , Această întârziere nu este prezentă pentru variantele înregistrate și alte arome ale Specrun runner precum NUnit și MsTest).

dacă toți pașii nu au fost implementați și dacă există încă legături care au o stare în așteptare. Apoi, ieșirea va apărea ca în așteptare.

să încercăm să rulăm aceste teste / scenarii în acest moment când nu există nicio implementare pentru legături, iar scenariile sunt toate în așteptare.

scenarii în așteptare

acum să încercăm să implementăm clasa CalculatorApplication cu metodele pe care dorim să le testăm, adică adăugați, scădeți, înmulțiți, împărțiți și sqrt.

dat mai jos este un eșantion de cod de modul în care clasa noastră CalculatorApplication arata ca:

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

odată ce aplicația este gata, să încercăm să ne dăm seama de modalitățile de implementare a legăturilor pentru fiecare dintre pașii scenariului.

să vedem abordarea pas cu pas pentru a implementa aceste:

  • În primul rând, trebuie să avem o instanță a aplicației care trebuie testată. Pentru simplitate, putem instantia AUT (Application Under Test class) în legări pas și de a folosi instanța instantiat pentru a apela de fapt diferite metode/funcții ca pe pasul care este implementat.
  • pentru a captura de intrare și de ieșire declarăm variabile să dețină aceste valori, în scopul de a apela funcții pe instanța de aplicare.

să vedem implementarea end to end pentru toate legăturile implicate în validarea funcționalității Add (restul scenariilor extind pur și simplu acest lucru).

scenariul de adăugare arată așa cum se arată mai jos:

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

să vedem implementarea pasului pentru fiecare dintre acești pași individuali. Pentru utilizarea tuturor implementărilor de etape, declarăm o instanță a aplicației testate, precum și variabile pentru a menține variabilele de intrare și ieșire așa cum se arată mai jos:

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

să vedem implementarea etapelor scenariului unul câte unul.

Pasul 1: Având în vedere că am furnizat 70 și 20 ca intrări.

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

aici, tocmai am inițializat variabilele de intrare cu valorile transmise din pașii scenariului. p0 și p1 sunt valorile care sunt transmise din etapa scenariului și vor fi inițializate ca 70 & 20 respectiv.

Pasul 2: Când apăs Adăugare.

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

aceasta este etapa de execuție (sau Act) în care metoda reală este apelată la aplicația testată. Observați că, deoarece variabilele de intrare input1 și input2 conțin deja valorile trecute în pasul 1, instanța aplicației poate apela metoda cu aceste variabile.

Pasul 3: – atunci rezultatul ar trebui să fie 90.

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

acesta este pasul de validare (sau afirmare) în care ieșirea este generată de apelul metodei și instanța aplicației este validată în raport cu ieșirea așteptată.

observați că cuvântul cheie Assert utilizat este din cadrul NUnit, care returnează true sau false în funcție de validarea/așteptarea setată. În cazul în care se întoarce false, aceasta va provoca punerea în aplicare pas să eșueze și care va arăta rezultatul scenariului ca nu.

de asemenea, rețineți că variabila de ieșire primește valoarea din pasul anterior în care metoda reală a fost apelată pe instanța aplicației.

similar cu cele de mai sus, implementările de pași pentru restul pașilor scenariului sunt efectuate în același mod, diferența constă în apelarea diferitelor metode pe instanța aplicației și afirmarea diferitelor valori de ieșire.

odată ce toți pașii scenariului sunt implementați, testele pot fi executate.

rezultatul rezultat va arăta așa cum se arată mai jos:

Ouput consolidat

puteți vizualiza, de asemenea, rezultatul scenariului individual care listează în jos ieșirea pașilor individuali, de asemenea:

rezultatul scenariului

concluzie

Sper că acest articol v-ar fi dat o înțelegere de bază a ceea ce este BDD și care sunt instrumentele care acceptă BDD pentru.NET unde am acoperit specflow.

am discutat, de asemenea, instalarea și executarea fișierelor feature Specflow cu ajutorul unei aplicații eșantion.

fișiere de cod

fișierele de cod utilizate în aplicație sunt prezentate mai jos:

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

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

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

tutorialul nostru viitoare vă va informa pe cap la cap exemplu de utilizare Specflow și Selenium Webdriver!

urmatorul Tutorial