Behaviour Testing and Continuous
Integration with Drupal
Smith Milner
October 6th 2013
Pacific Northwest Drupal Summit
Working Example
https://github.com/
affinitybridge/pnwds_behat
Feel free to ask questions during the talk

http://affinity...
The Problem
●
●
●
●
●

Large Complicated Project
Multiple Clients using the same codebase
Multiple Combinations of feature...
From Stage Right

Enter Behat.

http://affinitybridge.com
Jonathan Hedstrom and Melissa Anderson's
session on
Quality Assurance using Behat and the Drupal
Extension?

http://affini...
What is Behat?
●
●
●
●

Behaviour Driven Development (BDD)
The framework is written in PHP
Write Tests fast
Human Readable...
The Rest of the Stack
●
●
●

Mink
Browser Drivers used by Mink (goutte)
Drupal Extension

http://affinitybridge.com
Drupal Extension
●
●

Drupal Specific Step Definitions
3 Different Drivers
●
●
●

●
●

blackbox
drupal
drush

Cleans up
In...
The Tests
Scenario: anonymous users can't see user profiles.
Given I am an anonymous user
When I am viewing a "profile" no...
Gherkin
Scenario: Short description of the tests goal
Given some known state
When I perform an action
Then I expect a resu...
Where are the tests?
●

●

●

The tests are broken up into sets called
Features (yup another one).
They live in /features ...
Annotations
Tag feature sets or individual scenarios
● @javascript
● @api
● @drush
● @reinstall (custom)

http://affinityb...
Annotations
@javascript
Scenario: Short description of the test goal
Given some known state
When I perform an action with ...
Where the HAL is the code?

What Powers the Steps?

http://affinitybridge.com
The Context Class: FeatureContext.
php
Lives in the same directory as in:
test_root/features/bootstrap/FeatureContext.php
...
The Context Class: FeatureContext.
php
class FeatureContext extends DrupalContext {
/**
* @Given /^I run cron$/
*/
public ...
YAY We have Tests!
http://affinitybridge.com
Uh Oh
They Always Fail
http://affinitybridge.com
Stay on Your Tests
●

Run them often

●

Make sure to capture the fragile functionality

●

Take a look at broken tests ri...
But It’s So Hard!
●

The tests break all the time!

●

Other developers don’t run my tests!

●

It can take a long time!

...
From Stage Left

Enter Travis CI.

http://affinitybridge.com
What is Travis CI?
●
●
●
●

Continuous Integration service
Integrates with Github post commit hooks
Runs a build of your p...
Bob the Builder

Where did the name Travis
originate?
http://affinitybridge.com
How to Travis CI
A configuration file is located in the project
root.
The .travis.yml file tells Travis CI how to set up
a...
Setup Tasks Include
●
●
●
●
●
●
●
●
●

Create a MySQL Database
Downloading Drush
Building test framework with composer
Set...
Initial Hurdles
●
●
●

Running javascript in a headless environment
Extensive use of 3rd party libraries
Testing configura...
Travis CI Reports Directly into our Chat Client
Immediate announcement of how good you are at coding

http://affinitybridg...
Travis CI Build History
Lets you quickly review status of your build.

http://affinitybridge.com
This is me now

http://affinitybridge.com
Make it go

Example Time!

http://affinitybridge.com
Questions?

http://affinitybridge.com
Thank You!

http://affinitybridge.com
Upcoming SlideShare
Loading in …5
×

Behaviour Testing and Continuous Integration with Drupal

573 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
573
On SlideShare
0
From Embeds
0
Number of Embeds
153
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Behaviour Testing and Continuous Integration with Drupal

  1. 1. Behaviour Testing and Continuous Integration with Drupal Smith Milner October 6th 2013 Pacific Northwest Drupal Summit
  2. 2. Working Example https://github.com/ affinitybridge/pnwds_behat Feel free to ask questions during the talk http://affinitybridge.com
  3. 3. The Problem ● ● ● ● ● Large Complicated Project Multiple Clients using the same codebase Multiple Combinations of features installed Many Deployments Breakage would happen in other areas then the newest code being released http://affinitybridge.com
  4. 4. From Stage Right Enter Behat. http://affinitybridge.com
  5. 5. Jonathan Hedstrom and Melissa Anderson's session on Quality Assurance using Behat and the Drupal Extension? http://affinitybridge.com
  6. 6. What is Behat? ● ● ● ● Behaviour Driven Development (BDD) The framework is written in PHP Write Tests fast Human Readable http://affinitybridge.com
  7. 7. The Rest of the Stack ● ● ● Mink Browser Drivers used by Mink (goutte) Drupal Extension http://affinitybridge.com
  8. 8. Drupal Extension ● ● Drupal Specific Step Definitions 3 Different Drivers ● ● ● ● ● blackbox drupal drush Cleans up In Active Development http://affinitybridge.com
  9. 9. The Tests Scenario: anonymous users can't see user profiles. Given I am an anonymous user When I am viewing a "profile" node Then I should see "Access Denied" http://affinitybridge.com
  10. 10. Gherkin Scenario: Short description of the tests goal Given some known state When I perform an action Then I expect a result http://affinitybridge.com
  11. 11. Where are the tests? ● ● ● The tests are broken up into sets called Features (yup another one). They live in /features at the root of your testing stack. Don’t let your .features get too big. http://affinitybridge.com
  12. 12. Annotations Tag feature sets or individual scenarios ● @javascript ● @api ● @drush ● @reinstall (custom) http://affinitybridge.com
  13. 13. Annotations @javascript Scenario: Short description of the test goal Given some known state When I perform an action with javascript Then I expect a result http://affinitybridge.com
  14. 14. Where the HAL is the code? What Powers the Steps? http://affinitybridge.com
  15. 15. The Context Class: FeatureContext. php Lives in the same directory as in: test_root/features/bootstrap/FeatureContext.php Feature Context is a object created for each scenario. ● Allows sharing of variables between steps ● It extends a Context provided by Drupal Extension ● http://affinitybridge.com
  16. 16. The Context Class: FeatureContext. php class FeatureContext extends DrupalContext { /** * @Given /^I run cron$/ */ public function iRunCron() { $this->getDriver()->runCron(); } } http://affinitybridge.com
  17. 17. YAY We have Tests! http://affinitybridge.com
  18. 18. Uh Oh They Always Fail http://affinitybridge.com
  19. 19. Stay on Your Tests ● Run them often ● Make sure to capture the fragile functionality ● Take a look at broken tests right away http://affinitybridge.com
  20. 20. But It’s So Hard! ● The tests break all the time! ● Other developers don’t run my tests! ● It can take a long time! http://affinitybridge.com
  21. 21. From Stage Left Enter Travis CI. http://affinitybridge.com
  22. 22. What is Travis CI? ● ● ● ● Continuous Integration service Integrates with Github post commit hooks Runs a build of your project every commit Reports Results (email, chat client, etc) http://affinitybridge.com
  23. 23. Bob the Builder Where did the name Travis originate? http://affinitybridge.com
  24. 24. How to Travis CI A configuration file is located in the project root. The .travis.yml file tells Travis CI how to set up an environment and how to run the tests. Every build runs from scratch on a fresh VM. http://affinitybridge.com
  25. 25. Setup Tasks Include ● ● ● ● ● ● ● ● ● Create a MySQL Database Downloading Drush Building test framework with composer Setup Drupal with Drush Make Adding a files directory and settings.php Setup Selenium Standalone Server Install drupal (drush site-install) Run a server (drush runserver) Start your tests! http://affinitybridge.com
  26. 26. Initial Hurdles ● ● ● Running javascript in a headless environment Extensive use of 3rd party libraries Testing configuration on Travis can take a long time http://affinitybridge.com
  27. 27. Travis CI Reports Directly into our Chat Client Immediate announcement of how good you are at coding http://affinitybridge.com
  28. 28. Travis CI Build History Lets you quickly review status of your build. http://affinitybridge.com
  29. 29. This is me now http://affinitybridge.com
  30. 30. Make it go Example Time! http://affinitybridge.com
  31. 31. Questions? http://affinitybridge.com
  32. 32. Thank You! http://affinitybridge.com

×