A toolchain for testing REST APIs in BDD manner.
Project description
bddrest
Toolchain to define and verify REST API in BDD.
Table of Contents
Quick start
Writing tests
Using Given
, when
, functions as you see in the example below, you can
determine and assert the behaviour of your REST API
.
The story
, response
, status
objects are some proxies for currently
writing story(inside the with Given( ... ): context) and it's response.
and the last response after a Given
and or when
.
import re
import sys
import json
from bddrest.authoring import Given, when, response, status
def wsgi_application(environ, start_response):
path = environ['PATH_INFO']
if path.endswith('/None'):
start_response(
'404 Not Found',
[('Content-Type', 'text/plain;charset=utf-8')]
)
yield b''
else:
start_response(
'200 OK',
[('Content-Type', 'application/json;charset=utf-8')]
)
result = json.dumps(dict(
foo='bar'
))
yield result.encode()
with Given(
wsgi_application,
title='Quickstart!',
path='/books/id: 1',
as_='visitor') as story:
assert status == 200
assert status == '200 OK'
assert 'foo' in response.json
assert response.json['foo'] == 'bar'
when(
'Trying invalid book id',
path_parameters={'id': None}
)
assert response.status == 404
Dumping a Story
story.dumps()
Produces:
base_call:
as_: visitor
description: As a member I have to POST a book to the library.
form:
name: BDD Book
query:
a: b
response:
headers:
- 'Content-Type: application/json;charset=utf-8'
json:
foo: bar
status: 200 OK
title: Posting a book
path: /books/:id
path_parameters:
id: '1'
verb: GET
calls:
- response:
headers:
- 'Content-Type: text/plain;charset=utf-8'
status: 404 Not Found
title: Trying invalid book id
path_parameters:
id: None
You may load the story again from this yaml with Story.loads(yaml)
.
There are two additional methods available to dump and load to
and from a file: story.load(file)
and story.dump(file)
Auto Dumping
You may pass the autodump
argument of the Given
function to configure the
auto-dumping:
:param autodump: A file-like object to write dumped story.
Default is `None`, means autodump is disabled by default.
Auto Documentation
You may pass the autodoc
argument of the Given
function to configure the
auto-documentation:
:param autodoc: A file-like object to write documentation.
Default is `None`, meana autodoc is disabled by default.
:param autodoc_format: Either ``markdown`` or ``html``. default is
``markdown``.
Markdown
You can use story.document([formatter_factory=MarkdownFormatter])
to generate documentation
in arbitrary format for example: Markdown
.
There is also a CLI to do this:
bddrest document < story.yml > story.md
## Posting a book
### GET /books/:id
As a member I have to POST a book to the library.
### Path Parameters
Name | Example
--- | ---
id | 1
### Query Strings
Name | Example
--- | ---
a | b
### Form
Name | Example
--- | ---
name | BDD Book
### Response: 200 OK
#### Headers
* Content-Type: application/json;charset=utf-8
#### Body
```json
{"foo": "bar"}
```
## WHEN: Trying invalid book id
### Path Parameters
Name | Example
--- | ---
id | None
### Response: 404 Not Found
#### Headers
* Content-Type: text/plain;charset=utf-8
Command Line Interface
After installing the project a command named bddrest
will be available.
bddrest -h
Enabling the bash autocompletion for bddrest
Add this into your .bashrc
and or $VIRTUAL_ENV/bin/postactivate
.
eval "$(register-python-argcomplete bddrest)"
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file bddrest-6.1.1.tar.gz
.
File metadata
- Download URL: bddrest-6.1.1.tar.gz
- Upload date:
- Size: 29.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f70f6ab8c53cd5ce13a0190434046711ab42d6229e6e721e64ca546c0a29dc34 |
|
MD5 | 0c9e7019a2e7d322393c2b06fdc6fb90 |
|
BLAKE2b-256 | b684a8f0c8d2a9879d2374645f6c3e530c447ec5c8f63e57921f3f5571967f26 |
File details
Details for the file bddrest-6.1.1-py3-none-any.whl
.
File metadata
- Download URL: bddrest-6.1.1-py3-none-any.whl
- Upload date:
- Size: 24.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | edaae1e084cb4e4222e14434970460a120394ed3c4759804ad9c8abb9d1986af |
|
MD5 | edf4850b0e50a8218dd1736a571fd6eb |
|
BLAKE2b-256 | 64fa7a89db35767370fa0aef3bbc9f9a3b0a6db5b3a0a09d0de635e329c87e3a |