小编Ili*_*iev的帖子

FastAPI、SQLAlchemy、pytest,无法获得100%覆盖率,没有正确收集

我正在尝试构建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)

python sqlalchemy python-asyncio pytest-asyncio fastapi

11
推荐指数
2
解决办法
2326
查看次数