- Log in to post comments
Test Driven Development also known as Behaviour driven development is one of the most fast developing trends for test automation. Drupal Extension is Drupal's step towards TDD. Its a lot of big words but its something very simple.
Drupal Extension
Drupal Extension is basically a library that can be used to tell Drupal in a easy way to execute commands like "login as user with administrator role". So What is Drupal Extension, It is an Extension that provides Drupal the functionality to communicate with the testing frameworks of Behat (is an open source BDD framework for PHP) and Mink (is a framework written for web applications to communicate with modern day browsers).
So lets start and see how this works. First we need to install the required software.
Installing DrupalExtension
We need to do a systemwide installation so first select a shared folder (Ex: /usr/local/share). it is recommended to create a seperate folder so that you can keep you libraries separated. Change you directory to the new folder. Now add a "composer.json" file and add the following code
{ "require": { "drupal/drupal-extension": "~3.0" }, "config": { "bin-dir": "bin/" } }
Now run the install command
composer install
NOTE: sometimes you might get an issue as follows when you actually run tests with Drupal 8 because drupal-extension and Drupal 8 uses different versions of Symfony components. If so change the composer.json file as follows
{
"require": {
"drupal/drupal-extension": "~3.0",
"guzzlehttp/guzzle": "^6.0@dev",
"symfony/dependency-injection": "2.8.2",
"symfony/event-dispatcher": "2.8.2"
},
"config": {
"bin-dir": "bin/"
}
}Now run "composer update" to apply the changes.
Now composer should install all necessary modules and dependencies. We can check if everything went well by trying out the following command. The command should
bin/behat --help
Now make it accessible from anywhere by adding it to a global bin location
ln -s /<your location>/drupalextension/bin/behat /usr/local/bin/behat
Now you are good to write your automation tests
Setting up Automation scripts
Go to your Drupal 8 installation location. Then go to sites/default folder create a folder to add the test scripts.
cd <drupal 8 installation location>
mkdir -p sites/default/behat-tests
cd sites/default/behat-tests
Behat.yml
This is the file where we add the Behat configuration. Basically this is how you tell Behat where to look for certain things. Add the following to the behat.yml file
vi behat.yml
# now add the following code
default: suites: default: contexts: - FeatureContext - Drupal\DrupalExtension\Context\DrupalContext - Drupal\DrupalExtension\Context\MinkContext - Drupal\DrupalExtension\Context\MessageContext - Drupal\DrupalExtension\Context\DrushContext extensions: Behat\MinkExtension: goutte: ~ selenium2: ~ base_url: http://seven.l Drupal\DrupalExtension: blackbox: ~#save the file
#now run the following command
behat --init
The command you ran last should create a folder structure as below inside your test folder
To make sure everything went well run the command to list all definition expression you can use
behat -dl
If everything is setup correctly you should get a list similar to the next screen. This output will tell all the syntaxes you can use when writing your tests/features for a more detailed version you can use the command behat -di
Telling Behat about our web application
We need to now tell Behat about our web application. Basically we can inform this using 2 parameters in the behat.yml file as below. We need to set the base_url and the drupal_root parameters in the behat.yml file. This is no different for website running on SSL protocol
Behat\MinkExtension: base_url: "http://d8.local" goutte: ~ selenium2: ~ Drupal\DrupalExtension: drupal: drupal_root: "/Users/nmeegama/work_repo/d8/" blackbox: ~
Writing Automation scripts
Now we are all ready for business. So lets get down to writing our first test. Create sample.feature and add the following code. This file should go inside the "features" folder of your test directory
@javascript Feature: Login Feature Scenario: Login and click on My account link Given I am on "/user/login" And I fill in "Username" with "admin" And I fill in "Password" with "admin" And I press "op" Then I should see the link "My account"
Running the selenium server
As a pre requisite we also need to download and run the the Selenium server from here . We can then run it using the following command. This server needs to be up and running when we are running the tests/features
java -jar selenium-server-standalone-2.53.0.jar &
Running the tests
Running the tests is the easiest part of it we just need to be at the root location of the test folder (in this case sites/default/behat-tests). Just run behat , this should execute all your feature by opening up your default browser. According to the sample.feature we just added the output should be something similar to below
Conclusion
I have used the following references to create this blog
- https://www.drupal.org/project/drupalextension
- http://docs.behat.org/
- http://mink.behat.org/
- http://behat-drupal-extension.readthedocs.org/
I hope to continue this blog post with more advanced features like how to write your own behat commands, but this should be sufficient to get you started. So I hope you do take something away