Herunterdrücken - Push “how” down - Selenium ist komplex und beschreibt “wie” sehr detailliert. - Watir abstrahiert ein Bisschen. - (LapisLazuli abstrahiert noch mehr). - Gherkin beschreibt nur noch das “was”.
Gherkin ist eine für Menschen verständliche Domänenspezifische Sprache mit der man das Verhalten von Software beschreiben kann, ohne darauf einzugehen, wie das Verhalten implementiert ist. Gherkin hat zwei Motivationen: Dokumentation und Test Automatisierung (ausführbare Spezifikationen). Feature: Kurze Beschreibung des Features Scenario: Eine Use-Case Given eine Vorbedingung And eine andere Vorbedingung When Handlung des Benutzers And eine andere Handlung And noch eine andere Handlung Then erwarten wir ein Ergebnis And ein anderes Ergebnis
Für die Feature-Beschreibung eignen sich User Stories: • Um <ein Ziel zu erreichen> • Als <Rolle> • Möchte ich <Aktionsdetails> Schlüsselwörter sind hier Englisch, aber auch in anderen Sprachen möglich. Feature: Klicken auf Link Um dumme Fehler zu vermeiden Als Anfänger der TA Möchte ich einen Link klicken Scenario: Normaler Benutzer Given ich gehe zur sC-Webseite When ich den "blog"-Link klicke Then enthält die URL "/blog"
Definitions Step Definitions (Schrittdefinitionen) beschreiben jeden Schritt eines Gherkin-Szenarios Given /I start with (\d+)/ do |val| @calc.value(val) # oder eben browser.goto end When /I press (\w+)/ do |button| @calc.press(button) end Then /the result should be (.*)/ do |result| @calc.value() == result.to_f() end
Definitions Given /I use (.*)/ do |site| browser.goto site end When /I click the " (.*)" link/ do |value| browser.find(:a => { :text => value}) end Then /the url contains " (.*)"/ do |string| browser.url.include? string end Feature: Link Clicking In order to avoid silly mistakes As a test automation idiot I want to click a link Scenario: Regular numbers Given I use spritecloud.com When I click the "blog" link Then the url contains "/blog"
LapisLazuli hilft mit einem Beispielprojekt: $ lapis_lazuli create MyTaTraining Das Projekt enthält schon ein Szenario, also können wir es ausführen: $ cd MyTaTraining/ $ cucumber MyTaTraining/ config/ config.yml cucumber.yml features/ example.feature step_definitions/ interaction_steps.rb validation_steps.rb support/ env.rb
So zeigt Cucumber das Resultat an: Scenario: example01 - Google Search # example.feature:8 Given I navigate to Google in english # interaction_steps.rb:6 And I search for "spriteCloud" # interaction_steps.rb:16 Then I see "www.spriteCloud.com" on the page # validation_steps.rb:6 1 scenario (1 passed) 3 steps (3 passed) 0m9.976s