cucumberAan de slag met komkommer


Opmerkingen

Over Komkommer

Komkommer is een tool die uitvoerbare specificaties van software uitvoert. Specificaties, "functies" genoemd, zijn geschreven in gestructureerde natuurlijke taal. Komkommer voert een functie uit door elk van zijn stappen toe te wijzen aan een "stapdefinitie" geschreven in de programmeertaal die wordt ondersteund door die implementatie van Komkommer. Komkommer is geïmplementeerd in vele programmeertalen, waaronder Ruby (het origineel), Java en Javascript . Het is ook vertaald in vele menselijke talen.

Komkommer is geschreven ter ondersteuning van de agile methodologie genaamd Behaviour-Driven Development (BDD). In BDD begint men met de ontwikkeling van buiten naar binnen door acceptatietests te schrijven die de functionaliteit van de software beschrijven vanuit het oogpunt van de gebruiker (in plaats van vanuit het perspectief van een programmeur zoals in unit-testen). Komkommerfuncties dienen als deze acceptatietests.

Over het algemeen zijn komkommerfuncties door mensen leesbare documentatie, die ook een uitvoerbare testsuite is, wat betekent dat documentatie en tests altijd overeenkomen. Komkommer is nuttig bij de communicatie met belanghebbenden van niet-programmeurs over documentatie en tests. Het stelt programmeurs ook in staat om testen op een conceptueel niveau te schrijven zonder dat dit voor irrelevante programmeertaal zorgt.

Komkommer wordt meestal gebruikt om webapplicaties op te geven en te testen met een browserdriver zoals Selenium of PhantomJS. Het kan echter worden gebruikt met alle software die kan worden uitgevoerd en waarvan de status of resultaten kunnen worden bepaald op basis van de programmeertaal die door een Komkommer-implementatie wordt ondersteund.

Overige documentatie

Officiële documentatie is te vinden op https://cucumber.io/docs . Documentatie gegenereerd op basis van de komkommerfuncties die komkommerimplementaties beschrijven, bevindt zich op

https://relishapp.com/explore bevat enkele andere aan komkommer gerelateerde tools en voorbeelden, hoewel helaas geen komkommer-JVM.

Dit onderwerp

Dit onderwerp zou slechts enkele voorbeelden moeten geven die de lezer kennis laten maken met komkommerconcepten. Andere secties geven complete voorbeelden van installatie, opdrachtregel- en IDE-gebruik, functies, stapdefinities, etc.

Een komkommerfunctie

Komkommer gebruikt de augurksyntaxis om het gedrag van uw software in gestructureerde natuurlijke taal te beschrijven.

Als zodanig is Komkommer geen testframework (een veelvoorkomend misverstand), maar een systeemdocumentatieraamwerk dat niet veel verschilt van anderen zoals Use Case Scenario. Het algemene misverstand is te wijten aan het feit dat komkommerdocumentatie kan worden geautomatiseerd om ervoor te zorgen dat het het echte systeemgedrag weerspiegelt .

Een documentatiepakket voor komkommers bestaat uit Features , die elk een functie van uw software beschrijven, geschreven in augurk en gehost in een eigen bestand. Door deze bestanden in een mapstructuur te organiseren, kunt u functies groeperen en ordenen :

  • banking /
    • withdrawal.feature
    • atm.feature
    • personal-loan.feature
  • handel/
    • portfolio.feature
    • intraday.feature
  • hypotheek/
    • evaluation.feature
    • accounting.feature

Elke Feature is een tekstbestand zonder opmaak dat bestaat uit een optioneel, ongestructureerd, puur informatief inleidend gedeelte en een of meer Scenarios , die elk een gebruiksvoorwaarde of use case vertegenwoordigen.

Voorbeeld:

Feature: Documentation
As a StackOverflow user or visitor
I want to access the documentation section
    
    Scenario: search documentation on Stack Overflow
        Given I am on StackOverflow
        And I go to the Documentation section
        When I search for "cucumber"
        And I follow the link to "cucumber"
        Then I should see documentation for "cucumber"
 

Elke regel die begint met Gegeven , Wanneer , En , Maar of Dan wordt een Step . Elke stap kan met elk van die woorden beginnen, ongeacht de volgorde, maar het is gebruikelijk om ze op de meest natuurlijke manier te gebruiken.

Functies kunnen ook worden georganiseerd via Tags , annotaties die de editor kan aanbrengen op een Feature of een Scenario om deze verder te categoriseren.

Uitvoerbaarheid van een functie vindt plaats via glue code die kan worden geschreven in verschillende talen (Java, Ruby, Scala, C / C ++): elke Step wordt vergeleken met de lijm code ter identificatie Step Definitions (kortweg StepDef) via normale uitdrukkingen.

Elke Step kan slechts één bijbehorende Step Definition .

Wanneer een Feature wordt uitgevoerd, wordt elk samenstellend Scenario uitgevoerd, wat betekent dat elke StepDef die overeenkomt met de Step in elk Scenario wordt uitgevoerd.

Een definitie van de komkommerstap in Ruby

In functies / step_definitions / documentatie.rb:

When /^I go to the "([^"]+)" documentation$/ do |section|
  path_part =
    case section
      when "Documentation"
        "documentation"
      else
        raise "Unknown documentation section: #{section}"
    end
  visit "/documentation/#{path_part}/topics"
end

Then /^I should see the "([^"]+) documentation"$/ do |section|
  expect(page).to have_css('h2.doctag_title a', text: section)
end
 

Deze stappen oefenen een webapplicatie uit. Ze zijn ongeveer zo eenvoudig als ze kunnen zijn en toch praktisch.

Elke stap begint met een Gherkin-trefwoord, dat in een stapdefinitiebestand een methode is die een stap met Komkommer registreert. De stapbepalingsmethode neemt een reguliere expressie, die overeenkomt met een regel in een scenario, en een blok, dat wordt uitgevoerd wanneer het scenario op een overeenkomende regel komt. Capture-groepen in de reguliere expressie worden als blokparameters aan het blok doorgegeven.

De stap When heeft een eenvoudig, in-line voorbeeld van het gaan van een voor mensen leesbare verwijzing naar een pagina ("Documentatie") naar een URL. Echte komkommersuites plaatsen deze logica meestal in een aparte methode. Het visit werkwijze wordt verschaft door Capybara. Capibara is niet verplicht om komkommer te gebruiken, hoewel het er heel vaak mee wordt gebruikt. visit vertelt de browser die door Capybara wordt bestuurd om de opgegeven URL te bezoeken.

De stap Then laat zien hoe de inhoud van een pagina kan worden getest. expect / to wordt geleverd door RSpec (nogmaals, niet vereist door Komkommer maar wordt er heel vaak mee gebruikt). have_css wordt verzorgd door Capybara. De verwachting is dat de gegeven CSS-selector overeenkomt met een element op de pagina dat de gegeven tekst bevat. Merk op dat deze verwachting zou mislukken als het browserverzoek was mislukt.

Zie het onderwerp "Stapdefinitie" voor meer voorbeelden.

Pure Ruby-installatie

Gebruik de opdracht om Komkommer te installeren voor gebruik met Ruby

gem install cucumber
 

Als u een bundler gebruikt, kunt u ook de volgende regel toevoegen aan uw Gemfile

gem 'cucumber'
 

En voer vervolgens bundler uit

bundle install
 

[Ik denk dat dit thuishoort in zijn eigen onderwerp, Installatie. Ik heb dat onderwerp gemaakt en dit voorbeeld daar gekopieerd. Als dat onderwerp is goedgekeurd, verplaats ik dit daar naartoe en verwijder ik de kopie.]