specflow tutorial ultimate guide bdd tool
Пълно ръководство за Specflow и поведенческо развитие (BDD) Урок:
Какво е Specflow?
Specflow е рамка за тестване, поддържаща BDD практики в .NET framework. Това е рамка с отворен код, хоствана на GitHub. Той помага при използването на ATDD (Разработване на драйвер за тест за приемане) за .NET приложения. С това можем да дефинираме сценарий на обикновен английски, дефиниран от език Корнишон, който е ясно разбираем за всеки.
В подхода на BDD има различни инструменти за писане на тестове като Cucumber / JBehave за Java, маруля за Python, Jasmine за Javascript, Specflow за .NET.
BDD (Behaviour Driven Development) е набор от практики или подход, подобен на TDD (Test Driven Development), който има за цел да преодолее пропастта в комуникацията между различни заинтересовани страни като Product, Developers и Testers.
Крайната цел на подхода BDD е да създаде бизнес изисквания, които да бъдат разбрани от целия екип, така че да се избегнат недоразумения и да помогне за изпращането на разработваната функция по най-приемливия начин.
Пълна серия уроци за Specflow:
Прочетете Пълна серия Specflow Training за по-добро разбиране на концепцията.
Урок # 1: Въведение в Specflow BDD Tool (Този урок)
Урок # 2: Пример за спектрометрия и селен
Урок № 3: Обвързване на спектъра и разширени концепции
Урок № 4: Стъпка Аргумент Трансформации и таблици за спектри
Урок № 5: Specflow Жива документация с кисели краставички
Урок # 6: Генератор на отчети за спектъра
Урок № 7: Въпроси за интервю за Specflow
Кратък преглед на уроци в серията Specflow:
Урок # | Описание |
---|---|
7 | Въпроси за интервю за Specflow В този урок е включен списък с най-популярните въпроси и отговори за интервю за Specflow, за да можете да пробиете успешно всяко интервю за Specflow при първия опит. |
един | Въведение в Specflow BDD Tool (Този урок) Този уводен урок ще ви обясни подробно всичко за Specflow. Specflow е рамка за тестване, поддържаща BDD практики в .NET framework. Това е рамка с отворен код, хоствана на GitHub. Той помага при използването на ATDD (Разработване на драйвер за тест за приемане) за .NET приложения. |
две | Пример за спектрометрия и селен Този урок ще се фокусира върху интеграцията на Selenium с рамката Specflow чрез прост тестов сценарий за търсене на видео в приложението Youtube. Също така ще проверите как да споделяте данни в различни обвързвания чрез полета на частния клас. |
3 | Пример за спектрометрия и селен Този урок ще се фокусира върху интеграцията на Selenium с рамката Specflow чрез прост тестов сценарий за търсене на видео в приложението Youtube. Също така ще проверите как да споделяте данни в различни обвързвания чрез полета на частния клас. |
4 | Стъпка Аргумент Трансформации и таблици за спектри Този информативен урок за Specflow ще разкаже подробно за трансформациите на Step Argument, които позволяват преобразуване на персонализирани типове за аргументи на Specflow, за да се избегне шаблонния код и таблиците на Specflow са полезни, когато трябва да предадете много полета / данни в една стъпка в удобна за потребителя таблица формат. |
5 | Specflow Жива документация с кисели краставички От този урок за Specflow ще се запознаете с това как да генерирате добре изглеждаща жива документация чрез рамка с отворен код, наречена туршии, като използвате съществуващите си Specflow файлове. |
6 | Генератор на отчети за спектъра В този урок за отчитане на Specflow ще научите начините за изпълнение на тестове за характеристики на Specflow заедно с генерирането на HTML отчети чрез изпълнимия файл Specflow. |
Нека започнем с първия урок от тази поредица.
Какво ще научите:
Въведение в Specflow BDD Tool
Гледайте видео урока:
Ето видео урок за Specflow и поведенческо развитие:
Характеристики на BDD
Основните характеристики на BDD са изброени по-долу:
# 1) Той се опитва да дефинира поведението на разработваната система или функция чрез пример или сценарий. Например, ако изграждате просто приложение за калкулатор, тогава различните поведения включват събиране, умножение, деление и т.н.
Следователно чрез BDD всички заинтересовани страни първо ще се срещнат, за да решат поведението на приложението като Addition и ще имат сценарии, както е показано по-долу.
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80
Ако видите горното представяне, това е сценарий на обикновен английски, който е ясно разбираем за всеки и прави изискванията за дадена функция ясни (според критериите за приемане). Следователно първата стъпка е да се формулират тези изисквания.
# две) Сега с набор от тези сценарии, QA пише тестове срещу тях и това първоначално ще се провали, тъй като функцията все още не е разработена.
# 3) Сега разработчикът пише код на функция и изпълнява тези тестове отново.
# 4) Тестовете могат да преминат или да не успеят. Ако не успеят - рефакторирайте кода и повторете процеса
# 5) След приключване на рефакторинга на кода всички сценарии / тестове трябва да преминат.
Следователно, по същество BDD използва TDD подход и го извежда на следващото ниво, като има някои общи лесно разбираеми спецификации под формата на сценарии. Те също така представляват документацията за характеристиките сама по себе си.
В подхода на BDD има различни инструменти за писане на тестове като Cucumber / JBehave за Java, маруля за Python , Жасмин за Javascript, Specflow за .NET.
въпроси и отговори за интервю за информатика pdf
В този урок ще се съсредоточим върху Specflow.
Прочетете също => Най-добрите BDD инструменти и рамка за тестване
Ключовите думи - Дадени, кога и тогава
От света на модулните тестове повечето от нас са запознати с 3 А, т.е. подреждане, действие и утвърждаване. Сега, като се има предвид, кога и тогава са заместителите на тези в света на BDD.
Да вземем Пример за разбиране на всеки един от тях. Да предположим, че изброявате сценарий за валидиране на продукт, който се добавя към пазарската кошница на приложение за електронна търговия, което изисква да сте влезли като предварително условие.
Спецификацията може да бъде написана по следния начин:
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
Дадено :Това се използва за описание на набор от предварителни условия за дефинирания сценарий. Например в примера предпоставката на сценария е влязъл клиент. Следователно сравнение с Подредете аналогия в единичен тест, изпълнението на стъпката ще трябва да гарантира, че има регистриран клиент.
Кога :Това се използва за описание на действие или стъпка на изпълнение. В примера това показва, че клиентът се опитва да добави продукт към пазарската си кошница. Следователно изпълнението на стъпката за тази стъпка ще се погрижи за симулационния код за добавяне на продукт в количката. Това може да се сравни с Закон стъпка в модулните тестове.
Тогава :Това се използва за описание на резултата от сценария и по същество къде трябва да се поставят валидациите. Може да се сравни с Утвърждавайте стъпка в света за тестване на модули. В примера тук изпълнението на стъпката ще потвърди дали продуктът е действително добавен и количеството е същото като избраното от клиента.
Файл на характеристиките
Файлът на характеристиките по същество представлява групиране на множество сценарии за приложението, което се разработва или тества. Също така може просто да се разглежда като различни модули на приложението, чрез които приложението може да бъде разделено логически.
Например:
Приложението за електронна търговия може да реши да има различни файлове с функции на високо ниво, като:
- Функция за влизане / излизане
- Карта за пазаруване
- Плащане и т.н.
Какво е Specflow?
Specflow е инструмент, поддържащ BDD практики в .NET framework. Това е рамка с отворен код, хоствана на GitHub. Той помага при използването на ATDD (Разработване на драйвер за тест за приемане) за .NET приложения.
Обвързването на бизнес изискванията за приложение, използвайки парадигмата Specification By Example, помага за по-доброто разбиране на поведението на приложението от всички заинтересовани страни и по този начин води до изпращане на продукта с правилни очаквания.
Той използва Корнишон синтаксис за създаване на функции и сценарии. Той също така има активна дискусия / разработчик форум .
Specflow - Първи стъпки
В този раздел ще разгледаме инсталирането на specflow в Visual Studio IDE и създаването на функционални файлове за просто приложение на String Utility.
Относно примерното приложение
Ще илюстрираме различни характеристики на рамката Specflow в този урок, използвайки приложение за калкулатор, което има функции / интерфейси за предоставяне на различни операции като:
- Добавяне на 2 числа.
- Изваждане на 2 числа.
- Деление и умножаване на 2 числа.
- Намиране на Квадратния корен от даденото число.
Specflow Ръководство за инсталиране
Инсталирането на Specflow е двуетапен процес
# 1) Инсталиране на необходимите плъгини в Visual Studio IDE.
- За да инсталирате приставката specflow, отворете Tools -> Extension & Updates.
- Сега щракнете върху „Онлайн“ в левия панел.
- Сега потърсете specflow в десния панел.
- От резултатите от търсенето изберете „Specflow за Visual Studio 2017“.
# две) Настройване на проекта с файлове с функции и дефиниции на стъпки.
- Създайте прост нов проект в Visual Studio. Можем да създадем всякакъв вид проект като библиотека на класове / приложение на конзола / проект за тестови модули и т.н. За по-голяма простота започваме проект за библиотека на класове. Наименувайте проекта като „SpecflowBasic“.
- За да стартираме сценариите на Specflow, които ще създадем, ни е необходим тестов бегач. Specflow предоставя бегач от кутията, наречен Specflow + Runner (който е платена версия, а безплатната версия въвежда закъснение).
(Налични са и други бегачи за NUnit и MsTest, които ще видим в следващите статии от тази поредица).
За да инсталирате Specflow + Runner - Отидете до Инструменти -> NuGet Package Manager -> Package Manager Console.
След като се отвори конзолата на Package Manager - изпълнете командата.
Install-Package SpecRun.SpecFlow
- Също така, за да утвърдим стойностите, ще ни е необходима помощта на тестова рамка. NUnit може да бъде една от опциите, а другите включват MsTest и др. За да инсталирате рамката NUnit в приложението, отворете конзолата на Package Manager и въведете командата.
Install-Package NUnit
# 3) Създайте нов клас, наречен „CalculatorApplication“, който ще се превърне в нашето тествано приложение. Това е прост клас, който има функции за извършване на събиране / умножение / деление / квадратен корен и т.н., за дадения вход. Ето как изглежда класът CalculatorApplication.
# 4) След като пакетът бъде инсталиран, създайте 2 папки в проекта и ги наименувайте като функции и дефиниции на стъпки, за да съхранявате съответно файловете на характеристиките и обвързването на стъпки. Ще обсъдим подробно причината за тази организация на папките за дефиниции на функции и стъпки.
# 5) Сега в папката с функции добавете нов файл с функции и го наименувайте като CalculatorFeature.
Ще видите, че по подразбиране файлът с функции има някакво описание в Feature and Scenario.
Заменете това с това, което ще тестваме.
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) Генериране на дефиниции на стъпки: Specflow предоставя автоматизиран начин за генериране на обвързвания / внедряване за различните стъпки в сценариите на файловите функции. Това може да се постигне чрез щракване с десния бутон на мишката върху файла на характеристиките и щракване върху „Генериране на дефиниции на стъпки“.
Тази стъпка не гарантира изпълнение за всички стъпки, но се опитва най-добре да групира общите стъпки в сценарии и да използва повторно възможно най-много обвързвания. Това обаче прави работата да избягва шаблонния код всеки път, когато трябва да се изпълни сценарийна стъпка.
След щракване „Генериране на дефиниции на стъпки“ , Ще се покаже прозорец с изброени идентифицирани изпълнения на стъпки, които процесорът е открил. Човек може да избере или отмени избора според изискванията.
В следващите раздели ще разгледаме повече подробности за падащото меню Стил, показано на горната екранна снимка.
Засега нека оставим всички избрани с настройки по подразбиране. Кликването върху визуализацията ще покаже моментна снимка на това как ще изглежда внедряването.
След създаването на дефиниции на стъпки, все пак, ако има някои неприложени стъпки, файловете с функции имат визуален начин за идентифициране на неприложените приложения. Той показва тези стъпки в различен цвят, като прави абсолютно лесно да се знае, че има някои стъпки, които все още нямат изпълнение (или имат неясни дефиниции на стъпки).
Примерен екран на изображението по-долу:
Забележка: Дефинициите на стъпка могат да бъдат създадени и ръчно - всеки .cs файл, имащ атрибут (Binding), е клас на изпълнение на стъпка и синтаксисът на корнишона ще търси съвпадение на изпълнението на дадената стъпка на сценария
Екзекуция
Тъй като вече добавихме Specflow + Runner в горния раздел, изпълнението на Сценариите е доста лесно (тъй като това е оценителна версия на Specrun, тя въвежда променливо закъснение от 10-20s преди изпълнението на сценариите. Това закъснение не е налице за регистрирани варианти и други вкусове на Specrun runner като NUnit и MsTest).
Ако всички стъпки имат не е било внедрени и ако все още има обвързвания, които имат чакащо състояние. Тогава изходът ще се покаже като чакащ.
Нека се опитаме да стартираме тези тестове / сценарии в този момент, когато няма изпълнение за обвързването и всички сценарии са в очакване.
Сега нека се опитаме да приложим класа CalculatorApplication с методите, които искаме да тестваме, т.е.да добавяме, изваждаме, умножаваме, делим и sqrt.
По-долу е даден пример на кода за това как изглежда нашият клас 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; } } }
След като приложението е готово, нека се опитаме да разберем начините за прилагане на обвързването за всяка от стъпките на сценария.
Нека да видим стъпка по стъпка подход за прилагане на следните:
- Първо, трябва да имаме екземпляр на приложението, който трябва да бъде тестван. За улеснение можем да създадем екземпляр на AUT (Application Under Test class) в обвързването на стъпки и да използваме инстанцирания екземпляр, за да извикаме различни методи / функции според стъпката, която е приложена.
- За да уловим входа и изхода, ние декларираме променливи, за да съхраним тези стойности, за да извикаме функции в екземпляра на приложението.
Нека да видим изпълнението от край до край за всички обвързвания, включени в валидирането на функцията за добавяне (останалите сценарии просто разширяват това).
Сценарият за добавяне изглежда както е показано по-долу:
Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should
Нека да видим изпълнението на стъпката за всяка от тези отделни стъпки. За използване на всички стъпкови реализации ние декларираме екземпляр на тествано приложение, както и променливи, които да съдържат входни и изходни променливи, както е показано по-долу:
// instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output;
Нека да видим изпълнението на стъпките по сценарий една по една.
Етап 1: Като се има предвид, че съм предоставил 70 и 20 като входовете.
(Given(@'I have provided (.*) and (.*) as the inputs')) public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; }
Тук току-що инициализирахме входните променливи със стойностите, предадени от стъпките на сценария. p0 и p1 са стойностите, които се предават от стъпката на сценария и ще бъдат инициализирани съответно като 70 и 20.
Стъпка 2: Когато натисна добавяне.
(When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); }
Това е стъпката за изпълнение (или действие), при която действителният метод се извиква в тестваното приложение. Забележете, че тъй като входните променливи input1 и input2 вече съдържат стойностите, предадени в Стъпка 1, екземплярът на приложението може да извика метода с тези променливи.
Стъпка 3: - Тогава резултатът трябва да бъде 90.
(Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
Това е стъпката за проверка (или утвърждаване), при която изходът се генерира от извикването на метода и екземплярът на приложението се проверява спрямо очаквания изход.
Забележете, че Утвърждавайте използваната ключова дума е от NUnit Framework, която връща true или false в зависимост от валидирането / очакването, което е зададено. В случай че върне false, това ще доведе до неуспех на изпълнението на Step и това ще покаже резултата от сценария като неуспешен.
въпроси и отговори за интервю за софтуерно тестване за 2-годишен опит
Също така, имайте предвид, че изходната променлива получава стойността от предишната стъпка, където действителният метод е бил извикан в екземпляра на приложението.
Подобно на горното, изпълнението на стъпка за останалите стъпки на сценария се извършва по същия начин, разликата е в извикването на различни методи в екземпляра на приложението и утвърждаването на различни изходни стойности.
След като бъдат изпълнени всички стъпки от сценария, тестовете могат да бъдат изпълнени.
Резултатният изход ще изглежда както е показано по-долу:
Можете също да видите резултата от индивидуалния сценарий, в който са изброени и резултатите от отделните стъпки:
Заключение
Надявам се, че тази статия ще ви даде основно разбиране за това какво е BDD и какви са инструментите, които поддържат BDD за .NET, където разгледахме Specflow.
Също така обсъдихме инсталирането и изпълнението на файловете с характеристики на Specflow с помощта на примерно приложение.
Кодови файлове
Кодовите файлове, използвани в приложението, са показани по-долу:
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; } } }
пакети.config
Нашият предстоящ урок ще ви запознае с примера от край до край за използването на Specflow и Selenium Webdriver!
Препоръчително четене
- Уроци за задълбочено затъмнение за начинаещи
- Урок за TestLink: Ръководство за неспециалист към инструмента за управление на тестове TestLink (Урок №1)
- Урок за Bugzilla: Ръчен урок за инструмент за управление на дефекти
- Урок TestComplete: Изчерпателно ръководство за инструментите за тестване на GUI за начинаещи
- SeeTest Automation Tutorial: Ръководство за инструменти за автоматизация на мобилни тестове
- Урок за компютърни мрежи: Най-доброто ръководство
- Урок за инструмент за тестване на достъпност на WAVE
- Рамка за BDD (поведенческо развитие): Пълен урок