SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
tiseret test
Automa
f Dr upal sites
a
med Behat
torsdag den 5. december 13

1
Rikke Simonsen
rikke@reload.dk
Teknisk tester hos Reload! A/S
Oversat til dansk:
“Skriver specifikationer
sammen med kunden
og implementerer dem
som automatiserede tests”

torsdag den 5. december 13

2
Hvad vil jeg tale om?

torsdag den 5. december 13

3
Specifikationsdrevet udvikling
Hvorfor?
“Har du som udvikler oplevet
at det du har bygget virker
men at det ikke virkede
som kunden forventede”

?

torsdag den 5. december 13

4
Specifikationsdrevet udvikling
Hvorfor?
“Eller har du oplevet
at det der plejede at virke
pludselig ikke gør det længere”

?

torsdag den 5. december 13

5
Specifikationsdrevet udvikling
Hvorfor?
“Har du været ude for
at der var tvivl om
hvornår en feature var færdig”

?

torsdag den 5. december 13

6
Specifikationsdrevet udvikling
Hvorfor?
“Eller at det kunne have været rart
hvis systemets dokumentation
var holdt opdateret”

?

torsdag den 5. december 13

7
Specifikationsdrevet udvikling
Hvorfor?

“HVIS systemet altså
overhovedet
VAR dokumenteret”

torsdag den 5. december 13

8
Specifikationsdrevet udvikling
Hvorfor?
“Hvis du kan svare ja
på nogle af disse spørgsmål
så er det måske på tide
at overveje
at gøre jeres specifikationer
eksekverbare”

torsdag den 5. december 13

9
Fordi
Eksekverbare specifikationer sikre:
Bedre kommunikation
Fælles forståelse
Regressionstest
Test af acceptkriterier
Levende dokumentation

torsdag den 5. december 13

10
Demo

torsdag den 5. december 13

11
Testdrevet udvikling (TDD)

torsdag den 5. december 13

12
Testdrevet udvikling (TDD)

torsdag den 5. december 13

13
Testdrevet udvikling (TDD)

•
•
•

Ryd op i produktionskode
Ryd op i testkode
Kør test igen

•
•

torsdag den 5. december 13

•
•

Skriv en test der fejler
Kør den fejlende test

Skriv kode der implementerer funktionalitet og test
Kør test der passerer

14
Behavior Driven Development

torsdag den 5. december 13

15
Behavior Driven Development
BDD blev udviklet af Dan North i 2009
på baggrund af en række spørgsmål han stødte
på i testdrevet udvikling:
Hvor skal man starte i processen?
Hvad skal testes og hvad skal ikke?
Hvor meget skal man teste på een gang?
Hvad skal man kalde testene?
Hvordan tolker man en test der fejler?

torsdag den 5. december 13

16
Behavior Driven Development
Dan North foreslog at:
Unit test navne skulle være hele sætninger, der begyndte med
ordet "Should" og skulle skrives i den rækkefølge, der giver
mest værdi for forretningen.
Testbeskrivelsen skulle skrives som brugerhistorie:
"Som [ rolle ] vil jeg have [ funktion], så [ værdi ]."
Godkendelseskriterier skulle skrives i form af scenarier:
Givet [ indledende kontekst ] , når [ begivenhed indtræffer ], så
[ giv resultat ]
http://dannorth.net/whats-in-a-story/

torsdag den 5. december 13

17
Behavior Driven Development

torsdag den 5. december 13

18
Specification by Example

torsdag den 5. december 13

19
Specification by Example

torsdag den 5. december 13

20
Behat

torsdag den 5. december 13

21
•

Framework til at teste forretningsmæssige og funktionelle krav

•

Test skrives i det menneskelæsbare sprog Gherkin

•

Og eksekveres som automatiserede tests

•

Testene kan køres med eller uden browser

•

Der findes udvidelser der giver adgang til foruddefinerede
sætninger (kaldet steps)

torsdag den 5. december 13

22
Installer
Trin 1:

$curl http://getcomposer.org/installer

Trin 2:

$vim composer.json
{
"require": {
"behat/behat": "2.4.*@stable"
},
"config": {
"bin-dir": "bin/"
}
}

Trin 3:

torsdag den 5. december 13

$php composer.phar install

23
Kør din første feature
Trin 4:

$bin/behat --init

Trin 5:

$vim features/your_first.feature
Feature: Your first feature
In order to start using Behat
As a manager or developer
I want to try
Scenario:
Given there is something
When I do something
Then I should see something

Trin 6:

torsdag den 5. december 13

$bin/behat your_first.feature

24
Skriv din test i Gherkin
Feature: [Title of the feature]
In order to [achieve some goal]
As a [user/role]
I want to [do action]
Background: [Optional
description]
Given [Precondition]
Scenario: [Optional description]
Given [Precondition]
When [Statement]
And [another statement]
Then [Postcondition]
But [another postcondition]
[more scenarios]

torsdag den 5. december 13

25
Skriv din test i Gherkin (på dansk)
Egenskab: [Titel på feature]
For at [opnå et givent mål]
Som [bruger/rolle]
Vil jeg have [feature]
Baggrund: [Valgfri beskrivelse]
Givet [Forudsætning]
Scenarie: [Valgfri beskrivelse]
Givet [Forudsætning]
Når [Erklæring]
Og [en anden erklæring]
Så [Postcondition]
Men [en anden postcondition]
[Flere scenarier]

torsdag den 5. december 13

26
Eksempel 1
Egenskab: Arrangementssøgning
For at kunne finde et arrangement
Som bruger
Vil jeg kunne søge på del af titel
Baggrund:
Givet arrangementet “Automatiseret test
af Drupal Sites med behat” eksisterer
Scenarie: Søgning på del af titel
Givet jeg er på siden “Arrangementer”
Når jeg søger efter arrangementer med
titlen “Behat”
Så skal søgningen returnere
arrangementet “Automatiseret test af
Drupal Sites med behat”

torsdag den 5. december 13

27
Eksempel 2
Egenskab: Arrangementssøgning
For at kunne finde et arrangement
Som bruger
Vil jeg kunne søge på del af titel
Baggrund:
Givet arrangementet “Automatiseret test
af Drupal Sites med behat” eksisterer
Scenarie: Søgning på del af titel
Givet jeg er på siden “/arrangementer”
Når jeg indtaster “Behat” i feltet
“#search”
Og jeg trykker på knappen “Søg”
Og jeg venter på at “Søgeresultat”
dukker op
Så skal jeg se teksten “Automatiseret test
af Drupal Sites med behat” i
“Søgeresultat” regionen
torsdag den 5. december 13

28
Behat konfiguration
behat.yml

torsdag den 5. december 13

default:
paths:
features: 'features'
bootstrap: 'features/bootstrap'
context:
parameters:
test_user:
username: 'test'
password: 'test123'
base_url: 'http://testsite.dk/'
extensions:
BehatMinkExtensionExtension:
goutte: ~
selenium2:
browser: 'firefox'
default_session: 'goutte'
javascript_session: 'selenium2'
DrupalDrupalExtensionExtension:
blackbox: ~
region_map:
footer: '#footer'

29
Behat parametre
Arguments:
features
Could be:

Feature(s) to run.
- a dir (features/)
- a feature (*.feature)

torsdag den 5. december 13

Options:
--format (-f)

How to format features. pretty is default.
Default formatters are:
- pretty: Prints the feature as is.
- progress: Prints one character per step.
- html: Generates a nice looking HTML report.
- junit: Generates a report similar to Ant+JUnit.
- failed: Prints list of failed scenarios.
--out
Write formatter output to a file/directory
instead of STDOUT (output_path).
--lang
Print formatter output in particular language.
--definitions (-d) Print all available step definitions:
- use -dl to just list definition expressions.
- use -di to show definitions with extended info.
- use -d 'needle' to find specific definitions.
Use --lang to see definitions in specific language.
--name
Only execute the feature elements which match
part of the given name or regex.
--tags
Only execute the features or scenarios with tags
matching tag filter expression.
--append-snippets Appends snippets for undefined steps into
main context.
--help (-h)
Display this help message.
--config (-c)
Specify config file to use.
--profile (-p)
Specify config profile to use.
30
Demo - Implementation af step

torsdag den 5. december 13

31
Mink Extension
Given /^(?:|I )am on (?:|the )homepage$/
When /^(?:|I )go to "(?P<page>[^"]+)"$/
When /^(?:|I )press "(?P<button>(?:[^"]|")*)"$/
When /^(?:|I )follow "(?P<link>(?:[^"]|")*)"$/
When /^(?:|I )fill in "(?P<field>(?:[^"]|")*)" with "(?P<value>(?:[^"]|")*)"$/
When /^(?:|I )select "(?P<option>(?:[^"]|")*)" from "(?P<select>(?:[^"]|")*)"$/
When /^(?:|I )check "(?P<option>(?:[^"]|")*)"$/
When /^(?:|I )uncheck "(?P<option>(?:[^"]|")*)"$/
When /^(?:|I )attach the file "(?P[^"]*)" to "(?P<field>(?:[^"]|")*)"$/
Then /^(?:|I )should be on "(?P<page>[^"]+)"$/
Then /^(?:|I )should be on (?:|the )homepage$/
Then /^(?:|I )should see "(?P<text>(?:[^"]|")*)"$/
Then /^(?:|I )should not see "(?P<text>(?:[^"]|")*)"$/
Then /^the (?i)url(?-i) should match (?P<pattern>"([^"]|")*")$/
Then /^the response status code should be (?P<code>d+)$/
Then /^the checkbox "(?P<checkbox>(?:[^"]|")*)" is (?:unchecked|not checked)$/
Then /^print current URL$/
Then /^print last response$/
Then /^show last response$/

torsdag den 5. december 13

32
Mink Extension
// @Givet /^(?:|jeg )er på hjemmesiden$/

/**
* Opens homepage.
*
* @Given /^(?:|I )am on (?:|the )homepage$/
* @When /^(?:|I )go to (?:|the )homepage$/
*/
public function iAmOnHomepage()
{
$this->getSession()->visit($this->locatePath('/'));
}

torsdag den 5. december 13

33
Drupal Extension
Given /^I am viewing (?:a|an) "(?P<type>[^"]*)" node with the title "(?P<title>[^"]*)"$/
Given /^"(?P<type>[^"]*)" nodes:$/
Then /^I should be able to edit (?:a|an) "([^"]*)" node$/
Given /^(?:a|an) "(?P<vocabulary>[^"]*)" term with the name "(?P<name>[^"]*)"$/
Given /^users:$/
Given /^"(?P<vocabulary>[^"]*)" terms:$/
Then /^I should see the error message(?:| containing) "([^"]*)"$/
Then /^I should see the success message(?:| containing) "([^"]*)"$/
Given /^I run drush "(?P<command>[^"]*)" "(?P<arguments>[^"]*)"$/
Then /^drush output should contain "(?P<output>[^"]*)"$/
Given /^I press "(?P<button>[^"]*)" in the "(?P<region>[^"]*)"(?:| region)$/
Given /^(?:|I )fill in "(?P<value>(?:[^"]|")*)" for "(?P<field>(?:[^"]|")*)" in the
"(?P<region>[^"]*)"(?:| region)$/
Given /^I click "(?P<link>[^"]*)" in the "(?P<row_text>[^"]*)" row$/
Given /^the cache has been cleared$/
Given /^I run cron$/

torsdag den 5. december 13

34
Drupal Extension Drivers
Feature

Blackbox

Drush

Drupal API

Map Regions

Yes

Yes

Yes

Create users

No

Yes

Yes

Create nodes

No

No

Yes

Create vocabularies

No

No

Yes

Create taxonomy
terms
Run tests and site on
different servers

No

No

Yes

Yes

Yes

No

torsdag den 5. december 13

35
Andre udvidelser
•
•

Business Selectors

•

JIRA Extension

•

torsdag den 5. december 13

Behatch

Page Objects

36
Ressourcer
Behat & Mink:
http://docs.behat.org/quick_intro.html
Drupal Extension:
https://drupal.org/project/drupalextension
http://dspeak.com/drupalextension/
BDD:
http://dannorth.net/whats-in-a-story/
http://www.specificationbyexample.com/
Personer:
Gojko Adzic (proces)
Shashikant Jagtap (værktøjer)

torsdag den 5. december 13

37
?
torsdag den 5. december 13

38

Más contenido relacionado

Más de Reload! A/S

Digitale projekter der fejlede
Digitale projekter der fejledeDigitale projekter der fejlede
Digitale projekter der fejledeReload! A/S
 
Smid planen væk og skab forretningsværdi i stedet
Smid planen væk og skab forretningsværdi i stedetSmid planen væk og skab forretningsværdi i stedet
Smid planen væk og skab forretningsværdi i stedetReload! A/S
 
Produktstrategi hos The Ramp/Danfoss
Produktstrategi hos The Ramp/DanfossProduktstrategi hos The Ramp/Danfoss
Produktstrategi hos The Ramp/DanfossReload! A/S
 
Produktstrategi den 28.11.19
Produktstrategi den 28.11.19Produktstrategi den 28.11.19
Produktstrategi den 28.11.19Reload! A/S
 
DevOps og erfaringer med Spotify-modellen hos YouSee
DevOps og erfaringer med Spotify-modellen hos YouSeeDevOps og erfaringer med Spotify-modellen hos YouSee
DevOps og erfaringer med Spotify-modellen hos YouSeeReload! A/S
 
Scan &amp; betal how do we do agile and what do we learn - reload 26 9-19
Scan &amp; betal   how do we do agile and what do we learn - reload 26 9-19Scan &amp; betal   how do we do agile and what do we learn - reload 26 9-19
Scan &amp; betal how do we do agile and what do we learn - reload 26 9-19Reload! A/S
 
Gaa hjem-moede 26. september 2019 agile metoder der virker
Gaa hjem-moede 26. september 2019  agile metoder der virkerGaa hjem-moede 26. september 2019  agile metoder der virker
Gaa hjem-moede 26. september 2019 agile metoder der virkerReload! A/S
 
Det Danske Spejderkorps
Det Danske SpejderkorpsDet Danske Spejderkorps
Det Danske SpejderkorpsReload! A/S
 
Tillidsbaseret samarbejde
Tillidsbaseret samarbejdeTillidsbaseret samarbejde
Tillidsbaseret samarbejdeReload! A/S
 
Sådan leder du digital transformation
Sådan leder du digital transformationSådan leder du digital transformation
Sådan leder du digital transformationReload! A/S
 
Digital Transformation i DAC
Digital Transformation i DACDigital Transformation i DAC
Digital Transformation i DACReload! A/S
 
Drupalcamp2016 dockerftw
Drupalcamp2016 dockerftwDrupalcamp2016 dockerftw
Drupalcamp2016 dockerftwReload! A/S
 
Reload præsentation
Reload præsentationReload præsentation
Reload præsentationReload! A/S
 
Agile that works_and_the_tools_we_love
Agile that works_and_the_tools_we_loveAgile that works_and_the_tools_we_love
Agile that works_and_the_tools_we_loveReload! A/S
 
Bdd - how to solve communication problems
Bdd - how to solve communication problemsBdd - how to solve communication problems
Bdd - how to solve communication problemsReload! A/S
 

Más de Reload! A/S (17)

Digitale projekter der fejlede
Digitale projekter der fejledeDigitale projekter der fejlede
Digitale projekter der fejlede
 
Smid planen væk og skab forretningsværdi i stedet
Smid planen væk og skab forretningsværdi i stedetSmid planen væk og skab forretningsværdi i stedet
Smid planen væk og skab forretningsværdi i stedet
 
Produktstrategi hos The Ramp/Danfoss
Produktstrategi hos The Ramp/DanfossProduktstrategi hos The Ramp/Danfoss
Produktstrategi hos The Ramp/Danfoss
 
Produktstrategi den 28.11.19
Produktstrategi den 28.11.19Produktstrategi den 28.11.19
Produktstrategi den 28.11.19
 
DevOps
DevOpsDevOps
DevOps
 
DevOps og erfaringer med Spotify-modellen hos YouSee
DevOps og erfaringer med Spotify-modellen hos YouSeeDevOps og erfaringer med Spotify-modellen hos YouSee
DevOps og erfaringer med Spotify-modellen hos YouSee
 
Scan &amp; betal how do we do agile and what do we learn - reload 26 9-19
Scan &amp; betal   how do we do agile and what do we learn - reload 26 9-19Scan &amp; betal   how do we do agile and what do we learn - reload 26 9-19
Scan &amp; betal how do we do agile and what do we learn - reload 26 9-19
 
Gaa hjem-moede 26. september 2019 agile metoder der virker
Gaa hjem-moede 26. september 2019  agile metoder der virkerGaa hjem-moede 26. september 2019  agile metoder der virker
Gaa hjem-moede 26. september 2019 agile metoder der virker
 
Det Danske Spejderkorps
Det Danske SpejderkorpsDet Danske Spejderkorps
Det Danske Spejderkorps
 
Tillidsbaseret samarbejde
Tillidsbaseret samarbejdeTillidsbaseret samarbejde
Tillidsbaseret samarbejde
 
Sådan leder du digital transformation
Sådan leder du digital transformationSådan leder du digital transformation
Sådan leder du digital transformation
 
Digital Transformation i DAC
Digital Transformation i DACDigital Transformation i DAC
Digital Transformation i DAC
 
Drupalcamp2016 dockerftw
Drupalcamp2016 dockerftwDrupalcamp2016 dockerftw
Drupalcamp2016 dockerftw
 
Smk -2015.09.30
Smk  -2015.09.30Smk  -2015.09.30
Smk -2015.09.30
 
Reload præsentation
Reload præsentationReload præsentation
Reload præsentation
 
Agile that works_and_the_tools_we_love
Agile that works_and_the_tools_we_loveAgile that works_and_the_tools_we_love
Agile that works_and_the_tools_we_love
 
Bdd - how to solve communication problems
Bdd - how to solve communication problemsBdd - how to solve communication problems
Bdd - how to solve communication problems
 

Automatiseret test af Drupal sites med Behat

  • 1. tiseret test Automa f Dr upal sites a med Behat torsdag den 5. december 13 1
  • 2. Rikke Simonsen rikke@reload.dk Teknisk tester hos Reload! A/S Oversat til dansk: “Skriver specifikationer sammen med kunden og implementerer dem som automatiserede tests” torsdag den 5. december 13 2
  • 3. Hvad vil jeg tale om? torsdag den 5. december 13 3
  • 4. Specifikationsdrevet udvikling Hvorfor? “Har du som udvikler oplevet at det du har bygget virker men at det ikke virkede som kunden forventede” ? torsdag den 5. december 13 4
  • 5. Specifikationsdrevet udvikling Hvorfor? “Eller har du oplevet at det der plejede at virke pludselig ikke gør det længere” ? torsdag den 5. december 13 5
  • 6. Specifikationsdrevet udvikling Hvorfor? “Har du været ude for at der var tvivl om hvornår en feature var færdig” ? torsdag den 5. december 13 6
  • 7. Specifikationsdrevet udvikling Hvorfor? “Eller at det kunne have været rart hvis systemets dokumentation var holdt opdateret” ? torsdag den 5. december 13 7
  • 8. Specifikationsdrevet udvikling Hvorfor? “HVIS systemet altså overhovedet VAR dokumenteret” torsdag den 5. december 13 8
  • 9. Specifikationsdrevet udvikling Hvorfor? “Hvis du kan svare ja på nogle af disse spørgsmål så er det måske på tide at overveje at gøre jeres specifikationer eksekverbare” torsdag den 5. december 13 9
  • 10. Fordi Eksekverbare specifikationer sikre: Bedre kommunikation Fælles forståelse Regressionstest Test af acceptkriterier Levende dokumentation torsdag den 5. december 13 10
  • 11. Demo torsdag den 5. december 13 11
  • 12. Testdrevet udvikling (TDD) torsdag den 5. december 13 12
  • 13. Testdrevet udvikling (TDD) torsdag den 5. december 13 13
  • 14. Testdrevet udvikling (TDD) • • • Ryd op i produktionskode Ryd op i testkode Kør test igen • • torsdag den 5. december 13 • • Skriv en test der fejler Kør den fejlende test Skriv kode der implementerer funktionalitet og test Kør test der passerer 14
  • 15. Behavior Driven Development torsdag den 5. december 13 15
  • 16. Behavior Driven Development BDD blev udviklet af Dan North i 2009 på baggrund af en række spørgsmål han stødte på i testdrevet udvikling: Hvor skal man starte i processen? Hvad skal testes og hvad skal ikke? Hvor meget skal man teste på een gang? Hvad skal man kalde testene? Hvordan tolker man en test der fejler? torsdag den 5. december 13 16
  • 17. Behavior Driven Development Dan North foreslog at: Unit test navne skulle være hele sætninger, der begyndte med ordet "Should" og skulle skrives i den rækkefølge, der giver mest værdi for forretningen. Testbeskrivelsen skulle skrives som brugerhistorie: "Som [ rolle ] vil jeg have [ funktion], så [ værdi ]." Godkendelseskriterier skulle skrives i form af scenarier: Givet [ indledende kontekst ] , når [ begivenhed indtræffer ], så [ giv resultat ] http://dannorth.net/whats-in-a-story/ torsdag den 5. december 13 17
  • 18. Behavior Driven Development torsdag den 5. december 13 18
  • 19. Specification by Example torsdag den 5. december 13 19
  • 20. Specification by Example torsdag den 5. december 13 20
  • 21. Behat torsdag den 5. december 13 21
  • 22. • Framework til at teste forretningsmæssige og funktionelle krav • Test skrives i det menneskelæsbare sprog Gherkin • Og eksekveres som automatiserede tests • Testene kan køres med eller uden browser • Der findes udvidelser der giver adgang til foruddefinerede sætninger (kaldet steps) torsdag den 5. december 13 22
  • 23. Installer Trin 1: $curl http://getcomposer.org/installer Trin 2: $vim composer.json { "require": { "behat/behat": "2.4.*@stable" }, "config": { "bin-dir": "bin/" } } Trin 3: torsdag den 5. december 13 $php composer.phar install 23
  • 24. Kør din første feature Trin 4: $bin/behat --init Trin 5: $vim features/your_first.feature Feature: Your first feature In order to start using Behat As a manager or developer I want to try Scenario: Given there is something When I do something Then I should see something Trin 6: torsdag den 5. december 13 $bin/behat your_first.feature 24
  • 25. Skriv din test i Gherkin Feature: [Title of the feature] In order to [achieve some goal] As a [user/role] I want to [do action] Background: [Optional description] Given [Precondition] Scenario: [Optional description] Given [Precondition] When [Statement] And [another statement] Then [Postcondition] But [another postcondition] [more scenarios] torsdag den 5. december 13 25
  • 26. Skriv din test i Gherkin (på dansk) Egenskab: [Titel på feature] For at [opnå et givent mål] Som [bruger/rolle] Vil jeg have [feature] Baggrund: [Valgfri beskrivelse] Givet [Forudsætning] Scenarie: [Valgfri beskrivelse] Givet [Forudsætning] Når [Erklæring] Og [en anden erklæring] Så [Postcondition] Men [en anden postcondition] [Flere scenarier] torsdag den 5. december 13 26
  • 27. Eksempel 1 Egenskab: Arrangementssøgning For at kunne finde et arrangement Som bruger Vil jeg kunne søge på del af titel Baggrund: Givet arrangementet “Automatiseret test af Drupal Sites med behat” eksisterer Scenarie: Søgning på del af titel Givet jeg er på siden “Arrangementer” Når jeg søger efter arrangementer med titlen “Behat” Så skal søgningen returnere arrangementet “Automatiseret test af Drupal Sites med behat” torsdag den 5. december 13 27
  • 28. Eksempel 2 Egenskab: Arrangementssøgning For at kunne finde et arrangement Som bruger Vil jeg kunne søge på del af titel Baggrund: Givet arrangementet “Automatiseret test af Drupal Sites med behat” eksisterer Scenarie: Søgning på del af titel Givet jeg er på siden “/arrangementer” Når jeg indtaster “Behat” i feltet “#search” Og jeg trykker på knappen “Søg” Og jeg venter på at “Søgeresultat” dukker op Så skal jeg se teksten “Automatiseret test af Drupal Sites med behat” i “Søgeresultat” regionen torsdag den 5. december 13 28
  • 29. Behat konfiguration behat.yml torsdag den 5. december 13 default: paths: features: 'features' bootstrap: 'features/bootstrap' context: parameters: test_user: username: 'test' password: 'test123' base_url: 'http://testsite.dk/' extensions: BehatMinkExtensionExtension: goutte: ~ selenium2: browser: 'firefox' default_session: 'goutte' javascript_session: 'selenium2' DrupalDrupalExtensionExtension: blackbox: ~ region_map: footer: '#footer' 29
  • 30. Behat parametre Arguments: features Could be: Feature(s) to run. - a dir (features/) - a feature (*.feature) torsdag den 5. december 13 Options: --format (-f) How to format features. pretty is default. Default formatters are: - pretty: Prints the feature as is. - progress: Prints one character per step. - html: Generates a nice looking HTML report. - junit: Generates a report similar to Ant+JUnit. - failed: Prints list of failed scenarios. --out Write formatter output to a file/directory instead of STDOUT (output_path). --lang Print formatter output in particular language. --definitions (-d) Print all available step definitions: - use -dl to just list definition expressions. - use -di to show definitions with extended info. - use -d 'needle' to find specific definitions. Use --lang to see definitions in specific language. --name Only execute the feature elements which match part of the given name or regex. --tags Only execute the features or scenarios with tags matching tag filter expression. --append-snippets Appends snippets for undefined steps into main context. --help (-h) Display this help message. --config (-c) Specify config file to use. --profile (-p) Specify config profile to use. 30
  • 31. Demo - Implementation af step torsdag den 5. december 13 31
  • 32. Mink Extension Given /^(?:|I )am on (?:|the )homepage$/ When /^(?:|I )go to "(?P<page>[^"]+)"$/ When /^(?:|I )press "(?P<button>(?:[^"]|")*)"$/ When /^(?:|I )follow "(?P<link>(?:[^"]|")*)"$/ When /^(?:|I )fill in "(?P<field>(?:[^"]|")*)" with "(?P<value>(?:[^"]|")*)"$/ When /^(?:|I )select "(?P<option>(?:[^"]|")*)" from "(?P<select>(?:[^"]|")*)"$/ When /^(?:|I )check "(?P<option>(?:[^"]|")*)"$/ When /^(?:|I )uncheck "(?P<option>(?:[^"]|")*)"$/ When /^(?:|I )attach the file "(?P[^"]*)" to "(?P<field>(?:[^"]|")*)"$/ Then /^(?:|I )should be on "(?P<page>[^"]+)"$/ Then /^(?:|I )should be on (?:|the )homepage$/ Then /^(?:|I )should see "(?P<text>(?:[^"]|")*)"$/ Then /^(?:|I )should not see "(?P<text>(?:[^"]|")*)"$/ Then /^the (?i)url(?-i) should match (?P<pattern>"([^"]|")*")$/ Then /^the response status code should be (?P<code>d+)$/ Then /^the checkbox "(?P<checkbox>(?:[^"]|")*)" is (?:unchecked|not checked)$/ Then /^print current URL$/ Then /^print last response$/ Then /^show last response$/ torsdag den 5. december 13 32
  • 33. Mink Extension // @Givet /^(?:|jeg )er på hjemmesiden$/ /** * Opens homepage. * * @Given /^(?:|I )am on (?:|the )homepage$/ * @When /^(?:|I )go to (?:|the )homepage$/ */ public function iAmOnHomepage() { $this->getSession()->visit($this->locatePath('/')); } torsdag den 5. december 13 33
  • 34. Drupal Extension Given /^I am viewing (?:a|an) "(?P<type>[^"]*)" node with the title "(?P<title>[^"]*)"$/ Given /^"(?P<type>[^"]*)" nodes:$/ Then /^I should be able to edit (?:a|an) "([^"]*)" node$/ Given /^(?:a|an) "(?P<vocabulary>[^"]*)" term with the name "(?P<name>[^"]*)"$/ Given /^users:$/ Given /^"(?P<vocabulary>[^"]*)" terms:$/ Then /^I should see the error message(?:| containing) "([^"]*)"$/ Then /^I should see the success message(?:| containing) "([^"]*)"$/ Given /^I run drush "(?P<command>[^"]*)" "(?P<arguments>[^"]*)"$/ Then /^drush output should contain "(?P<output>[^"]*)"$/ Given /^I press "(?P<button>[^"]*)" in the "(?P<region>[^"]*)"(?:| region)$/ Given /^(?:|I )fill in "(?P<value>(?:[^"]|")*)" for "(?P<field>(?:[^"]|")*)" in the "(?P<region>[^"]*)"(?:| region)$/ Given /^I click "(?P<link>[^"]*)" in the "(?P<row_text>[^"]*)" row$/ Given /^the cache has been cleared$/ Given /^I run cron$/ torsdag den 5. december 13 34
  • 35. Drupal Extension Drivers Feature Blackbox Drush Drupal API Map Regions Yes Yes Yes Create users No Yes Yes Create nodes No No Yes Create vocabularies No No Yes Create taxonomy terms Run tests and site on different servers No No Yes Yes Yes No torsdag den 5. december 13 35
  • 36. Andre udvidelser • • Business Selectors • JIRA Extension • torsdag den 5. december 13 Behatch Page Objects 36
  • 37. Ressourcer Behat & Mink: http://docs.behat.org/quick_intro.html Drupal Extension: https://drupal.org/project/drupalextension http://dspeak.com/drupalextension/ BDD: http://dannorth.net/whats-in-a-story/ http://www.specificationbyexample.com/ Personer: Gojko Adzic (proces) Shashikant Jagtap (værktøjer) torsdag den 5. december 13 37
  • 38. ? torsdag den 5. december 13 38