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. 1.
  2. 2.
  3. 3.
  4. 4.
  5. 7.
  6. 8.
  7. 12.
  8. 13.
  9. 18.
  10. 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
  11. 25.
  12. 26.

    You

  13. 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"
  14. 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
  15. 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
  16. 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
  17. 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. } }
  18. 32.
  19. 34.
  20. 35.
  21. 36.
  22. 37.
  23. 38.
  24. 39.

    How

  25. 40.

    BDD

  26. 41.

    BDD

  27. 42.
  28. 43.

    BDD

  29. 44.