python asyn c unitest - assert False не проходит тест - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь проверить API, который я написал с FastAPI. В рамках этого я запустил контейнер postgres и написал тест, который подключается к БД. Я хотел проверить, работает ли API:

class ServiceTest(unittest.TestCase):
    # All tests requires that there will be up a db container up
    # docker run -d -e POSTGRES_PASSWORD=123 -e POSTGRES_USER=user -e POSTGRES_DB=dev -p 5432:5432 --name postgres12_container postgres:12.1-alpine

    async def test_get_index_page(self):
        logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
        log = logging.getLogger("TestLog")
        log.debug("debug message")
        await startup()
        client = TestClient(app)
        response = client.get("/api/v1/my-ms/")
        assert response.status_code == 200
        assert False, "assert failed"

Теперь, как вы можете видеть, последняя строка должна не пройти тест, но этого не происходит - assert не работает. Тест проходит успешно. Когда я удаляю «asyn c» из функции defenition, проверка не проходит. Однако мне нужен asyn c, потому что при запуске c isyn c ..

* Я использую python 3.7.4

1 Ответ

0 голосов
/ 21 апреля 2020

Я пытался использовать aionunittest, как рекомендовал jonrsharpe в комментариях, но я получил еще одну ошибку, связанную с событием l oop. Поэтому я решил работать с asyncio dir и получить событие l oop самостоятельно: import unittest

import asyncio
from fastapi.testclient import TestClient
from app.main import app
from app.main import startup

client = TestClient(app)
loop = asyncio.get_event_loop()
loop.run_until_complete(startup()) # connect to the db


class ServiceTest(unittest.TestCase):
    # All tests requires that there will be up a db container up
    # docker run -d -e POSTGRES_PASSWORD=history_db_password -e POSTGRES_USER=history_db_username -e POSTGRES_DB=history_db_dev -p 5432:5432 --name postgres12_container postgres:12.1-alpine

    def test_get_index_page(self):
        response = client.get("/api/v1/history_manager/")
        assert response.status_code == 200
        print(response)

Я также попытался использовать asyncio.run (startup ()), но затем я получил исключение в client.get (), что операция уже выполняется .. Так что, я думаю, я пока останусь с этим способом тестирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...