Unit Testing with Requests

If you're working with APIs or the web in python you will (or should) have heard of requests. The 'HTTP for Humans' library is one of python's most popular and most downloaded libraries and is referenced by the urllib docs as the recommended way to do HTTP requests in python.

As strict unit testers of our code we need to assert that our projects are making the expected HTTP requests however don't want to be making actual network connections. Most people start with simply mocking this requests interface but this is much more complex than it appears on first glance and frequently ends up replicating large chunks of the interface or skipping mocked out functions within your code.

In this talk I'll cover two libraries that can help you mock out your HTTP requests: requests-mock and betamax.

requests-mock is the extended and more correct version of mocking out the interface. It lets you ensure that the requests you expect are going over the wire, but ensures that all the bytes/strings, json decoding and other helper features that requests offers work, without your mocks becoming unmanageable.

Betamax gives you functional style testing without the network connection. It allows you to record real interactions through requests, store that to file, and replay them later in testing.

Between them we can assert our behaviour both against our local, constructed responses, and real recorded responses our application has made.

With a small example app I'll demonstrate how you can use these libraries, the different benefits of each, and how to structure your tests to make the most use of them.

Presented by

Jamie Lennox

Jamie has had the privilege of working in entirely Open Source communities around OpenStack for the past few years. He still works with the OpenStack Keystone team on identity management and security, but is these days mostly focused on constructing and deploying large scale CI systems at IBM for community projects. A professional python hacker - with his head in the clouds.


Sponsors