Cucumber (software)
Stapdefinities Bewerken
Stappen in Gherkin “s .feature
-bestanden kunnen worden beschouwd als een methode-aanroep. Vóór Cucumber een stap kan uitvoeren moet via een stapdefinitie worden verteld hoe die stap moet worden uitgevoerd.
Definities zijn geschreven in Ruby en conventioneel gearchiveerd onder features/step_definitions/*_steps.rb
. Definities beginnen met dezelfde sleutelwoorden als hun aanroep (inclusief Gherkins volledige taalondersteuning). Elke definitie heeft twee argumenten
- Ofwel een reguliere expressie of een string met $ variabelen
- Een blok met ruby-code om uit te voeren
Voorbeeld gebruikmakend van reguliere expressies
Given /(.*) has a valid Credit or Debit card/ do |name| # Ruby codeend
Voorbeeld met strings en $ variabelen. Merk op dat tijdens runtime de string wordt geconverteerd naar een reguliere expressie, en elke $ variabele wordt geconverteerd om overeen te komen met (.*)
.
Given "$name has a valid Credit or Debit card" do |name| # Ruby codeend
HooksEdit
Hooks zijn de manier van Cucumber om setup uit te voeren voordat de tests worden uitgevoerd en demontage om daarna te worden uitgevoerd. Ze worden gedefinieerd als uitvoerbare Ruby-blokken , vergelijkbaar met JUnit-methoden gemarkeerd met @Before, @After
annotaties. Conventioneel worden ze onder support/
geplaatst en worden ze wereldwijd toegepast. Er zijn drie basistypen van hooks
-
Before
– Wordt uitgevoerd vóór een scenario -
After
– Wordt uitgevoerd na een scenario -
Around
– Neemt de controle over en draait rond een scenario
Extra hooks zijn onder meer
-
BeforeStep
-
AfterStep
-
AfterConfiguration
– Draait na Cucumber-configuratie en wordt doorgegeven in stand van de configuratie
Before, After, and Around
hooks nemen optioneel een lijst met filterscenarios voor tags waarop ze van toepassing zijn. Een lijst met tags in dezelfde string wordt behandeld als OR
, terwijl individuele argumenten worden behandeld als AND
; tags kunnen optioneel worden genegeerd door ze vooraf te laten gaan door ~
.
Voorbeeld van een tag die is getagd vóór hook
Before("@ATM") do |scenario| # Ruby codeend
Hooks worden vaak gebruikt om de databasestatus te behouden, meestal door op te schonen voordat een scenario wordt uitgevoerd. Het is ook mogelijk om een transactie te starten en terug te draaien met Before
en After
hooks, en veel Cucumber-extensies bieden een @txn
tag voor een dergelijk doel.
Integraties en implementaties Bewerken
Er bestaan niet-Ruby-implementaties van Cucumber voor populaire talen, waaronder Java, JavaScript en Python. Er is ook ondersteuning voor frameworks voor integratietests. Een volledige lijst met implementaties is te vinden op Cucumber. Cucumber heeft geïntegreerde testtools die goed werken met veel Continuous Integration-configuraties. Er zijn komkommer-plug-ins voor populaire CI-tools zoals Jenkins en TeamCity en ook voor IDEs zoals Eclipse en RubyMine.
Hieronder staat een voorbeeld van een stapdefinitie geschreven voor Java met Cucumber-JVM.
@Given("(.*) has a valid Credit or Debit card")public void has_card(String name) { // Java code}
Formatter pluginsEdit
Cucumber gebruikt Formatter Plugins om output te leveren. Er worden standaard verschillende veelgebruikte formaten geleverd, waaronder
- JSON
- HTML
- JUnit
Beschikbare formaten zijn niet gestandaardiseerd over verschillende Cucumber-implementaties, dus het aanbod kan verschillen. Cucumber ondersteunt ook rijke uitvoerformaten zoals afbeeldingen en videos.
Browserautomatisering Bewerken
Cucumber biedt geen ingebouwde browserautomatisering. Het werkt echter goed met bestaande programmas zoals Selenium en WATiR-WebDriver. Het ondersteunt het uitvoeren van tests met transacties door gebruik te maken van andere programmas zoals ActiveRecord.
Cucumber command-lineEdit
Cucumber wordt geleverd met een ingebouwde command line-interface die een uitgebreide lijst met instructies bevat . Zoals de meeste opdrachtregelprogrammas, biedt cucumber de optie --help
die een samenvatting geeft van de argumenten die de opdracht accepteert.
De opdrachtregel van Cucumber kan worden gebruikt om snel gedefinieerde tests uit te voeren . Het ondersteunt ook het uitvoeren van een subset van scenarios door tags te filteren.
$ cucumber --tags @tag-name
De bovenstaande opdracht helpt bij het uitvoeren van alleen die scenarios die de gespecificeerd @tag-name
. Argumenten kunnen worden opgegeven als een logische OR
of AND
bewerking van tags. Afgezien van tags kunnen scenarios worden gefilterd op scenarionamen.
$ cucumber --name logout
Het bovenstaande commando zal alleen die scenarios uitvoeren die het woord bevatten “logout”.
Het is ook handig om te weten wat er mis is gegaan als een test mislukt. Cucumber maakt het gemakkelijk om bugs in de code op te sporen met de optie --backtrace
.
Komkommer kan ook worden geconfigureerd om bepaalde scenarios te negeren die niet zijn voltooid door ze te markeren met de Work In Progress-tag @wip
. Als Cucumber het --wip
-argument heeft doorgegeven, negeert Cucumber scenarios met de @wip
-tag.