Schreiben Sie Tests mit Falcon, einem leichtgewichtigen Webframework für Python

Was ist Falcon?

Python-Webframework https://falconframework.org/

Ich musste bei der Arbeit einen einfachen API-Server in Python erstellen, also entschied ich mich für Falcon, das schnell ist und keine zusätzlichen Funktionen bietet.

Install

Voraussetzung ist, dass Python und PyPy installiert sind

pip install falcon

Einfach. Derzeit (2016/12) v1.1

Ist es ein bisschen anders, wenn Sie es in Ihren Mac stecken? Details sind offiziell. https://falcon.readthedocs.io/en/stable/user/install.html

API-Beispiel, das einen einfachen JSON zurückgibt

Unten finden Sie eine Beispiel-API, die json zurückgibt, wenn Sie mit get auf / hoge / {id} zugreifen


# 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)

Sie müssen lediglich eine Instanz der Klasse, die url und on_get (oder on_post, on_put usw.) definiert, mit add_route an die Instanz von falcon.API () übergeben. Einfach!

Sie können auch mit @ falcon.before validieren


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):
        #..Abkürzung..

Funktionsprüfung

Dieses Mal werden wir Gunicorn als WSGI-Server verwenden

Als ich den obigen Code mit dem Dateinamen api.py schrieb

pip install gunicorn
gunicorn api:main

curl localhost:8000/hoge/12345

Prüfung

Tests werden auch unterstützt, also habe ich es geschrieben 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)

Führen Sie den Test aus

Installieren und verwenden Sie Testtools

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

> Ran 2 tests in 0.001s
> OK

Recommended Posts

Schreiben Sie Tests mit Falcon, einem leichtgewichtigen Webframework für Python
Web-API mit Python + Falcon
Erstellt eine neue Corona-App in Kyoto mit Pythons Webframework Dash
Erstellen Sie ein Webframework mit Python! (1)
Erstellen Sie ein Webframework mit Python! (2)
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet