事件循环已关闭-pytest-FastAPI

问题描述 投票:0回答:1

在我的 fastapi 应用程序中,我使用 pytest 编写了测试用例。 我的测试文件夹包括

conftest.py

import pytest
from fastapi.testclient import TestClient
from main import app


@pytest.fixture(scope="session")
def test_client():
    client = TestClient(app)
    yield client

test_cases.py

def test_get_courses(test_client):
    response = test_client.get("/courses/")
    assert response.status_code == 200


def test_get_course_overview(test_client):
    course_id = "66c21d35c014f6ce1d0c29ab"
    response = test_client.get(f"/courses/{course_id}")
    print(response.json())
    assert response.status_code == 200

当我运行单个测试用例时没有问题,但如果我运行所有测试用例,它会给出以下打印response.json的错误

{'status': False, 'status_code': 500, 'detail': 'Event loop is closed'}

我使用了基于 session 的范围,并且还尝试了 pytest-asyncio 仍然相同。

感谢您的解决方案。

scope pytest fastapi event-loop pytest-asyncio
1个回答
0
投票

尝试添加固定装置,这将为每个测试用例创建一个新的事件循环:

@pytest.fixture(scope="session")
def event_loop(request):
    """Create an instance of the default event loop for each test case."""
    loop = asyncio.get_event_loop_policy().new_event_loop()
    yield loop
    loop.close()

当我遇到类似问题时,它对我有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.