Écrire des tests avec Falcon, un framework Web léger pour Python

Qu'est-ce que Falcon

Framework Web Python https://falconframework.org/

J'ai dû créer un serveur API simple en Python au travail, j'ai donc choisi Falcon, qui est rapide et n'a pas de fonctionnalités supplémentaires.

Install

Prémisse que Python et PyPy sont installés

pip install falcon

Facile. Actuellement (2016/12) v1.1

Est-ce un peu différent lorsque vous le mettez dans votre Mac? Les détails sont officiels. https://falcon.readthedocs.io/en/stable/user/install.html

Exemple d'API qui renvoie un simple json

Voici un exemple d'API qui renvoie json lorsque vous accédez à / hoge / {id} avec get


# api.py

import falcon
import json

class HogeResource(object):
    def on_get(self, req, resp, id):
        """Handles GET requests"""
        resp.status = falcon.HTTP_200
        resp.body = json.dumps({ 
                      "result": true, 
                      "message": "success!",
                    })

api = falcon.API()
hoge = HogeResource()

api.add_route('/hoge/{id}', hoge)

Tout ce que vous avez à faire est de passer une instance de la classe qui définit url et on_get (ou on_post, on_put, etc.) à l'instance de falcon.API () avec add_route. Facile!

Vous pouvez également valider en utilisant @ falcon.before


def validate(req, resp, resource, params):
    try:
        params['id'] = int(params['id'])
    except ValueError:
        raise falcon.HTTPBadRequest('Invalid ID',
                                    'ID was not valid.')
class HogeResource(object):

    @falcon.before(validate)
    def on_get(self, req, resp, id):
        #..Abréviation..

Contrôle de fonctionnement

Cette fois, nous utiliserons gunicorn comme serveur WSGI

Quand j'ai écrit le code ci-dessus avec le nom de fichier api.py

pip install gunicorn
gunicorn api:main

curl localhost:8000/hoge/12345

tester

Les tests sont également pris en charge, je l'ai donc écrit http://falcon.readthedocs.io/en/stable/api/testing.html



#api_test.py

import falcon
import falcon.testing as testing

from api import api

class TestHogeResource(testing.TestCase):

    def setUp(self):
        super(testing.TestCase, self).setUp()
        self.api = api

    def test_hoge(self):
        result = self.simulate_get("/hoge/12345")
        self.assertEqual(result.status, falcon.HTTP_200)

    def test_hoge_error(self):
        result = self.simulate_get("/hoge/moge")
        self.assertEqual(result.status, falcon.HTTP_400)

Lancer le test

Installer et utiliser des outils de test

pip install testtools
python -m testtools.run api_test.py

> Ran 2 tests in 0.001s
> OK

Recommended Posts

Écrire des tests avec Falcon, un framework Web léger pour Python
API Web avec Python + Falcon
Création d'une nouvelle application corona à Kyoto avec le framework Web de Python Dash
Créez un framework Web avec Python! (1)
Créez un framework Web avec Python! (2)
Introduction à Tornado (1): Framework Web Python démarré avec Tornado