specflow tutorial ultimate guide bdd tool
Комплетан водич за спецфлов и понашање вођен развојем (БДД) Туториал:
Шта је Спецфлов?
Спецфлов је оквир за тестирање који подржава праксе БДД-а у .НЕТ оквиру. То је оквир отвореног кода хостован на ГитХуб-у. Помаже у коришћењу АТДД (Развој драјвера за прихватни тест) за .НЕТ апликације. Овим можемо да дефинишемо сценарио на обичном енглеском језику дефинисан Гхеркин језиком који је свима јасно разумљив.
Постоје различити алати за писање тестова у БДД приступу као што су Цуцумбер / ЈБехаве за Јаву, Зелена салата за Питхон, Јасмине за Јавасцрипт, Спецфлов за .НЕТ.
БДД (Бехавиоур Дривен Девелопмент) је скуп пракси или приступ сличан ТДД-у (Тест Дривен Девелопмент), чији је циљ да премости јаз у комуникацији између различитих актера као што су Продуцт, Девелоперс и Тестерс.
Крајњи циљ БДД приступа је стварање пословних захтева које би могао разумети цео тим како би се избегли неспоразуми и помаже у испоруци функције која се развија на најприхватљивији начин.
Комплетна серија водича о спектлу:
Прочитајте Комплетна серија спецфлов тренинга ради бољег разумевања концепта.
Туториал # 1: Увод у Спецфлов БДД алатку (Овај водич)
Туториал # 2: Пример спектра и селена
Туториал # 3: Спецфлов везивање и напредни концепти
Туториал # 4: Корак Аргументне трансформације и табеле спектра
Водич бр. 5: Спецфлов дневна документација са киселим краставцима
Лекција # 6: Генератор извештаја о спектлу
Туториал # 7: Спецфлов интервју питања
Кратки преглед водича у серији Спецфлов:
Приручник # | Опис |
---|---|
7 | Спецфлов интервју питања Листа најпопуларнијих питања и одговора са интервјуима за Спецфлов укључени су у ову лекцију како бисте успешно разбили било који интервју из Спецфлов-а из првог покушаја. |
1 | Увод у Спецфлов БДД алатку (Овај водич) Овај уводни водич детаљно ће вам објаснити све о Спецфлов-у. Спецфлов је оквир за тестирање који подржава праксе БДД-а у .НЕТ оквиру. То је оквир отвореног кода хостован на ГитХуб-у. Помаже у коришћењу АТДД (Развој драјвера за прихватни тест) за .НЕТ апликације. |
два | Пример спектра и селена Овај водич ће се фокусирати на интеграцију селена са оквиром Спецфлов кроз једноставан тест сценарија претраживања видео записа у апликацији Иоутубе. Такође ћете проверити како делити податке између различитих веза преко поља приватне класе. |
3 | Пример спектра и селена Овај водич ће се фокусирати на интеграцију селена са оквиром Спецфлов кроз једноставан тест сценарија претраживања видео записа у апликацији Иоутубе. Такође ћете проверити како делити податке између различитих веза преко поља приватне класе. |
4 | Корак Аргументне трансформације и табеле спектра Овај информативни водич за Спецфлов детаљно ће објаснити трансформације корака аргумената које омогућавају претварање прилагођених типова за аргументе Спецфлов како би се избегао основни код и таблице Спецфлов добро дођу када треба да предате пуно поља / података у једном кораку у табели прилагођеној кориснику формат. |
5 | Спецфлов дневна документација са киселим краставцима Из овог водича за Спецфлов сазнаћете како да генеришете добру живу документацију кроз оквир отвореног кода назван кисели краставци помоћу постојећих датотека Спецфлов. |
6 | Генератор извештаја о спектлу У овом водичу за извештавање о спектлу научићете начине извршавања тестова карактеристика Спецфлов, заједно са генерисањем ХТМЛ извештаја кроз извршну датотеку Спецфлов. |
Почнимо са првим упутством у овој серији.
Шта ћете научити:
Увод у Спецфлов БДД алатку
Погледајте видео водич:
Ево видео упутства о развоју спецфлов-а и понашања:
Карактеристике БДД-а
Кључне карактеристике БДД-а наведене су у наставку:
# 1) Покушава да дефинише понашање система или функције која се развија кроз пример или сценарио. На пример, ако градите једноставну апликацију Калкулатор, тада различита понашања укључују сабирање, множење, дељење итд.
Отуда ће се кроз БДД све заинтересоване стране прво састати како би одлучиле о понашању апликације попут Додавања и имаће сценарије како је приказано у наставку.
Given, I have 2 numbers 30 and 50 as input When I add these 2 numbers Then I should get an output of 80
Ако видите горњу представу, то је сценарио на обичном енглеском језику који је свима јасно разумљив и који јасно поставља захтеве за функцију (према критеријумима за прихватање). Стога је први корак артикулисање ових захтева.
#два) Сада са низом ових сценарија, КА пише тестове против њих и ово у почетку неће успети јер функција још није развијена.
# 3) Сада програмер пише код функције и поново извршава ове тестове.
# 4) Тестови могу проћи или не успети. Ако не успеју - преправите код и поновите поступак
# 5) Када се рефакторирање кода заврши, сви сценарији / тестови би требали проћи.
Отуда, у основи, БДД користи ТДД приступ и подиже га на следећи ниво тако што има неке заједничке лако разумљиве спецификације у облику сценарија. Они такође представљају документацију о карактеристикама саме по себи.
Постоје различити алати за писање тестова у БДД приступу попут Цуцумбер / ЈБехаве за Јаву, Зелена салата за Питхон , Јасмине за Јавасцрипт, Спецфлов за .НЕТ.
најбољи уређивач текста за питхон виндовс
У овом упутству ћемо се фокусирати на Спецфлов.
Такође прочитајте => Врхунски БДД алати и оквир за тестирање
Кључне речи - дате, када и тада
Из света јединичних тестирања, већина нас је упозната са 3 А, тј. Распореди, изврши и потврди. Сада, с обзиром на то када и када су замјене за ове у БДД свијету.
Узмимо Пример за разумевање сваке од ових. Претпоставимо да наводите сценарио за потврђивање производа који се додаје у корпу за куповину апликације за е-трговину која захтева да будете пријављени као предуслов.
Спецификација се може написати на следећи начин:
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
Дато :Ово се користи за описивање низа предуслова за сценарио који се дефинише. На пример, у примеру, предуслов сценарија је пријављени купац. Отуда поређење са Уредити аналогно јединственом тесту, имплементација корака мораће да осигура да је пријављени купац.
Када :Ово се користи за описивање радње или корака извршења. У примеру показује да купац покушава да дода производ у своју корпу за куповину. Стога ће се имплементација корака за овај корак побринути за симулациони код за додавање производа у корпу. Ово се може упоредити са Закон корак у Унит тестовима.
Онда :Ово се користи за опис исхода сценарија и у суштини где треба да се ставе валидације. Може се упоредити са Увери корак у свету тестирања јединица. У примеру овде, примена корака ће утврдити да ли је производ стварно додан и да ли је количина иста она коју је купца изабрао.
Датотека карактеристика
Датотека карактеристика у основи представља групу више сценарија за апликацију која се развија или тестира. Такође се може једноставно сматрати различитим модулима апликације помоћу којих се апликација може логички одвојити.
На пример:
Апликација за е-трговину може да одлучи да има различите датотеке карактеристика високог нивоа, као што су:
- Функција пријављивања / одјаве
- Колица за куповину
- Плаћање итд.
Шта је Спецфлов?
Спецфлов је алат који подржава праксе БДД-а у .НЕТ оквиру. То је оквир отвореног кода хостован на ГитХуб-у. Помаже у коришћењу АТДД (Развој драјвера за прихватни тест) за .НЕТ апликације.
Везивање пословних захтева за апликацију помоћу парадигме Специфицатион Би Екампле помаже у бољем разумевању понашања апликације од стране свих заинтересованих страна и тиме резултира испоруком производа са тачним очекивањима.
Користи Корнишон синтакса за стварање карактеристика и сценарија. Такође има активну дискусију / програмера форум .
Спецфлов - Први кораци
У овом одељку истражићемо инсталирање спецфлов-а у Висуал Студио ИДЕ и стварање датотека карактеристика за једноставну услужну апликацију Стринг.
О узорку пријаве
Илустроваћемо различите карактеристике оквира Спецфлов у овом упутству помоћу апликације Калкулатор која има функције / интерфејсе за пружање различитих операција попут:
- Сабирање 2 броја.
- Одузимање 2 броја.
- Дељење и множење 2 броја.
- Проналажење квадратног корена датог броја.
Спецфлов Упутство за инсталацију
Инсталација спецфлов-а је процес у два корака
# 1) Инсталирање потребних додатака у Висуал Студио ИДЕ.
- Да бисте инсталирали додатак за спецфлов, идите на Тоолс -> Ектенсион & Упдатес.
- Сада кликните на „Онлине“ на левој табли.
- Сада потражите спецфлов на десној табли.
- Из резултата претраге изаберите „Спецфлов за Висуал Студио 2017“.
#два) Постављање пројекта са датотекама карактеристика и дефиницијама корака.
- Направите једноставан нови пројекат у Висуал Студио-у. Можемо створити било коју врсту пројекта, као што су Цласс Либрари / Цонсоле Апплицатион / Унит тест пројекат итд. Ради једноставности преузимамо пројекат Цласс Либрари. Назовите пројекат „СпецфловБасиц“.
- Да бисмо покренули Спецфлов сценарије које ћемо створити, потребан нам је тест руннер. Спецфлов нуди тркач изван оквира зван Спецфлов + Руннер (који је плаћена верзија, а бесплатна верзија уводи кашњење).
(Остали тркачи су такође доступни за НУнит и МсТест што ћемо видети у даљим чланцима ове серије).
Да бисте инсталирали Спецфлов + Руннер - Идите на Алати -> НуГет управитељ пакета -> Конзола управитеља пакета.
Једном када се отвори конзола Пацкаге Манагер - покрените наредбу.
Install-Package SpecRun.SpecFlow
- Такође, да бисмо утврдили вредности, требат ће нам помоћ оквира за тестирање. НУнит може бити једна од опција, а остале укључују МсТест итд. Да бисте инсталирали НУнит фрамеворк у апликацију, отворите Пацкаге Манагер Цонсоле и унесите команду.
Install-Package NUnit
# 3) Направите нову класу под називом „ЦалцулаторАпплицатион“ која ће постати наша апликација на тестирању. Ово је једноставна класа која има функције за извођење сабирања / множења / дељења / квадратног корена итд. За дати улаз. Овако изгледа класа ЦалцулаторАпплицатион.
# 4) Једном када се пакет инсталира, креирајте 2 фасцикле у пројекту и назовите их као Карактеристике и Дефиниције корака за чување датотека карактеристика односно повезивања корака. Детаљно ћемо размотрити разлог за ову организацију директоријума за дефиниције карактеристика и корака.
# 5) Сада у фасциклу својстава додајте нову датотеку функције и дајте јој име КалкулаторФеатура.
Видели бисте да датотека подразумеваних датотека подразумевано има неки опис у функцији и сценарију.
Замените то оним што ћемо тестирати.
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) Генерирање дефиниција корака: Спецфлов пружа аутоматизовани начин генерисања веза / имплементације за различите кораке у сценаријима датотека карактеристика. То се може постићи десним кликом на датотеку функције и кликом на „Генериши дефиниције корака“.
Овај корак не гарантује примену за све кораке, али настоји најбоље да групише уобичајене кораке у сценаријима и поново користи што више веза. Међутим, то чини посао избегавања основног кода сваки пут када треба применити корак сценарија.
Након клика „Генериши дефиниције корака“ , Појавиће се прозор с пописом идентификованих имплементација корака које је процесор открио. Може се одабрати или поништити избор у складу са захтевима.
У каснијим одељцима ћемо размотрити више детаља о падајућем менију Стил приказан на горњој снимци екрана.
За сада, нека буду сви изабрани са подразумеваним подешавањима. Кликом на Преглед приказаће се снимак како ће имплементација изгледати.
Након креирања дефиниција корака, и даље, ако постоје неки неизведени кораци, датотеке функција имају визуелни начин идентификовања непроведених апликација. Те кораке приказује у другој боји чинећи да је апсолутно једноставно знати да постоје неки кораци који још увек немају примену (или имају нејасне дефиниције корака).
Узорак приказаних слика на екрану:
Белешка: Дефиниције корака могу се креирати и ручно - било која .цс датотека која има (Биндинг) атрибут је класа имплементације корака и синтакса Гхеркин ће тражити подударање имплементације датог корака сценарија
Извршење
Као што смо већ додали Спецфлов + Руннер у горњи одељак, извршавање Сценарија је прилично једноставно (с обзиром да је реч о процењивачкој верзији Спецрун-а, уводи променљиво кашњење од 10-20с пре извршавања сценарија., Ово одлагање није присутно за регистроване верзије и други укуси Спецрун руннер-а попут НУнит и МсТест).
Ако сви кораци имају није имплементиран и ако још увек постоје везивања која имају стање на чекању. Тада ће се излаз приказати као на чекању.
Покушајмо да покренемо ове тестове / сценарије у овом тренутку када нема имплементације за везивања, а сви сценарији су на чекању.
Покушајмо сада да применимо класу ЦалцулаторАпплицатион са методама које желимо да тестирамо, тј. Сабирамо, одузимамо, множимо, делимо и скрт.
Доље је дат пример кода како изгледа наша класа ЦалцулаторАпплицатион:
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; } } }
Када апликација буде спремна, покушајмо да утврдимо начине примене веза за сваки од корака сценарија.
Погледајмо корак по корак приступ за примену ових:
- Прво, морамо да имамо примерак апликације који треба да се тестира. Ради једноставности, можемо инстанцирати АУТ (класа апликације под тестом) у везивањима корака и користити инстанцирану инстанцу да заправо позовемо различите методе / функције према кораку који је примењен.
- Да бисмо ухватили улаз и излаз, декларишемо променљиве да држе ове вредности како бисмо позвали функције на инстанци апликације.
Погледајмо имплементацију од краја до краја за све везе које су укључене у валидацију функције додавања (Остали сценарији ово једноставно проширују).
Изгледа да је сценарио Додај приказан доле:
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; }
Овде смо управо иницијализовали улазне променљиве вредностима прослеђеним из корака сценарија. п0 и п1 су вредности које се преносе из корака сценарија и биће иницијализоване као 70 и 20 респективно.
Корак 2: Кад притиснем адд.
(When(@'I press add')) public void WhenIPressAdd() { output = app.add(input1, input2); }
Ово је корак Извршење (или Акт) где се у апликацији која се тестира позива стварни метод. Приметите да пошто улазне променљиве инпут1 и инпут2 већ садрже вредности прослеђене у кораку1, инстанца апликације може позвати метод са овим променљивим.
Корак 3: - Тада би резултат требао бити 90.
(Then(@'the result should be (.*)')) public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }
Ово је корак валидације (или потврде) у којем се излаз генерише позивом методе, а инстанца апликације валидира у односу на очекивани излаз.
Приметите, да Увери употребљена кључна реч је из НУнит Фрамеворк-а, која враћа труе или фалсе у зависности од постављене провере ваљаности / очекивања. У случају да се врати фалсе, узроковаће неуспех имплементације Корака, а резултат сценарија ће се приказати као неуспех.
како уклонити елементе из низа јава
Такође, имајте на уму да променљива излаза добија вредност из претходног корака где је стварна метода била позвана на инстанци апликације.
Слично претходном, имплементације корака за остале кораке сценарија изводе се на исти начин, разлика је у позивању различитих метода на инстанци апликације и утврђивању различитих излазних вредности.
Једном када су сви кораци сценарија имплементирани, тестови се могу извршити.
Резултат ће изгледати као што је приказано доле:
Такође можете погледати резултате појединачног сценарија који такође наводе резултате појединих корака:
Закључак
Надам се да би вам овај чланак дао основно разумевање шта је БДД и који су алати који подржавају БДД за .НЕТ где смо покривали Спецфлов.
Такође смо разговарали о инсталирању и извршавању датотека карактеристика Спецфлов уз помоћ примера апликације.
Цоде Филес
Датотеке кода које се користе у апликацији приказане су у наставку:
ЦалцулаторФеатуреСтепс.цс
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); } } }
ЦалцулаторАпплицатион.цс
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; } } }
пакети.цонфиг
Наш предстојећи водич ће вас упознати са примером коришћења Спецфлов и Селениум Вебдривер од краја до краја!
Препоручено читање
- Дубински водичи за помрачење за почетнике
- Водич за ТестЛинк: Водич за лаике за алатку за управљање тестом ТестЛинк (Туториал # 1)
- Водич за Бугзилла: Практични приручник за алат за управљање недостацима
- Водич за ТестЦомплете: Свеобухватан водич за алат за тестирање ГУИ-а за почетнике
- Водич за аутоматизацију СееТеста: Водич за алат за аутоматизацију мобилних тестова
- Водич за рачунарско умрежавање: Крајњи водич
- Водич за алат за тестирање приступачности ВАВЕ-а
- Оквир БДД (Бехавиоур Дривен Девелопмент): Комплетна лекција