T3CON13: Web application development using Behaviour Driven Development

T3CON13: Web application development using Behaviour Driven Development

License: CC BY-SA

While Test-Driven Development (TDD) has already emerged as a widely accepted standard in agile software development over the past decade, the relatively young concept of Behaviour-Driven Development (BDD) tries to apply TDD principles to bridge the gap between developers and domain experts.

This talk aims at illustrating the basic principles of Behaviour Driven Development and will introduce appropriate tools that can be used for automated acceptance testing of web applications, like Cucumber, Behat and Mink.

The talk will include some real-life examples from Mittwald’s software development department. It will discuss the costs and benefits of BDD and how BDD can improve your software quality and ease both the developer’s and product owner’s mind.

2b68bc93708466a655a4c60458dc7955?s=128

Martin Helmich

October 30, 2013
Tweet

Transcript

  1. Speed

  2. YOUR

  3. Show

  4. Franck

  5. Requirements

  6. Requirements

  7. Each

  8. Product

  9. Product Owner Development Team Product Backlog writes stories Sprint Backlog

    Selected by
  10. Another (also

  11. Failing test Passing test Refactor Test-Driven

  12. Unit

  13. Unit

  14. Acceptance

  15. Acceptance

  16. Acceptance

  17. Introducing Gherkin CC

  18. Gherkin

  19. Acceptance

  20. Acceptance

  21. <?php class MyTest extends PHPUnit_Extensions_Selenium2TestCase { protected function setUp() {

    $this->setBrowser('*firefox'); $this->setBrowserUrl('http://login.mittwald.de/'); } public function testLoginWithCorrectCredentialsWorksCorrectly() { $this->url('login.html'); $this->byXPath('//input[@id="login_username"]')->value('123456'); $this->byXPath('//input[@id="login_password"]')->value('supersecret'); $this ->byXPath('//input[@type="submit" and @name="login_password"]') ->clickAndWait(); $this->frame(0); $this->assertContains( 'Welcome to the customer center', $this->byXPath('//body')->text() ); } } ?> Scenario: User login Given I am on "login.mittwald.de" When I fill in "123456" for "username" And fill in "supersecret" for "password" And press "log in" Then I should see "Welcome to the customer center" 24 6 Lines
  22. Tools that

  23. Cucumber Behat Decym92,

  24. Behat Mink Goutte Driver Selenium Driver Web Driver Sahi Driver

    Zombie Driver Selenium Sahi Zombie
  25. Install

  26. You

  27. Scenario: Registration form Given I am on "index.php?id=512" When I

    follow "register now!" And I fill in "user_name" with "Max Mustermann" And I fill in "user_email" with "m.mustermann@example.com" And I attach the file "/Users/mmustermann/max.jpeg" to "user_image" And I press "submit registration" Then I should be on "index.php?id=514" And the response should contain "Thank you ..." And the mailbox "m15273" should contain an email with subject "Your registration"
  28. Scenario: Registration form Given I am on "index.php?id=512" When I

    follow "register now!" And I fill in "user_name" with "Max Mustermann" And I fill in "user_email" with "m.mustermann@example.com" And I attach the file "/Users/mmustermann/max.jpeg" to "user_image" And I press "submit registration" Then I should be on "index.php?id=514" And the response should contain "Thank you ..." And the mailbox "m15273" should contain an email with subject "Your registration" This
  29. Better! Feature: Online registration In order to use the site's

    personalized features As an anonymous user I want to register to the page. Scenario: Registration is confirmed Given I am on the registration page And I fill in the following: | Full name | Max Mustermann | | Email address | m.mustermann@example.com | And I upload an image of myself And submit the registration Then I should see a confirmation message And I should receive a confirmation email
  30. Feature: Online registration In order to use the site's personalized

    features As an anonymous user I want to register to the page. Scenario: Registration is confirmed Given I am on the registration page And I fill in the following: | Full name | Max Mustermann | | Email address | m.mustermann@example.com | And I upload an image of myself And submit the registration Then I should see a confirmation message And I should receive a confirmation email Who
  31. Then /^(?:I| ) should receive a confirmation e?mail$/ do #

    Connect to mailbox and see if mail is actually there. # Throw exception otherwise. end class FeatureContext extends Context { /** * @Then /^(?:|I )should receive a confirmation e?mail$/ */ public function assertRegistrationMailWasReceived() { // Connect to mailbox and see if mail is actually there. // Throw exception otherwise. } }
  32. None
  33. Product Owner Stories

  34. Integrate

  35. Possible

  36. Possible

  37. Possible

  38. Possible

  39. How

  40. BDD

  41. BDD

  42. Bogdan

  43. BDD

  44. Duncan

  45. References Gärtner,