
文章目录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-contexttest每条测试用例的名称都会记录在上下文里包括参数化测试的每个参数组合。排查哪条测试覆盖了哪行代码这个信息很有用。第三跟 pytest-xdist 兼容。你开多进程跑测试或者上远程解释器覆盖率数据照样能汇总不会丢。第四sys.path 的行为跟直接跑 pytest 保持一致。用coverage run的时候当前工作目录会被塞进 sys.pathpytest-cov 不会有这个问题。3、安装和基本用法安装一条命令pip install pytest-cov如果要在分布式环境下跑顺便把 pytest-xdist 也装上pip install pytest-xdist跑测试的时候加上 coverage 参数pytest --covmyproj tests/这里--covmyproj指定要统计覆盖率的模块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 接好让你少写几行命令少踩几个坑。