跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Python 代码覆盖率
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= Python代码覆盖率 = '''代码覆盖率'''(Code Coverage)是衡量测试用例对源代码覆盖程度的指标,用于评估测试的完整性。在Python中,它帮助开发者识别未经测试的代码区域,从而提升软件质量。本章将详细介绍其原理、工具及实践方法。 == 核心概念 == 代码覆盖率通过分析测试执行期间触及的代码行、分支、函数等元素,计算以下常见指标: * '''语句覆盖率''':测试执行的代码行占总行数的比例 * '''分支覆盖率''':测试覆盖的控制流分支(如if/else)比例 * '''函数覆盖率''':被调用的函数占全部函数的比例 * '''条件覆盖率''':布尔子表达式被评估为True/False的情况 数学表达式: <math> \text{覆盖率} = \frac{\text{已执行代码数}}{\text{总代码数}} \times 100\% </math> == 工具与实现 == Python常用覆盖率工具: * <code>coverage.py</code>(主流选择) * <code>pytest-cov</code>(与pytest集成) === 基础示例 === 安装工具: <syntaxhighlight lang="bash"> pip install coverage pytest-cov </syntaxhighlight> 示例被测代码(<code>calculator.py</code>): <syntaxhighlight lang="python"> def add(a, b): return a + b def subtract(a, b): return a - b def multiply(a, b): if a == 0 or b == 0: return 0 return a * b </syntaxhighlight> 测试文件(<code>test_calculator.py</code>): <syntaxhighlight lang="python"> import pytest from calculator import * def test_add(): assert add(2, 3) == 5 def test_multiply(): assert multiply(3, 4) == 12 # 未测试a或b为0的情况 </syntaxhighlight> 执行覆盖率分析: <syntaxhighlight lang="bash"> coverage run -m pytest test_calculator.py coverage report -m </syntaxhighlight> 输出结果示例: <pre> Name Stmts Miss Cover Missing --------------------------------------------- calculator.py 7 2 71% 6, 9 test_calculator.py 4 0 100% --------------------------------------------- TOTAL 11 2 82% </pre> == 进阶应用 == === 分支覆盖率分析 === 使用<code>--branch</code>参数检测条件分支: <syntaxhighlight lang="bash"> coverage run --branch -m pytest test_calculator.py </syntaxhighlight> 此时会发现<code>multiply()</code>中<code>a == 0 or b == 0</code>的分支未被完全覆盖。 === 可视化报告 === 生成HTML报告更直观: <syntaxhighlight lang="bash"> coverage html </syntaxhighlight> 示例报告结构: <mermaid> pie title 覆盖率分布 "已覆盖" : 82 "未覆盖" : 18 </mermaid> == 实际案例 == '''场景:Web应用登录验证''' <syntaxhighlight lang="python"> def validate_login(username, password): if not username or not password: return False elif len(password) < 8: return False else: return db.check_credentials(username, password) </syntaxhighlight> 完整测试应覆盖: 1. 空用户名/密码 2. 密码长度不足 3. 有效凭证 4. 无效凭证 == 最佳实践 == * 目标覆盖率达到80%以上(关键模块建议95%+) * 优先保证复杂逻辑和核心功能的覆盖率 * 结合持续集成(CI)自动化覆盖率检查 * 注意覆盖率的局限性:高覆盖率≠无缺陷 == 常见问题 == '''Q: 100%覆盖率是否意味着没有bug?''' A: 不是。覆盖率仅反映代码被执行,不验证逻辑正确性。例如: <syntaxhighlight lang="python"> def divide(a, b): return a / b # 测试可能覆盖但未处理b=0异常 </syntaxhighlight> '''Q: 如何忽略无需测试的代码?''' 使用<code># pragma: no cover</code>注释: <syntaxhighlight lang="python"> def deprecated_function(): # pragma: no cover pass </syntaxhighlight> [[Category:编程语言]] [[Category:Python]] [[Category:Python 测试与调试]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)