我正在尝试构建FastAPI完全覆盖测试的应用程序python 3.9
为此目的,我选择了堆栈:FastAPI、uvicorn、SQLAlchemy、asyncpg、pytest(+ async、cov 插件)、覆盖范围和 httpx AsyncClient
这是我的最低要求.txt
所有测试都运行顺利,我得到了预期的结果。但我遇到了问题,覆盖范围没有正确收集。await当协程将控制权返回到事件循环时,它会在第一个关键字之后中断
以下是关于如何重现此行为的最小集合(也可以在 GitHub 上找到)。
应用代码main.py:
import sqlalchemy as sa
from fastapi import FastAPI
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from starlette.requests import Request
app = FastAPI()
DATABASE_URL = 'sqlite+aiosqlite://?cache=shared'
@app.on_event('startup')
async def startup_event():
engine = create_async_engine(DATABASE_URL, future=True)
app.state.session = AsyncSession(engine, expire_on_commit=False)
app.state.engine = engine
@app.on_event('shutdown')
async def shutdown_event():
await app.state.session.close()
@app.get('/', name="home")
async def get_home(request: Request):
res = await request.app.state.session.execute(sa.text('SELECT 1'))
# after …Run Code Online (Sandbox Code Playgroud)