Post on 08-May-2015
transcript
Behaviour Testing and Continuous Integration with Drupal
Smith Milner
October 6th 2013
Pacific Northwest Drupal Summit
https://github.com/affinitybridge/pnwds_behat
Feel free to ask questions during the talk
Working Example
http://affinitybridge.com
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
Enter Behat.From Stage Right
http://affinitybridge.com
Jonathan Hedstrom and Melissa Anderson's
session on
Quality Assurance using Behat and the Drupal Extension?
http://affinitybridge.com
What is Behat?
● Behaviour Driven Development (BDD)● The framework is written in PHP● Write Tests fast● Human Readable
http://affinitybridge.com
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 Active Development
http://affinitybridge.com
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"
The Tests
http://affinitybridge.com
Scenario: Short description of the tests goal
Given some known state
When I perform an action
Then I expect a result
Gherkin
http://affinitybridge.com
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
Annotations
Tag feature sets or individual scenarios
● @javascript● @api● @drush● @reinstall (custom)
http://affinitybridge.com
@javascript
Scenario: Short description of the test goal
Given some known state
When I perform an action with javascript
Then I expect a result
Annotations
http://affinitybridge.com
What Powers the Steps?Where the HAL is the code?
http://affinitybridge.com
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
The Context Class: FeatureContext.php
http://affinitybridge.com
class FeatureContext extends DrupalContext {
/**
* @Given /^I run cron$/
*/
public function iRunCron() {
$this->getDriver()->runCron();
}
}
The Context Class: FeatureContext.php
http://affinitybridge.com
YAY We have Tests!
http://affinitybridge.com
Uh OhThey Always Fail
http://affinitybridge.com
● Run them often
● Make sure to capture the fragile functionality
● Take a look at broken tests right away
Stay on Your Tests
http://affinitybridge.com
● The tests break all the time!
● Other developers don’t run my tests!
● It can take a long time!
But It’s So Hard!
http://affinitybridge.com
Enter Travis CI.From Stage Left
http://affinitybridge.com
● Continuous Integration service● Integrates with Github post commit hooks● Runs a build of your project every commit● Reports Results (email, chat client, etc)
What is Travis CI?
http://affinitybridge.com
Where did the name Travis originate?
Bob the Builder
http://affinitybridge.com
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.
How to Travis CI
http://affinitybridge.com
Setup Tasks Include
http://affinitybridge.com
● 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!
Initial Hurdles
http://affinitybridge.com
● Running javascript in a headless environment● Extensive use of 3rd party libraries● Testing configuration on Travis can take a
long time
Travis CI Reports Directly into our Chat Client
Immediate announcement of how good you are at coding
http://affinitybridge.com
Travis CI Build History
Lets you quickly review status of your build.
http://affinitybridge.com
This is me now
http://affinitybridge.com
Example Time!Make it go
http://affinitybridge.com
http://affinitybridge.com
Questions?
http://affinitybridge.com
Thank You!