BDD-style Rest API testing tool
It uses python's requests for performing HTTP requests, nose for most assertions, trafaret for json validation and behave for BDD style of tests.
Run pip install behave_rest
to download package and install required dependencies
OR
Clone project
Run pip install -r requirements.txt
to install required dependencies
# to execute all feature files (all tests)
behave
# to execture specific feature
behave features/twitter.feature
# to see printed output add --no-capture
behave --no-capture
# run features with specific tags
behave --tags=without_login --tags=slow
More about behave tool you can read here https://pythonhosted.org/behave/index.html
Feature: Twitter search
Background: Setup environment
Given I set base URL to "https://api.twitter.com/1.1/search"
And I set "Authorization" header to "context.twitter_auth"
Scenario: Search for tweets
When I make a GET request to "tweets.json" with parameters
|q|
|stanfy|
Then the response status code should equal 200
And the response structure should equal "twitterSearchData"
And the response header "status" should equal "200 OK"
Behave support JUnit reports, that are easily parsed by CI tools
To enable JUnit reports, create behave.ini
file:
[behave]
junit=true
Reports are generated into /reports
folder
Another useful options to add into behave.ini
are:
stdout_capture=False
to add printed output into reports
show_timings=no
to hide timing of each step
By default, requests
has a turned on SSL validation. This can be turned off globally, by setting context.verify_ssl = True
in environment.py
, or by using steps described in Wiki page
Feature files are intended to locate in /features
folder
Corresponding steps are located in /features/steps
Overall project structure is as follows:
+-- requirements.txt // store python requirements
+-- behave_rest/
+-- environment.py // contains common actions related to scenarios (e.g. clearting headers after running each feature file)
+-- steps/
+-- __init__.py // contains common steps definitions
+-- features/
+-- conf.yaml // store project config (urls, global variables, etc.)
+-- environment.py // context setup steps (e.g. load from config)
+-- *.feature // feature files
+-- steps/
+-- __init__.py // used to import predefined steps
+-- json_responses.py // response structures described in Trafaret format
+-- *.py // steps related to corresponding feature (e.g. "login.py" contains steps that are related to "login.feature")