specflow tutorial ultimate guide bdd tool
Kompletny przewodnik po samouczku Specflow and Behavior Driven Development (BDD):
Co to jest Specflow?
Specflow to platforma testowa wspierająca praktyki BDD w środowisku .NET. Jest to platforma typu open source hostowana na GitHub. Pomaga w używaniu ATDD (tworzenie sterowników testów akceptacyjnych) dla aplikacji .NET. Dzięki temu możemy zdefiniować scenariusz w prostym języku angielskim zdefiniowanym przez język korniszona, który jest zrozumiały dla każdego.
Istnieją różne narzędzia do pisania testów w podejściu BDD, takie jak Cucumber / JBehave for Java, Lettuce for Python, Jasmine for Javascript, Specflow dla .NET.
BDD (Behavior Driven Development) to zestaw praktyk lub podejścia podobnego do TDD (Test Driven Development), którego celem jest wypełnienie luki komunikacyjnej między różnymi interesariuszami, takimi jak produkt, deweloperzy i testerzy.
Ostatecznym celem podejścia BDD jest stworzenie wymagań biznesowych, które będą zrozumiałe dla całego zespołu, aby uniknąć nieporozumień i pomóc w dostarczaniu rozwijanej funkcji w najbardziej akceptowalny sposób.
Kompletna seria samouczków Specflow:
Przeczytaj Kompletna seria szkoleń Specflow dla lepszego zrozumienia pojęcia.
Samouczek nr 1: Wprowadzenie do narzędzia Specflow BDD (Ten samouczek)
Samouczek nr 2: Przykład Specflow i Selenium
Samouczek nr 3: Powiązanie Specflow i zaawansowane koncepcje
Samouczek nr 4: Step Argument Transformations & Specflow Tables
Samouczek nr 5: Specflow Living Documentation with Pickles
Samouczek nr 6: Generator raportów Specflow
Samouczek nr 7: Pytania do wywiadu Specflow
Krótki przegląd samouczków z serii Specflow:
Instruktaż # | Opis |
---|---|
7 | Pytania do wywiadu Specflow Lista najpopularniejszych pytań i odpowiedzi do wywiadów Specflow wraz z przykładami jest zawarta w tym samouczku, abyś mógł pomyślnie złamać każdy wywiad Specflow za pierwszym razem. |
1 | Wprowadzenie do narzędzia Specflow BDD (Ten samouczek) Ten samouczek wprowadzający szczegółowo wyjaśni Ci wszystko o Specflow. Specflow to platforma testowa wspierająca praktyki BDD w środowisku .NET. Jest to platforma typu open source hostowana na GitHub. Pomaga w używaniu ATDD (tworzenie sterowników testów akceptacyjnych) dla aplikacji .NET. |
dwa | Przykład Specflow i Selenium Ten samouczek skupi się na integracji Selenium z frameworkiem Specflow poprzez prosty scenariusz testowy wyszukiwania wideo w aplikacji Youtube. Sprawdzisz również, jak udostępniać dane w różnych powiązaniach za pośrednictwem prywatnych pól klas. |
3 | Przykład Specflow i Selenium Ten samouczek skupi się na integracji Selenium z frameworkiem Specflow poprzez prosty scenariusz testowy wyszukiwania wideo w aplikacji Youtube. Sprawdzisz również, jak udostępniać dane w różnych powiązaniach za pośrednictwem prywatnych pól klas. |
4 | Step Argument Transformations & Specflow Tables Ten pouczający samouczek Specflow szczegółowo objaśni transformacje argumentów krokowych, które pozwalają na konwersję niestandardowych typów argumentów Specflow, aby uniknąć kodu standardowego, a tabele Specflow przydają się, gdy musisz przekazać wiele pól / danych w jednym kroku w przyjaznym dla użytkownika tabeli format. |
5 | Specflow Living Documentation with Pickles Z tego samouczka Specflow dowiesz się, jak wygenerować dobrze wyglądającą, żywą dokumentację za pomocą platformy open source zwanej piklami, używając istniejących plików Specflow. |
6 | Generator raportów Specflow W tym samouczku dotyczącym raportowania Specflow dowiesz się, jak wykonywać testy funkcji Specflow wraz z generowaniem raportów HTML za pomocą pliku wykonywalnego Specflow. |
Zacznijmy od pierwszego samouczka z tej serii.
Czego się nauczysz:
Wprowadzenie do narzędzia Specflow BDD
Obejrzyj samouczek wideo:
Oto samouczek wideo na temat rozwoju opartego na Specflow i behawioralnym:
Funkcje BDD
Poniżej przedstawiono najważniejsze cechy BDD:
# 1) Próbuje zdefiniować zachowanie opracowywanego systemu lub funkcji na podstawie przykładu lub scenariusza. Na przykład, jeśli tworzysz prostą aplikację kalkulatora, różne zachowania obejmują dodawanie, mnożenie, dzielenie itp.
W związku z tym za pośrednictwem BDD wszyscy interesariusze spotkają się najpierw, aby zdecydować o zachowaniu aplikacji, takiej jak dodatek, i będą mieli scenariusze, jak pokazano poniżej.
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80
Jeśli widzisz powyższe przedstawienie, jest to scenariusz napisany prostym językiem, który jest zrozumiały dla każdego i jasno określa wymagania dotyczące funkcji (zgodnie z kryteriami akceptacji). Dlatego pierwszym krokiem jest sformułowanie tych wymagań.
#dwa) Teraz, mając zestaw tych scenariuszy, kontrola jakości zapisuje testy pod kątem nich i początkowo zakończy się niepowodzeniem, ponieważ funkcja nie została jeszcze opracowana.
# 3) Teraz programista pisze kod funkcji i ponownie wykonuje te testy.
# 4) Testy mogą zakończyć się powodzeniem lub niepowodzeniem. Jeśli się nie uda - refaktoryzuj kod i powtórz proces
# 5) Po zakończeniu refaktoryzacji kodu wszystkie scenariusze / testy powinny przejść.
Dlatego w istocie BDD wykorzystuje podejście TDD i przenosi je na wyższy poziom, mając pewne wspólne, łatwo zrozumiałe specyfikacje w postaci scenariuszy. Stanowią również samą dokumentację funkcji.
Istnieją różne narzędzia do pisania testów w podejściu BDD, takie jak Cucumber / JBehave for Java, Lettuce for Pyton , Jasmine dla Javascript, Specflow dla .NET.
jak otworzyć pliki bin windows 10
W tym samouczku skupimy się na Specflow.
Przeczytaj także => Najlepsze narzędzia BDD i ramy testowe
Słowa kluczowe - dane, kiedy i wtedy
Ze świata testów jednostkowych większość z nas zna 3 A, tj. Rozmieść, Działaj i Potwierdź. Teraz, biorąc pod uwagę, kiedy i wtedy są zamiennikami dla tych w świecie BDD.
Weźmy Przykład za zrozumienie każdego z nich. Załóżmy, że podajesz scenariusz sprawdzania poprawności produktu, który jest dodawany do koszyka w aplikacji e-commerce, co wymaga zalogowania się jako warunku wstępnego.
Specyfikację można zapisać w następujący sposób:
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
Dany :Służy do opisania zestawu warunków wstępnych dla definiowanego scenariusza. Na przykład w tym przykładzie warunkiem wstępnym scenariusza jest zalogowany klient. Stąd w porównaniu do Zorganizować analogicznie w teście jednostkowym, implementacja krokowa będzie musiała zapewnić, że jest zalogowany klient.
Gdy :Służy do opisania czynności lub kroku wykonania. W przykładzie pokazuje, że klient próbuje dodać produkt do swojego koszyka. Stąd implementacja kroku dla tego kroku zajmie się kodem symulacji, aby dodać produkt do koszyka. Można to porównać do działać krok w testach jednostkowych.
Następnie :Służy do opisania wyniku scenariusza i zasadniczo miejsca, w którym należy umieścić walidacje. Można go porównać do Zapewniać krok w świecie testów jednostkowych. W tym przykładzie implementacja krokowa potwierdzi, czy produkt został faktycznie dodany i czy ilość jest taka sama, jak wybrana przez klienta.
Plik funkcji
Plik funkcji jest zasadniczo zgrupowaniem wielu scenariuszy dla aplikacji w fazie rozwoju lub testowania. Można to również traktować po prostu jako różne moduły aplikacji, za pomocą których można ją logicznie rozdzielić.
Na przykład:
Aplikacja handlu elektronicznego może zdecydować o posiadaniu różnych plików funkcji wysokiego poziomu, takich jak:
- Funkcja logowania / wylogowania
- Wózek sklepowy
- Płatność itp.
Co to jest Specflow?
Specflow to narzędzie wspierające praktyki BDD w środowisku .NET. Jest to platforma typu open source hostowana na GitHub. Pomaga w używaniu ATDD (tworzenie sterowników testów akceptacyjnych) dla aplikacji .NET.
Powiązanie wymagań biznesowych dla aplikacji przy użyciu paradygmatu Specyfikacja według przykładu pomaga w lepszym zrozumieniu zachowania aplikacji przez wszystkich interesariuszy, a tym samym skutkuje dostarczeniem produktu z prawidłowymi oczekiwaniami.
Wykorzystuje Korniszon składnia do tworzenia funkcji i scenariuszy. Ma również aktywną dyskusję / programistę forum .
Specflow - Pierwsze kroki
W tej sekcji omówimy instalowanie specyfikacji przepływu w środowisku IDE programu Visual Studio i tworzenie plików funkcji dla prostej aplikacji narzędziowej typu String.
O przykładowej aplikacji
W tym samouczku zilustrujemy różne funkcje platformy Specflow za pomocą aplikacji kalkulatora, która ma funkcje / interfejsy zapewniające różne operacje, takie jak:
- Dodanie 2 liczb.
- Odejmowanie 2 liczb.
- Dzielenie i mnożenie 2 liczb.
- Znajdowanie pierwiastka kwadratowego z podanej liczby.
Specflow Podręcznik instalacji
Instalacja Specflow to proces dwuetapowy
# 1) Instalowanie wymaganych wtyczek w środowisku IDE programu Visual Studio.
- Aby zainstalować wtyczkę specflow, przejdź do Narzędzia -> Rozszerzenie i aktualizacje.
- Teraz kliknij „Online” na lewym panelu.
- Teraz wyszukaj specyfikację w prawym panelu.
- Z wyników wyszukiwania wybierz „Specflow for Visual Studio 2017”.
#dwa) Konfigurowanie projektu za pomocą plików funkcji i definicji kroków.
- Utwórz prosty nowy projekt w programie Visual Studio. Możemy stworzyć dowolny projekt, taki jak Class Library / Console Application / Unit test project itp. Dla uproszczenia bierzemy się za projekt Class Library. Nazwij projekt jako „SpecflowBasic”.
- Aby uruchomić scenariusze Specflow, które zamierzamy stworzyć, potrzebujemy programu uruchamiającego testy. Specflow zapewnia biegacza po wyjęciu z pudełka o nazwie Specflow + Runner (który jest wersją płatną, a wersja bezpłatna wprowadza opóźnienie).
(Inni biegacze są również dostępni dla NUnit i MsTest, co zobaczymy w dalszych artykułach z tej serii).
Aby zainstalować Specflow + Runner - Przejdź do Narzędzia -> Menedżer pakietów NuGet -> Konsola Menedżera pakietów.
Po otwarciu konsoli Menedżera pakietów - uruchom polecenie.
Install-Package SpecRun.SpecFlow
- Ponadto, aby potwierdzić wartości, będziemy potrzebować pomocy struktury testowej. NUnit może być jedną z opcji, a pozostałe obejmują MsTest itp. Aby zainstalować framework NUnit w aplikacji, otwórz konsolę Menedżera pakietów i wpisz polecenie.
Install-Package NUnit
# 3) Utwórz nową klasę o nazwie „CalculatorApplication”, która stanie się testowaną aplikacją. Jest to prosta klasa mająca funkcje do wykonywania dodawania / mnożenia / dzielenia / pierwiastka kwadratowego itp. Dla danego wejścia. Tak wygląda klasa CalculatorApplication.
# 4) Po zainstalowaniu pakietu utwórz 2 foldery w projekcie i nazwij je jako Funkcje i Definicje kroków do przechowywania odpowiednio plików funkcji i powiązań kroków. Omówimy szczegółowo powód, dla którego ta organizacja folderów dotyczy definicji funkcji i kroków.
# 5) Teraz w folderze funkcji dodaj nowy plik funkcji i nadaj mu nazwę CalculatorFeature.
Zobaczysz, że domyślnie plik funkcji ma pewien opis w funkcji i scenariuszu.
Zastąp to tym, co zamierzamy przetestować.
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) Generowanie definicji kroków: Specflow zapewnia zautomatyzowany sposób generowania powiązań / implementacji dla różnych kroków w scenariuszach plików funkcji. Można to osiągnąć, klikając prawym przyciskiem myszy plik elementu i klikając „Generuj definicje kroku”.
Ten krok nie gwarantuje wdrożenia dla wszystkich kroków, ale stara się jak najlepiej pogrupować typowe kroki w scenariuszach i ponownie użyć jak największej liczby powiązań. Jednak za każdym razem, gdy trzeba zaimplementować krok scenariusza, zadaniem jest unikanie standardowego kodu.
Po kliknięciu „Generuj definicje kroku” , Pojawi się okno z listą zidentyfikowanych implementacji kroków, które wykrył procesor. Można zaznaczyć lub odznaczyć zgodnie z wymaganiami.
W dalszych sekcjach przyjrzymy się bardziej szczegółom na temat rozwijanego menu Styl pokazanego na powyższym zrzucie ekranu.
Na razie pozostawmy wszystkie wybrane z ustawieniami domyślnymi. Kliknięcie podglądu spowoduje wyświetlenie migawki tego, jak będzie wyglądać implementacja.
Po utworzeniu definicji kroków, nadal, jeśli istnieją niezaimplementowane kroki, pliki funkcji mają wizualny sposób identyfikacji niezaimplementowanych aplikacji. Pokazuje te kroki w innym kolorze, dzięki czemu absolutnie łatwo jest wiedzieć, że istnieją kroki, które nie mają jeszcze implementacji (lub mają niejednoznaczne definicje kroków).
Przykładowy ekran przedstawia to poniżej:
Uwaga: Definicje Step można również utworzyć ręcznie - każdy plik .cs mający atrybut (Binding) jest klasą implementacji Step, a składnia Gherkin będzie szukać dopasowania do implementacji danego kroku scenariusza
Wykonanie
Ponieważ dodaliśmy już Specflow + Runner w powyższej sekcji, wykonanie Scenariuszy jest dość proste (ponieważ jest to wersja ewaluacyjna Specrun, wprowadza zmienne opóźnienie 10-20 sekund przed wykonaniem scenariuszy., To opóźnienie nie występuje dla zarejestrowanych wariantów i inne smaki biegacza Specrun, takie jak NUnit i MsTest).
Jeśli wszystkie kroki mają nie był zaimplementowana i jeśli nadal istnieją powiązania, które mają stan oczekujący. Następnie dane wyjściowe zostaną wyświetlone jako oczekujące.
Spróbujmy uruchomić te testy / scenariusze w tym momencie, gdy nie ma implementacji dla powiązań, a wszystkie scenariusze są oczekujące.
Spróbujmy teraz zaimplementować klasę CalculatorApplication z metodami, które chcemy przetestować, tj. Dodawanie, odejmowanie, mnożenie, dzielenie i sqrt.
Poniżej znajduje się przykładowy kod pokazujący, jak wygląda nasza 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; } } }
Gdy aplikacja będzie gotowa, spróbujmy znaleźć sposoby implementacji powiązań dla każdego z kroków scenariusza.
Zobaczmy, jak krok po kroku je wdrożyć:
- Po pierwsze, musimy mieć instancję aplikacji, którą trzeba przetestować. Dla uproszczenia możemy utworzyć instancję AUT (klasa Application Under Test) w powiązaniach krokowych i użyć instancji utworzonej do wywołania różnych metod / funkcji zgodnie z zaimplementowanym krokiem.
- Aby uchwycić dane wejściowe i wyjściowe, deklarujemy zmienne przechowujące te wartości w celu wywołania funkcji w instancji aplikacji.
Zobaczmy implementację od końca do końca dla wszystkich powiązań zaangażowanych w walidację funkcji Dodaj (reszta scenariuszy to po prostu rozszerzenie).
Scenariusz dodawania wygląda jak pokazano poniżej:
Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should
Zobaczmy implementację poszczególnych etapów dla każdego z tych kroków. Aby użyć wszystkich implementacji krokowych, deklarujemy wystąpienie testowanej aplikacji, a także zmienne do przechowywania zmiennych wejściowych i wyjściowych, jak pokazano poniżej:
// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output;
Zobaczmy, jak po kolei wdrażamy kroki scenariusza.
Krok 1: Biorąc pod uwagę, że podałem 70 i 20 tak jak wejścia.
(Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; }
Tutaj właśnie zainicjowaliśmy zmienne wejściowe z wartościami przekazanymi z kroków scenariusza. p0 i p1 to wartości, które są przekazywane z kroku scenariusza i zostaną zainicjalizowane odpowiednio jako 70 i 20.
Krok 2: Kiedy naciskam dodaj.
(When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); }
Jest to krok wykonania (lub działania), w którym rzeczywista metoda jest wywoływana w testowanej aplikacji. Zauważ, że ponieważ zmienne wejściowe input1 i input2 zawierają już wartości przekazane w kroku 1, instancja aplikacji może wywołać metodę z tymi zmiennymi.
Krok 3: - Wtedy wynik powinien wynosić 90.
(Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
Jest to krok sprawdzania poprawności (lub potwierdzenia), w którym dane wyjściowe są generowane przez wywołanie metody, a wystąpienie aplikacji jest sprawdzane pod kątem oczekiwanego wyniku.
Zauważ, że plik Zapewniać użyte słowo kluczowe pochodzi z NUnit Framework, które zwraca wartość true lub false w zależności od ustawionej walidacji / oczekiwania. Jeśli zwróci wartość false, spowoduje to niepowodzenie implementacji Step, co spowoduje wyświetlenie wyniku scenariusza jako niepowodzenia.
pytania do wywiadu dotyczącego mydła i reszty usług internetowych
Zwróć także uwagę, że zmienna wyjściowa pobiera wartość z poprzedniego kroku, w którym w instancji aplikacji została wywołana właściwa metoda.
Podobnie jak powyżej, implementacje Step dla pozostałych kroków scenariusza są wykonywane w ten sam sposób, różnica polega na wywoływaniu różnych metod w instancji aplikacji i przypisywaniu różnych wartości wyjściowych.
Po zaimplementowaniu wszystkich kroków Scenariusza można wykonać testy.
Wynikowy wynik będzie wyglądał, jak pokazano poniżej:
Możesz również wyświetlić dane wyjściowe pojedynczego scenariusza, które zawierają również listę wyników poszczególnych kroków:
Wniosek
Mam nadzieję, że ten artykuł dałby ci podstawowe zrozumienie, czym jest BDD i jakie są narzędzia obsługujące BDD dla .NET, gdzie omówiliśmy Specflow.
Omówiliśmy również instalowanie i uruchamianie plików funkcji Specflow za pomocą przykładowej aplikacji.
Pliki kodu
Pliki kodu używane w aplikacji przedstawiono poniżej:
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
W naszym nadchodzącym samouczku dowiesz się, jak od początku do końca używać Specflow i Selenium Webdriver!
rekomendowane lektury
- Dogłębne samouczki dotyczące Eclipse dla początkujących
- Samouczek TestLink: Przewodnik dla laika po narzędziu do zarządzania testami TestLink (samouczek nr 1)
- Samouczek Bugzilli: Praktyczny samouczek dotyczący narzędzia do zarządzania defektami
- Samouczek TestComplete: kompleksowy przewodnik po narzędziu do testowania GUI dla początkujących
- Zobacz samouczek automatyzacji testów: przewodnik po narzędziu do automatyzacji testów mobilnych
- Samouczek dotyczący sieci komputerowych: kompletny przewodnik
- Samouczek narzędzia do testowania dostępności WAVE
- Framework BDD (Behavior Driven Development): kompletny samouczek