I use Connexion for Flask to create a microservice. I would like to write tests for my application using py.test .
The pytest-flask document says to create a device in conftest.py that creates the application as follows:
conftest.py
import pytest from api.main import create_app @pytest.fixture def app(): app = create_app() return app
In my test, I use the client fixture as follows:
test_api.py
def test_api_ping(client): res = client.get('/status') assert res.status == 200
However, when py.test starts py.test , the following error message appears:
==================================== ERRORS ==================================== _______________________ ERROR at setup of test_api_ping ________________________ request = <SubRequest '_monkeypatch_response_class' for <Function 'test_api_ping'>> monkeypatch = <_pytest.monkeypatch.MonkeyPatch instance at 0x7f9f76b76518> @pytest.fixture(autouse=True) def _monkeypatch_response_class(request, monkeypatch): """Set custom response class before test suite and restore the original after. Custom response has `json` property to easily test JSON responses:: @app.route('/ping') def ping(): return jsonify(ping='pong') def test_json(client): res = client.get(url_for('ping')) assert res.json == {'ping': 'pong'} """ if 'app' not in request.fixturenames: return app = request.getfuncargvalue('app') monkeypatch.setattr(app, 'response_class', > _make_test_response_class(app.response_class)) E AttributeError: 'App' object has no attribute 'response_class'
How can i make py.test work? Here is my create_app function:
main.py
import connexion def create_app(): app = connexion.App(__name__, port=8002,) app.add_api('swagger.yaml') return app if __name__ == "__main__": create_app().run()
source share