[Python] How to apply integration tests to a Flask RESTful API

Discussão em 'Python' iniciado por Stack, Março 12, 2025.

  1. Stack

    Stack Membro Participativo

    [As per https://stackoverflow.com/a/46369945/1021819, the title should refer to integration tests rather than unit tests]

    Suppose I'd like to test the following Flask API (from here):

    import flask
    import flask_restful

    app = flask.Flask(__name__)
    api = flask_restful.Api(app)

    class HelloWorld(flask_restful.Resource):
    def get(self):
    return {'hello': 'world'}

    api.add_resource(HelloWorld, '/')

    if __name__ == "__main__":
    app.run(debug=True)


    Having saved this as flaskapi.py and run it, in the same directory I run the script test_flaskapi.py:

    import unittest
    import flaskapi
    import requests

    class TestFlaskApiUsingRequests(unittest.TestCase):
    def test_hello_world(self):
    response = requests.get('http://localhost:5000')
    self.assertEqual(response.json(), {'hello': 'world'})


    class TestFlaskApi(unittest.TestCase):
    def setUp(self):
    self.app = flaskapi.app.test_client()

    def test_hello_world(self):
    response = self.app.get('/')

    if __name__ == "__main__":
    unittest.main()


    Both the tests pass, but for the second test (defined in the TestFlaskApi) class I haven't yet figured out how to assert that the JSON response is as expected (namely, {'hello': 'world'}). This is because it is an instance of flask.wrappers.Response (which is probably essentially a Werkzeug Response object (cf. http://werkzeug.pocoo.org/docs/0.11/wrappers/)), and I haven't been able to find an equivalent of the json() method for requests Response object.

    How can I make assertions on the JSON content of the second response?

    Continue reading...

Compartilhe esta Página