Статьи

Написание тестов BDD с помощью Cucumber JVM

Cucumber JVM — отличный инструмент для написания ваших тестов BDD. В этой статье я хотел бы представить введение в BDD с Cucumber JVM.

Давайте начнем…

Что такое BDD?

проблемы

В двух словах, BDD пытается решить проблему «понимания требований с помощью примеров».

BDD

Инструменты BDD

Есть много инструментов, доступных для BDD, и, что интересно, вы можете найти в списке довольно много овощных названий 🙂 Огурец, Шпинат, Салат, JBehave, Твист и т. Д. Из этих огурцов просто и удобно пользоваться.

Огурцы-JVM

Cucumber написан на Ruby, а Cucumber JVM — это реализация cucumber для популярных языков JVM, таких как Java, Scala, Groovy, Clojure и т. Д.

Стек огурцов

стек
Мы пишем функции и сценарии на «вездесущем» языке, а затем реализуем их с определениями шагов и кодом поддержки.

Особенность файла и огурчик

Сначала вы пишете файл .feature. Файл объектов обычно начинается с ключевого слова Feature, за которым следует сценарий . Каждый сценарий состоит из нескольких этапов. Для этого огурец использует огурца. Gherkin — это читаемый бизнес, предметно-ориентированный язык, который позволяет вам описывать поведение программного обеспечения без подробного описания его реализации.

Пример:

1
2
3
4
5
6
Feature: Placing bets      
 Scenario: Place a bet with cash balance        
 Given I have an account with cash balance of 100       
 When I place a bet of 10 on "SB_PRE_MATCH"     
 Then the bet should be placed successfully     
 And the remaining balance in my account should be 90

Как вы можете видеть, файл пространственных объектов больше похож на разговорный язык с корнишонными ключевыми словами, такими как Feature, Scenario, Given, When, Then, And, But, # (для комментариев).

Определения шагов

После того, как вы завершили файл компонента с другими сценариями, следующим этапом будет оживить сценарии, написав определения шагов. Cucumber использует регулярное выражение для сопоставления шагов с фактическими определениями шагов. Определения шагов могут быть написаны на выбранном вами языке JVM. Ключевые слова игнорируются при отображении определений шагов. Поэтому, ссылаясь на приведенную выше примерную функцию, мы должны написать определение шага для всех четырех шагов. Используйте плагин IDE для создания заглушки для вас.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import cucumber.api.java.en.And;       
import cucumber.api.java.en.Given;      
import cucumber.api.java.en.Then;       
import cucumber.api.java.en.When;       
public class PlaceBetStepDefs {     
 @Given("^I have an account with cash balance of (\\d+) $")     
 public void accountWithBalance(int balance) throws Throwable {     
 // Write code here that turns the phrase above into concrete actions       
 //throw new PendingException();        
 }      
 @When("^I place a bet of (\\d+) on \"(.*?)\"$")        
 public void placeBet(int stake, String product) throws Throwable {     
 // Write code here that turns the phrase above into concrete actions       
 // throw new PendingException();       
 }      
 @Then("^the bet should be placed successfully$")       
 public void theBetShouldBePlacedSuccessfully() throws Throwable {      
 // Write code here that turns the phrase above into concrete actions       
 //throw new PendingException();        
 }      
 @And("^the remaining balance in my account should be (\\d+)$")     
 public void assertRemainingBalance(int remaining) throws Throwable {       
 // Write code here that turns the phrase above into concrete actions       
 //throw new PendingException();        
 }      
}

Код поддержки

Следующим шагом будет подкрепление ваших определений шагов кодом поддержки. Например, вы можете выполнить вызов REST для выполнения шага, выполнить вызов базы данных или использовать веб-драйвер, например, селен. Это полностью зависит от реализации. Получив ответ, вы можете подтвердить его ожидаемыми результатами или сопоставить его с объектами вашего домена. Например, вы можете использовать веб-драйвер Selen для имитации входа на сайт:

01
02
03
04
05
06
07
08
09
10
11
protected WebDriver driver;        
@Before("@startbrowser")        
public void setup() {       
 System.setProperty("webdriver.chrome.driver", "C:\\devel\\projects\\cucumberworkshop\\chromedriver.exe");     
 driver = new ChromeDriver();       
}       
@Given("^I open google$")       
public void I_open_google() throws Throwable {      
 driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);        
 driver.get("https://www.google.co.uk");        
}

Выразительные сценарии

Cucumber предоставляет больше возможностей для лучшей организации ваших сценариев.

  • Фон — используйте это, чтобы определить шаги, которые являются общими для всех сценариев
  • Таблицы данных — Вы можете записать входные данные в виде таблицы
  • Scenario Outline — заполнитель для вашего сценария, который может быть выполнен для набора данных с именем Example.
  • Теги и подпапки для организации ваших функций. Теги больше похожи на заметки для документации.

Внедрение зависимости

Чаще всего вам может понадобиться передать информацию, созданную за один шаг, другому. Например, вы создаете объект домена на первом этапе, а затем вам нужно использовать его на втором этапе. Чистый способ добиться этого — через инъекцию зависимостей. Cucumber предоставляет модули для основных DI-контейнеров, таких как Spring, Guice, Pico и т. Д.

Выполнение огурца

Запустить Cucumber в IDE IntelliJ очень просто. Он также может быть интегрирован с вашей системой сборки. Вы также можете контролировать тесты, которые вы хотите запустить с различными параметрами.

Параметры отчетности

Есть много плагинов, доступных для отчетности. Например, вы можете использовать плагин Master Thought для отчетов.

использованная литература

Книга Cucumber for Java — это отличная книга, и это все, что вам нужно для начала работы. Документация GitHub ссылка Это все, ребята. Надеюсь, вам понравилось. Счастливого Рождества! Наслаждаться.