Skip to content

grappa-py/http

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

grappa logo

Build Status PyPI Coverage Status Documentation Status Stability Code Climate Python Versions Say Thanks

About

HTTP request/response assertion plugin for grappa. grappa-http extends grappa assertion operators with HTTP protocol testing.

To get started, take a look to the documentation, tutorial and examples.

Showcase

import pook import requests from grappa_http import should # Activate the HTTP mock engine pook.on() # Register a sample mock pook.get('server.org/foo?bar=baz', reply=200, response_headers={'Server': 'nginx'}, response_json={'foo': 'bar'}) # Perform HTTP request res = requests.get('http://server.org/foo?bar=baz') # Test response status to be OK res | should.be.ok # Or alternatively using the status code res | should.have.status(200) # Test request URL res | should.have.url.hostname('server.org') res | should.have.url.port(80) res | should.have.url.path('/foo') res | should.have.url.query.params({'bar': 'baz'}) # Test response body MIME content type res | should.have.content('json') # Test response headers (res | (should.have.header('Content-Type') .that.should.be.equal('application/json'))) res | should.have.header('Server').that.should.contain('nginx') # Test response body res | should.have.body.equal.to('{\n "foo": "bar"\n}') res | should.have.body.that.contains('foo') # Test response body length res | should.have.body.length.of(20) res | should.have.body.length.higher.than(10) # Test response JSON body res | should.have.json.equal.to({'foo': 'bar'}) res | should.have.json.have.key('foo') > should.be.equal.to('bar') # Validate response JSON bodies using JSONSchema res | should.implement.jsonschema({ '$schema': 'http://json-schema.org/draft-04/schema#', 'title': 'Response JSON', 'type': 'object', 'required': ['foo'], 'properties': { 'foo': { 'description': 'foo always means foo', 'type': 'string' } } })

Full-featured error report example:

Traceback (most recent call last): File "grappa-http/tests/http_test.py", line 38, in test_http_tutorial res | should.have.body.equal.to('{\n "foo": "baa"\n}') File "grappa/grappa/test.py", line 208, in __ror__ return self.__overload__(value) File "grappa/grappa/test.py", line 196, in __overload__ return self.__call__(subject, overload=True) File "grappa/grappa/test.py", line 73, in __call__ return self._trigger() if overload else Test(subject) File "grappa/grappa/test.py", line 113, in _trigger raise err AssertionError: Oops! Something went wrong! The following assertion was not satisfied subject "{\n "foo": "bar"\n}" should have body equal to "{\n "foo": "baa"\n}" What we expected a response body data equal to: { "foo": "baa" } What we got instead a response body with data: { "foo": "bar" } Difference comparison > { > - "foo": "bar" > ? ^ > + "foo": "baa" > ? ^ > } Where File "grappa-http/tests/http_test.py", line 38, in test_http_tutorial 30| res | should.have.content('json') 31| 32| # Test response headers 33| (res | (should.have.header('Content-Type') 34| .that.should.be.equal('application/json'))) 35| res | should.have.header('Server').that.should.contain('nginx') 36| 37| # Test response body 38| > res | should.have.body.equal.to('{\n "foo": "baa"\n}') 39| res | should.have.body.that.contains('foo') 40| 41| # Test response body length 42| res | should.have.body.length.of(20) 43| res | should.have.body.length.higher.than(10) 44| 45| # Test response JSON body

Features

  • Full-featured HTTP response assertions.
  • Supports any protocol primitive assertions.
  • First-class support for JSON body assertion.
  • Built-in JSONSchema validation.
  • Full-features request URL validation.
  • Featured regular expression based assertion.
  • Works with requests and aiohttp HTTP clients.
  • Friendly and detailed assertion error reporting with body diff comparisons.
  • Provides both expect and should assertion styles.
  • Testing framework agnostic. Works with unittest, nosetests, pytest, behave...
  • Works with Python 2.6+, 3+, PyPy and possibly other Python implementations.

Supported HTTP clients

Installation

Using pip package manager:

pip install --upgrade grappa-http

Or install the latest sources from Github:

pip install -e git+git://github.com/grappa-py/http.git#egg=grappa