当前位置: 首页 > news >正文

pytest-cov:给 pytest 测试加上覆盖率报告

文章目录

  • pytest-cov:给 pytest 测试加上覆盖率报告
    • 1、这玩意儿是干嘛的
    • 2、比直接用 coverage run 强在哪
    • 3、安装和基本用法
    • 4、适合哪些人用

pytest-cov:给 pytest 测试加上覆盖率报告

pytest-cov 在 GitHub 上已经拿到 2,043 Star 了。

这是个 pytest 插件,用途很单一:在跑测试的时候顺手把代码覆盖率算出来,输出成报告。对写 Python 项目的人来说,测试和覆盖率基本是标配,pytest-cov 就是把这两件事串在了一起。

1、这玩意儿是干嘛的

pytest 本身是个 Python 测试框架,写测试、跑测试、生成报告都很顺手。但测完了,你总得知道哪些代码跑过、哪些没跑过吧?pytest-cov 就是干这个的。

它底层用的是 coverage.py,但做成了插件形式,直接挂到 pytest 里面。跑测试的时候加一行参数,覆盖率报告就跟着出来了,不用单独跑 coverage 命令。

2、比直接用 coverage run 强在哪

有人可能觉得,直接用coverage run -m pytest不也一样吗?还真不完全一样。

pytest-cov 做了几件事,是直接用 coverage 搞不定的:

第一,自动处理 .coverage 文件。多个测试进程跑下来,coverage 数据能自动合并,不用你手动擦除再拼接。

第二,支持详细的覆盖率上下文。加个--cov-context=test,每条测试用例的名称都会记录在上下文里,包括参数化测试的每个参数组合。排查哪条测试覆盖了哪行代码,这个信息很有用。

第三,跟 pytest-xdist 兼容。你开多进程跑测试,或者上远程解释器,覆盖率数据照样能汇总,不会丢。

第四,sys.path 的行为跟直接跑 pytest 保持一致。用coverage run的时候,当前工作目录会被塞进 sys.path,pytest-cov 不会有这个问题。

3、安装和基本用法

安装一条命令:

pip install pytest-cov

如果要在分布式环境下跑,顺便把 pytest-xdist 也装上:

pip install pytest-xdist

跑测试的时候加上 coverage 参数:

pytest --cov=myproj tests/

这里--cov=myproj指定要统计覆盖率的模块,tests/是测试目录。终端会直接输出类似这样的报告:

-------------------- coverage: ... --------------------- Name Stmts Miss Cover ---------------------------------------- myproj/__init__ 2 0 100% myproj/myproj 257 13 94% myproj/feature4286 94 7 92% ---------------------------------------- TOTAL 353 20 94%

需要把多次测试的覆盖率拼在一起,加--cov-append就行。默认情况下,每次跑测试前 .coverage 文件会被清空,保证数据干净。

从 pytest-cov 6.3 升级上来的要注意:老版本用 .pth 文件来支持子进程的覆盖率测量,7.0 版本之后这个机制被移除了,改靠 coverage 自己的 patch 选项来实现。

4、适合哪些人用

  • 用 pytest 写单元测试,想看覆盖率报告的 Python 开发者
  • 项目上了 pytest-xdist 分布式测试,需要汇总覆盖率数据的团队
  • 想在 CI 流水线里自动生成覆盖率报告、对代码质量有要求的工程

这插件没有花哨的功能,就是把 pytest 和 coverage 接好,让你少写几行命令,少踩几个坑。

生成覆盖率报告、对代码质量有要求的工程

这插件没有花哨的功能,就是把 pytest 和 coverage 接好,让你少写几行命令,少踩几个坑。

http://www.cnnetsun.cn/news/3014839.html

相关文章:

  • 双碳目标下基于全球模式比较计划CMIP6与区域气候-化学耦合模式WRF-Chem的未来大气污染变化模拟
  • IT爱学堂-MKSZ-AI Agent股票异动风控机器人实战(支持美股+A股)
  • PSASP新能源并网仿真:从建模到工程应用的全流程指南
  • FastAPI+LangChain打造智能招聘系统-网易云课堂
  • 【网络安全】Burp Suite重发HTTP请求解CTFHUB题
  • 计算机小程序毕设实战-基于 SpringBoot 的移动端书籍竞拍服务小程序设计与实现 面向校园用户的书籍拍卖交易管理系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 小程序计算机毕设之基于微信小程序的书籍竞价与交易管理系统设计与实现 智能书籍拍卖信息服务平台的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 小程序毕设选题推荐:基于 SpringBoot 的在线书籍竞价交易系统设计与实现 移动端校园书籍拍卖服务小程序设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • Gemini 多模态识图编码全链路实测:教你完成从图片到代码的一体化开发
  • 【通配符使用指南】
  • Windows系统文件d3dx9_32.dll丢失找不到问题解决
  • Python 数据分析实战:2001-2024 全国婚姻登记数据可视化(时序趋势 + 地域地图 + 动态时间轮播)
  • 夏日胶原保卫战!三招锁住肌肤弹力,越热越要补!
  • 移动Linux开发调试利器:JTAG与i.MX处理器实战指南
  • 从拉菲看二次元手游角色养成:情感联结与社区生态构建
  • 小程序毕设选题推荐:基于微信小程序的高校社团考勤与活动发布系统设计与实现 SpringBoot 框架下校园社团资源管理系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 一站式考证+就业机构——君展教育
  • 告别人工质检漏洞,AI相机筑牢服装标签品控防线
  • 微信小程序毕设项目:基于 SpringBoot 的儿童疫苗接种数据管理系统设计与实现 数字化妇幼背景下儿童疫苗服务小程序设计与实现(源码+文档,讲解,调试运行,定制等)
  • 大模型应用-筑基期【02:大模型核心概念入门】
  • 外部区域特殊拉格朗日方程Dirichlet问题:渐近行为与数值求解
  • 终极语音修复指南:5个简单步骤让任何音频重获清晰
  • GraphRAG 实战:从工具接入到项目提效
  • 我开了 3 年美容院,终于把收银系统的账算清楚了
  • 模型微调方法:从通用到专用为什么 Text2SQL 准确率如此重要?
  • 成都/攀枝花水泥厂回转窑硬齿面减速机怎么选型?符合JC/T878.3标准
  • 在树莓派的Hailo8L芯片部署自己的YOLOV8模型
  • 大模型应用-筑基期【06:Prompt调试与迭代方法】
  • 工业机器人自动化改造实战:CNC 上下料场景技术选型与落地指南
  • PCF80空间单细胞蛋白组适合做什么?从肿瘤微环境到治疗响应研究