If the value of jsonpath entry is a string and is wrapped in /.../ then the matching of the results of the jsonpath will be check via the regex. Fixes #146
11 KiB
Test Format
Gabbi tests are expressed in YAML as a series of HTTP requests with their expected response:
tests:
- name: retrieve root
GET: /
status: 200
This will trigger a GET
request to /
on the
configured host
. The
test will pass if the response's status code is 200
.
Test Structure
The top-level tests
category contains an ordered
sequence of test declarations, each describing the expected response to
a given request:
Metadata
Key | Description | Notes |
---|---|---|
|
The test's name. Must be unique within a file. An arbitrary string describing the test. |
required |
|
If |
defaults to |
|
A string message which if set will cause the test to be skipped with the provided message. Determines whether to expect this test to fail. Note that the test will be run anyway. |
defaults to |
Note: When tests are generated dynamically, the TestCase
name will include the respective test's name
, lowercased
with spaces transformed to _
. In at least some test runners
this will allow you to select and filter on test name.
Request Parameters
Key | Description | Notes |
---|---|---|
any uppercase string |
Any such key is considered an HTTP method, with the corresponding value expressing the URL. This is a shortcut combining
corresponds to:
|
|
|
The HTTP request method. |
defaults to |
|
The URL to request. This can either be a full path (e.g.
"/index") or a fully qualified URL (i.e. including host and scheme, e.g.
"http://example.org/index") — see
A dictionary of key-value pairs representing request header names and values. These will be added to the constructed request. A dictionary of query parameters that will be added to the
A representation to pass as the body of a request. Note that
|
required |
|
If |
defaults to |
|
Determines whether the request uses SSL (i.e. HTTPS). Note that
the |
defaults to |
Response Expectations
Key | Description | Notes |
---|---|---|
|
The expected response status code. Multiple acceptable response
codes may be provided, separated by A dictionary of key-value pairs representing expected response header
names and values. If a header's value is wrapped in A list of headers which must not be present. A list of string fragments expected to be present in the response body. A dictionary of JSONPath rules paired with expected matches. Using
this rule requires that the content being sent from the server is JSON
(i.e. a content type of If the value is wrapped in A dictionary of two keys:
This makes it possible to poll for a resource created via an asynchronous request. Use with caution. |
defaults to |
Note that many of these items allow substitutions <state-substitution>
.
Default values for a file's tests
may be provided via
the top-level defaults
category. These take precedence over
the global defaults (explained below).
For examples see the
gabbi tests, example
and the gabbi-demo tutorial.
Fixtures
The top-level fixtures
category contains a sequence of
named fixtures
.
Response Handlers
response_*
keys are examples of Response Handlers.
Custom handlers may be created by test authors for specific use cases.
See handlers
for more
information.
Substitution
There are a number of magical variables that can be used to make reference to the state of a current test or the one just prior. These are replaced with real values during test processing. They are processed in the order given.
$SCHEME
: The current scheme/protocol (usuallyhttp
orhttps
).$NETLOC
: The host and potentially port of the request.$ENVIRON['<environment variable>']
: The name of an environment variable. Its value will replace the magical variable. If the string value of the environment variable is"True"
or"False"
then the resulting value will be the corresponding boolean, not a string.$COOKIE
: All the cookies set by anySet-Cookie
headers in the prior response, including only the cookie key and value pairs and no metadata (e.g.expires
ordomain
).$LAST_URL
: The URL defined in the prior request, after substitutions have been made.$LOCATION
: The location header returned in the prior response.$HEADERS['<header>']
: The value of any header from the prior response.$RESPONSE['<json path>']
: A JSONPath query into the prior response. Seejsonpath
for more on formatting.
Where a single-quote character, '
, is shown above you
may also use a double-quote character, "
, but in any given
expression the same character must be used at both ends.
All of these variables may be used in all of the following fields:
url
query_parameters
data
request_headers
response_strings
response_json_paths
(on the value side of the key value pair)response_headers
(on the value side of the key value pair)response_forbidden_headers
With these variables it ought to be possible to traverse an API without any explicit statements about the URLs being used. If you need a replacement on a field that is not currently supported please raise an issue or provide a patch.
As all of these features needed to be tested in the development of
gabbi itself, the
gabbi tests are a good source of examples on how to use the
functionality. See also example
for a collection of examples and the gabbi-demo tutorial.
Data
The data
key has some special handing to allow for a bit
more flexibility when doing a POST
or PUT
. If
the value is not a string (that is, it is a sequence or structure) it is
treated as a data structure which is turned into a JSON string. If the
value is a string that begins with <@
then the rest of
the string is treated as the name of a file to be loaded from the same
directory as the YAML file. If the value is an undecorated string,
that's the value.
When reading from a file care should be taken to ensure that a reasonable content-type is set for the data as this will control if any encoding is done of the resulting string value. If it is text, json, xml or javascript it will be encoded to UTF-8.