Где полный пример тестирования с помощью pytest с использованием расширения Quart Quart-OpenAPI? - PullRequest
0 голосов
/ 31 января 2019

Я хотел бы использовать pytest с расширением Quart quart-openapi, но примеры документации и поиск в Google не помогли.

Где найти конкретный пример инструмента тестирования pytest, используемого с quart-openapi?

До сих пор я прочитал следующие источники:

Учебное пособие по блогам Quart с тестированием

Quart документация по тестированию

Вопрос переполнения стека по аналогичным инструментам

Структура проекта:

├── app
│   ├── __init__.py
│   ├── api.py
│   ├── log.py
│   
├── requirements.txt
├── run.py
└── tests
    ├── __init__.py
    └── test_endpoint.py

app/__init__.py:


    from .api import QUART_APP

api.py:


    """Registered endpoints"""
    from quart import jsonify
    from quart_openapi import Pint, Resource

    # Docs say that Pint will forward all init args to Quart()
    QUART_APP = Pint(__name__, title="Quart tts")

    @QUART_APP.route('/')
    class Home(Resource):
        """ Endpoint that reports its own status """
        async def get(self):
            """ Report status of service """
            return jsonify({'OK': True, 'hello': 'world'})

test_endpoint.py:


    import pytest
    from app.api import QUART_APP as app
    @pytest.fixture(name='test_app')
    def _test_app():
        return app

    @pytest.mark.asyncio
    async def test_app(app):
        client = app.test_client()
        response = await client.get('/')
        assert response.status_code == 200

Фактические результаты: ERROR at setup of test_app ... fixture 'app' not found

Ожидаемые результаты: я могу проверитьс помощью quart-openapi с использованием pytest.

1 Ответ

0 голосов
/ 31 января 2019

Глядя на документы прибора pytest, имя, которое вы даете устройству, - это имя, на которое вы бы ссылались.Поэтому я, вероятно, изменил бы параметр «name» на «testapp» следующим образом:

import pytest
from app.api import QUART_APP as app
@pytest.fixture(name='testapp')
def _test_app():
  return app

@pytest.mark.asyncio
async def test_app(testapp):
  client = testapp.test_client()
  response = await client.get('/')
  assert response.status_code == 200

Когда я настраиваю это в своем собственном каталоге, вышеприведенное работает и проходит так, что оно должно работать для вас.

...