Provides testing for REST APIs with Behat 3. This is a maintained fork
of behat/web-api-extension with additional features and long term support.
Just add to your composer development dependencies:
$ composer require --dev linio/behat-web-api-extension
And activate your extension:
# behat.yml
default:
# ...
extensions:
Behat\WebApiExtension: ~
One of the tricky things in the original behat/web-api-extension library is
the extensive use of private properties and methods, preventing you from
easily extending it. This fork fixes it by moving everything to protected.
One of the new features from this fork is the ability to use placeholders with regular expressions to help you test input or output that varies. For example:
Scenario: Sending values with placeholders
Given a file named "features/send_values.feature" with:
"""
Feature: Exercise WebApiContext data sending
In order to validate the send request step
As a context developer
I need to be able to send a request with values in a scenario
Scenario:
When I send a POST request to "echo" with values:
| name | name |
| pass | pass |
Then the response should contain "POST"
And the response should contain json:
'''
{
"name" : "name",
"pass": "%[a-z]+%"
}
'''
"""
When I run "behat features/send_values.feature"
Then it should pass with:
"""
...
1 scenario (1 passed)
"""
It is common for APIs to return responses with dynamic content. UUIDs, timestamps, generated passwords, etc. All of those, unfortunately, make writing scenarios a bit challenging. With placeholders, you can easily test by using regular expressions to ensure they are returned in a valid format, but can still be variable.
Other examples of placeholders:
{
"timestamp": "%^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2,}[\\-\\+][0-9]{2}:[0-9]{2}$%",
"uuid": "%^[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$%"
}
$ composer install
$ php -S 0.0.0.0:8080 -t testapp &
$ vendor/bin/behat -f progress
Copyright (c) 2014 Konstantin Kudryashov (ever.zet). See LICENSE for details.
- Christophe Coevoet stof [lead developer]
- Other awesome developers