You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI结合SQLAlchemy使用pytest测试无法获得100%覆盖率问题求助

问题根因

SQLAlchemy 异步扩展底层通过 greenlet 实现同步逻辑到异步协程的适配,默认配置下 coverage 工具仅追踪原生 Python 线程与协程的执行栈,greenlet 切换上下文时会中断覆盖率统计,导致 await 后的代码无法被正确计数。

解决方法

两种方案任选其一即可:

方案1:修改coverage配置适配greenlet

在项目根目录新建 .coveragerc 配置文件,添加以下内容:

[run]
# 开启greenlet并发场景的覆盖率追踪
concurrency =
    greenlet
    thread
# 指定要统计覆盖率的代码目录
source = .

配置完成后重新执行原有测试命令即可,此时 await 后的代码会被正常统计。

方案2:命令行直接指定追踪模式

如果不想新增配置文件,也可以直接在测试命令中添加参数调整追踪规则:

pytest -vv --cov=. --cov-concurrency greenlet,thread --cov-report term-missing --cov-report html
验证效果

修改配置后重新运行测试,main.py中第26-28行的代码会被标记为已覆盖,main.py覆盖率可达到100%。


内容的提问来源于stack exchange,提问作者Ilia Dmitriev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:39:03