在我的 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 仍然相同。
感谢您的解决方案。
尝试添加固定装置,这将为每个测试用例创建一个新的事件循环:
@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()
当我遇到类似问题时,它对我有帮助。