Ogórek (oprogramowanie)
Definicje krokówEdytuj
Kroki w plikach Gherkin „s .feature
można uznać za wywołanie metody. Przed Cucumber może wykonać krok, musi zostać poinformowany, poprzez definicję kroku, jak ten krok powinien zostać wykonany.
Definicje są zapisywane w Rubim i tradycyjnie umieszczane w features/step_definitions/*_steps.rb
. Definicje rozpoczynają się od tych samych słów kluczowych, co ich wywołanie (w tym pełna obsługa języków Gherkina). Każda definicja przyjmuje dwa argumenty
- Wyrażenie regularne lub ciąg znaków ze zmiennymi $
- Blok zawierający kod ruby do wykonania
Przykład używając wyrażeń regularnych
Given /(.*) has a valid Credit or Debit card/ do |name| # Ruby codeend
Przykład użycia łańcuchów i zmiennych $. Zwróć uwagę, że w czasie wykonywania ciąg jest konwertowany na wyrażenie regularne, a każda zmienna $ jest konwertowana tak, aby pasowała do (.*)
.
Given "$name has a valid Credit or Debit card" do |name| # Ruby codeend
HooksEdit
Hooki to sposób, w jaki Cucumber pozwala na wykonanie konfiguracji przed uruchomieniem testów i późniejszym ich porzuceniem. Są one zdefiniowane jako wykonywalne bloki Rubiego , podobnie jak metody JUnit oznaczone adnotacjami @Before, @After
. Konwencjonalnie są umieszczane pod support/
i są stosowane globalnie. Istnieją trzy podstawowe typy zaczepów
-
Before
– uruchamiane przed scenariuszem -
After
– uruchamiane po scenariusz -
Around
– przejmuje kontrolę i omija scenariusz
Dodatkowe punkty zaczepienia obejmują
-
BeforeStep
-
AfterStep
-
AfterConfiguration
– Uruchamia się po konfiguracji Cucumber i jest przekazywany do stan konfiguracji
Before, After, and Around
haki opcjonalnie przyjmują listę scenariuszy filtrowania tagów, do których się odnoszą. Lista tagów w tym samym ciągu jest traktowana jako OR
, podczas gdy poszczególne argumenty są traktowane jako AND
; tagi można opcjonalnie zanegować, poprzedzając je ~
.
Przykład otagowania przed zaczepem
Before("@ATM") do |scenario| # Ruby codeend
Hooki są często używane do utrzymywania stanu bazy danych, zazwyczaj poprzez czyszczenie przed uruchomieniem scenariusza. Możliwe jest również rozpoczęcie i wycofanie transakcji za pomocą haków Before
i After
, a wiele rozszerzeń Cucumber zapewnia @txn
w tym celu.
Integracje i implementacjeEdit
Istnieją inne niż Ruby implementacje Cucumber dla popularnych języków, w tym Java, JavaScript i Python. Istnieje również wsparcie dla struktur testowania integracji. Pełną listę wdrożeń można znaleźć na Cucumber. Cucumber ma zintegrowane narzędzia testowe, które dobrze współpracują z wieloma konfiguracjami ciągłej integracji. Istnieją wtyczki cucumber dla popularnych narzędzi CI, takich jak Jenkins i TeamCity, a także dla IDE, takich jak Eclipse i RubyMine.
Poniżej znajduje się przykład definicji kroku napisanej dla Javy z Cucumber-JVM.
@Given("(.*) has a valid Credit or Debit card")public void has_card(String name) { // Java code}
Wtyczki formatująceEdytuj
Cucumber wykorzystuje wtyczki formatujące do dostarczania danych wyjściowych. Domyślnie dostępnych jest kilka popularnych formatów, w tym
- JSON
- HTML
- JUnit
Dostępne formaty to nie znormalizowane w różnych implementacjach Cucumber, więc oferty mogą się różnić. Cucumber obsługuje również bogate formaty wyjściowe, takie jak obrazy i filmy.
Automatyzacja przeglądarkiEdit
Cucumber nie zapewnia wbudowanej automatyzacji przeglądarki. Jednak działa dobrze z istniejącymi programami, takimi jak Selenium i WATiR-WebDriver. Obsługuje przeprowadzanie testów z transakcjami poprzez wykorzystanie innych programów, takich jak ActiveRecord.
Cucumber Command-LineEdit
Cucumber jest wyposażony we wbudowany interfejs wiersza poleceń, który obejmuje obszerną listę instrukcji . Podobnie jak większość narzędzi wiersza poleceń, cucumber udostępnia opcję --help
, która zawiera podsumowanie argumentów akceptowanych przez polecenie.
Wiersz poleceń Cucumber może być używany do szybkiego uruchamiania zdefiniowanych testów . Obsługuje również uruchamianie podzbioru scenariuszy poprzez filtrowanie tagów.
$ cucumber --tags @tag-name
Powyższe polecenie pomaga w wykonywaniu tylko tych scenariuszy, które mają określony @tag-name
. Argumenty można podać jako logiczną operację OR
lub AND
na tagach. Oprócz tagów, scenariusze można filtrować według nazw scenariuszy.
$ cucumber --name logout
Powyższe polecenie uruchomi tylko te scenariusze, które zawierają słowo „wyloguj się”.
Warto również wiedzieć, co poszło nie tak, gdy test się nie powiedzie. Ogórek ułatwia wyłapywanie błędów w kodzie dzięki opcji --backtrace
.
Ogórek można również skonfigurować tak, aby ignorował pewne scenariusze, które nie zostały zakończone, oznaczając je znacznikiem Praca w toku @wip
. Gdy Ogórek zostanie przekazany do argumentu --wip
, Ogórek ignoruje scenariusze z tagiem @wip
.