specflow tutorial ultimate guide bdd tool
Повне керівництво з підручника з розробки та поведінки (BDD):
Що таке Specflow?
Specflow - це тестовий фреймворк, що підтримує практики BDD у .NET framework. Це фреймворк з відкритим кодом, розміщений на GitHub. Це допомагає використовувати ATDD (розробка драйвера перевірки прийнятності) для програм .NET. За допомогою цього ми можемо визначити сценарій простою англійською мовою, визначений мовою огірків, зрозумілий для всіх.
У підході BDD є різні інструменти для написання тестів, такі як Cucumber / JBehave для Java, салат для Python, Jasmine для Javascript, Спектр для .NET.
BDD (Behaviour Driven Development) - це набір практик або підхід, подібний до TDD (Test Driven Development), який спрямований на подолання розриву в спілкуванні між різними зацікавленими сторонами, такими як Product, Developers та Testers.
Кінцева мета підходу BDD полягає у створенні бізнес-вимог, які могли б бути зрозумілі всій команді, щоб уникнути непорозумінь та допомагає доставити розроблювану функцію найбільш прийнятним способом.
Повна навчальна серія Specflow:
Прочитайте Пройдіть серію навчальних програм Specflow для кращого розуміння концепції.
Підручник No1: Вступ до Specflow BDD Tool (Цей підручник)
Підручник No2: Приклад спектру та селену
Підручник No3: Прив'язка спектру та розширені концепції
Підручник No4: Покрокові перетворення аргументів та таблиці спектрів
Підручник No5: Specflow Жива документація з соліннями
Підручник No6: Генератор звітів про спектр
Підручник No7: Запитання щодо інтерв’ю Specflow
Короткий огляд підручників із серії Specflow:
Підручник № | Опис |
---|---|
7 | Запитання щодо інтерв’ю Specflow У цьому посібнику наведено список найпопулярніших запитань та відповідей із інтерв’ю Specflow, які допоможуть вам успішно зламати будь-яке інтерв’ю Specflow з першої спроби. |
1 | Вступ до Specflow BDD Tool (Цей підручник) Цей вступний підручник детально пояснить вам все про Specflow. Specflow - це тестовий фреймворк, що підтримує практики BDD у .NET framework. Це фреймворк з відкритим кодом, розміщений на GitHub. Це допомагає використовувати ATDD (розробка драйвера перевірки прийнятності) для програм .NET. |
два | Приклад спектру та селену Цей підручник буде зосереджений на інтеграції селену з фреймворком Specflow за допомогою простого тестового сценарію пошуку відео в додатку Youtube. Ви також перевірите, як ділитися даними між різними прив'язками через поля приватного класу. |
3 | Приклад спектру та селену Цей підручник буде зосереджений на інтеграції селену з фреймворком Specflow за допомогою простого тестового сценарію пошуку відео в додатку Youtube. Ви також перевірите, як ділитися даними між різними прив'язками через поля приватного класу. |
4 | Покрокові перетворення аргументів та таблиці спектрів У цьому інформативному посібнику зі Specflow будуть детально описані трансформації аргументів кроку, які дозволяють перетворювати спеціальні типи для аргументів Specflow, щоб уникнути зразкового коду, а таблиці Specflow стануть в нагоді, коли вам потрібно передати багато полів / даних за один крок у зручній таблиці формат. |
5 | Specflow Жива документація з соліннями З цього підручника Specflow ви дізнаєтесь, як створювати красиву документацію для життя за допомогою фреймворку з відкритим кодом, який називається соління, за допомогою існуючих файлів Specflow. |
6 | Генератор звітів про спектр У цьому посібнику зі звітування про Specflow ви дізнаєтесь способи виконання тестів функцій Specflow разом із створенням звітів HTML за допомогою виконуваного файлу Specflow. |
Почнемо з першого підручника з цієї серії.
Що ви дізнаєтесь:
Вступ до Specflow BDD Tool
Перегляньте відеоурок:
Ось відео-посібник з розробки Specflow та Behaviour Driven:
Особливості 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, Спектр для .NET.
інструменти тестування перехресного браузера з відкритим кодом -
У цьому підручнику ми зосередимося на 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
Дано :Це використовується для опису набору попередніх умов для сценарію, що визначається. Наприклад, у прикладі передумовою сценарію є зареєстрований клієнт. Отже, порівняння з Організуйте аналогічно модульному тестуванню, крок реалізації повинен забезпечити наявність клієнта, який увійшов до системи.
Коли :Це використовується для опису дії або кроку виконання. У цьому прикладі видно, що клієнт намагається додати товар до свого кошика для покупок. Отже, реалізація кроку для цього кроку подбає про імітаційний код, щоб додати товар у кошик. Це можна порівняти з Дійте крок в модульних тестах.
Потім :Це використовується для опису результату сценарію та, по суті, місця, де слід розмістити перевірки. Це можна порівняти з Стверджувати крок у світ Unit-тестування. У наведеному тут прикладі реалізація кроку стверджуватиме, чи продукт дійсно доданий, і чи така ж кількість, як вибрана замовником.
Файл функцій
Файл функцій є, по суті, групою декількох сценаріїв для програми, що розробляється або тестується. Це також можна просто сприймати як різні модулі програми, за допомогою яких програма може бути логічно розділена.
Наприклад:
Додаток для електронної комерції може вирішити мати різні файли високого рівня, такі як:
- Функціонал входу / виходу
- Магазинний візок
- Оплата тощо
Що таке Specflow?
Specflow - це інструмент, що підтримує практики BDD у .NET framework. Це фреймворк з відкритим кодом, розміщений на GitHub. Це допомагає використовувати ATDD (розробка драйвера перевірки прийнятності) для програм .NET.
Пов’язування бізнес-вимог до програми з використанням парадигми «Специфікація на прикладі» допомагає краще зрозуміти поведінку програми всіма зацікавленими сторонами і, таким чином, призводить до доставки продукту з правильними очікуваннями.
Це використовує Корнішон синтаксис для створення функцій та сценаріїв. Він також має активну дискусію / розробника форуму .
Specflow - Початок роботи
У цьому розділі ми розглянемо встановлення спектру в Visual Studio IDE та створення файлів функцій для простого додатка String Utility.
Про зразок заявки
У цьому посібнику ми проілюструємо різні особливості фреймворку Specflow, використовуючи програму калькулятора, яка має функції / інтерфейси для забезпечення різних операцій, таких як:
- Додавання 2 цифр.
- Віднімання 2 чисел.
- Ділення і множення 2 чисел.
- Знаходження квадратного кореня із заданого числа.
Спектр Керівництво з встановлення
Установка Specflow - це двоетапний процес
# 1) Встановлення необхідних плагінів в середовищі розробки Visual Studio.
- Щоб встановити плагін specflow, перейдіть до Інструменти -> Розширення та оновлення.
- Тепер натисніть «Онлайн» на лівій панелі.
- Тепер знайдіть специфікацію на правій панелі.
- З результатів пошуку виберіть «Specflow для Visual Studio 2017».
# два) Налаштування проекту з файлами функцій та визначеннями кроків.
- Створіть простий новий проект у Visual Studio. Ми можемо створити будь-який проект, такий як бібліотека класів / консольна програма / тестовий проект тощо. Для простоти ми беремося за проект бібліотеки класів. Назвіть проект як “SpecflowBasic”.
- Для того, щоб запустити сценарії Specflow, які ми збираємось створити, нам потрібен тест-драйвер. Specflow надає бігун із коробки, який називається Specflow + Runner (це платна версія, а безкоштовна версія вводить затримку).
(Інші бігуни також доступні для NUnit та MsTest, які ми побачимо в наступних статтях цієї серії).
Щоб встановити Specflow + Runner - Перейдіть до Інструменти -> Менеджер пакунків NuGet -> Консоль менеджера пакетів.
Як тільки консоль диспетчера пакетів відкриється - запустіть команду.
Install-Package SpecRun.SpecFlow
- Крім того, для того, щоб затвердити значення, нам знадобиться допомога тестової основи. NUnit може бути одним із варіантів, а інші включають MsTest тощо. Щоб встановити фреймворк NUnit до програми, відкрийте консоль диспетчера пакетів і введіть команду.
Install-Package NUnit
# 3) Створіть новий клас під назвою “CalculatorApplication”, який стане нашим тестованим додатком. Це простий клас, що має функції для виконання додавання / множення / ділення / квадратного кореня тощо для даного вводу. Ось так виглядає клас CalculatorApplication.
# 4) Після встановлення пакета створіть у проекті 2 папки та назвіть їх як Функції та Визначення кроків для зберігання файлів об’єктів та прив’язок кроків відповідно. Ми детально обговоримо причину організації цієї папки для означень Feature & Step.
# 5) Тепер у папці функцій додайте новий файл Feature та назвіть його як CalculatorFeature.
Ви бачили б, що за замовчуванням файл функції має певний опис у функції та сценарії.
Замініть це тим, що ми збираємось перевірити.
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), є класом реалізації Step, і синтаксис Gherkin шукатиме відповідність реалізації даного кроку сценарію
Виконання
Як ми вже додали Specflow + Runner у наведеному вище розділі, виконання сценаріїв є досить простим (оскільки це оцінна версія Specrun, вона вводить змінну затримку 10-20 секунд до запуску сценаріїв., Ця затримка відсутня для зареєстрованих варіантів та інші смаки бігуна Specrun, такі як 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 (клас під тестуванням програми) у прив’язуваннях кроків і використовувати екземпляр екземпляра для фактичного виклику різних методів / функцій відповідно до реалізованого кроку.
- Для захоплення вхідних та вихідних даних ми оголошуємо змінні, щоб утримувати ці значення, щоб викликати функції в екземплярі програми.
Давайте подивимося наскрізну реалізацію всіх прив’язок, що беруть участь у перевірці функціональності додавання (решта сценаріїв це просто розширюють).
Сценарій додавання виглядає, як показано нижче:
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: Коли я натискаю add.
(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 це призведе до невдалого здійснення кроку, і результат сценарію відобразиться як помилка.
інструменти збору вимог, що використовуються бізнес-аналітиками
Також зауважте, що вихідна змінна отримує значення з попереднього кроку, де фактичний метод був викликаний в екземплярі програми.
Подібно до вищезазначеного, реалізації кроків для решти кроків сценарію виконуються однаково, різниця полягає у виклику різних методів на екземплярі програми та затвердженні різних вихідних значень.
Після реалізації всіх етапів сценарію можна виконати тести.
Результат буде виглядати, як показано нижче:
Ви також можете переглянути результати окремого сценарію, де також перелічені результати окремих кроків:
Висновок
Сподіваємось, ця стаття дасть вам базове розуміння того, що таке 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; } } }
package.config
У нашому підручнику ми коротко розповімо вам про приклад використання наскрізного використання Specflow та Selenium Webdriver!
Рекомендована література
- Поглиблені підручники Eclipse для початківців
- Підручник з TestLink: Посібник для неспеціаліста до інструменту управління тестами TestLink (Підручник №1)
- Підручник з Bugzilla: Посібник із інструментів управління дефектами
- Підручник з TestComplete: Всебічне керівництво для тестування графічного інтерфейсу для початківців
- SeeTest Automation Tutorial: Мобільний інструмент автоматизації тестування
- Підручник з комп’ютерних мереж: Остаточний посібник
- Підручник із інструменту тестування доступності WAVE
- BDD (Behavio-Driven Development) Framework: Повний навчальний посібник