drf-chaos

Collection of decorators and middlewares for testing DRF API under unexpected circumstances.


Keywords
api, django, rest, test
License
BSD-3-Clause
Install
pip install drf-chaos==0.1.3

Documentation

drf-chaos extension

drf-chaos is a small collection of decorators and middlewares for testing Django REST Framework API under unexpected circumstances.

Settings

DRF_CHAOS_ENABLED

Decorators

Delay

Delay response of a specific amount of milliseconds

@delay(rate, milliseconds)

Params:

rate: probability that an unexpected event happens

milliseconds: suspend execution of the current thread for the given number of milliseconds

Error

Return a different response HTTP status code

@error(rate, status)

Params:

rate: probability that an unexpected event happens

status: integer corresponding to any valid HTTP status code. See DRF HTTP status codes

Mime

Return a random Mime Content-type

@mime(rate)

Params:

rate: probability that an unexpected event happens

Chaos

Apply a random unexpected event to the HTTP response. (A delay between 0 to 3 second and a random HTTP status code)

@chaos(rate)

Params:

rate: probability that an unexpected event happens

Middlewares

  • ChaosMiddleware

Example

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView

from drf_chaos.decorators import delay, error, mime, chaos


class DelayApiView(APIView):
    @delay(rate=0.5, milliseconds=700)
    def get(self, request):
        return Response(status=status.HTTP_204_NO_CONTENT)


class ErrorApiView(APIView):
    @error(rate=0.5, status=500)
    def get(self, request):
        return Response(status=status.HTTP_204_NO_CONTENT)


class MimeTypeApiView(APIView):
    @mime(rate=0.5)
    def get(self, request):
        return Response(status=status.HTTP_204_NO_CONTENT)


class ChaosApiView(APIView):
    @chaos(rate=0.5)
    def get(self, request):
        return Response(status=status.HTTP_204_NO_CONTENT)

Requirements

  • Python (2.7)
  • Django (1.6+, 1.7+, 1.8)

Installation

Install using pip

pip install drf-chaos

Add 'drf_chaos' to your INSTALLED_APPS setting.

INSTALLED_APPS = (
    ...
    'drf_chaos',
)