Coverage,让你的代码测试更有底气!
代码覆盖率,这个听起来就很高大上的词,其实就是衡量你的测试代码有多全面的一个指标。简单来说,就是看看你的测试用例到底覆盖了多少实际代码。今天咱们就来聊聊 Python 中的一个神器 —— Coverage。这玩意儿能帮你轻松搞定代码覆盖率的测试,让你写出来的代码更靠谱!
Coverage 是个啥?
Coverage 是 Python 世界里的一个超级实用的库。它能帮你检查你的代码有哪些地方被测试用例覆盖到了,哪些地方还是个“处女地”。用它来衡量代码覆盖率,简直不要太爽!
安装 Coverage 超级简单,就一行命令的事:
pip install coverage
装好之后,你就可以开始玩耍了。
怎么用 Coverage?
用 Coverage 测试代码覆盖率,基本上分三步走:
跑测试
生成报告
看报告找问题
听起来是不是很简单?咱们来看看具体怎么操作。
跑测试
假设你有个 my_math.py
文件,里面有一些简单的数学函数:
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if b == 0:
raise ValueError(“Cannot divide by zero”)
return a / b
再假设你有个测试文件 test_my_math.py
:
import unittest
from my_math import add, subtract, multiply, divide
class TestMyMath(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 3), 5)
def test_subtract(self):
self.assertEqual(subtract(5, 3), 2)
def test_multiply(self):
self.assertEqual(multiply(2, 3), 6)
if __name__ == '__main__':
unittest.main()
要用 Coverage 跑测试,你只需要在命令行里输入:
coverage run -m unittest test_my_math.py
这样,Coverage 就会帮你跑测试,还顺便收集了覆盖率数据。
生成报告
测试跑完了,接下来就是生成报告了。Coverage 支持好几种格式的报告,最简单的就是终端输出:
coverage report
你还可以生成更详细的 HTML 报告:
coverage html
这样会生成一个 htmlcov
目录,里面有一堆 HTML 文件,你用浏览器打开 index.html
就能看到超级详细的覆盖率报告。
看报告找问题
生成报告后,你就能看到每个文件的覆盖率情况了。比如你可能会看到这样的输出:
asciidoc
复制
Name Stmts Miss Cover
----------------------------------
my_math.py 10 2 80%
test_my_math.py 11 0 100%
----------------------------------
TOTAL 21 2 90%
这告诉你,my_math.py
文件有 80% 的代码被测试覆盖到了,而 test_my_math.py
全部覆盖了。
温馨提示
看到这儿,你可能会想:哇,这也太简单了吧!但是别高兴得太早,有几个坑你得注意:
别太迷信覆盖率数字。100% 的覆盖率不代表你的代码就绝对没问题。
有些代码可能执行了,但结果并没有被验证,这种情况 Coverage 也会算作已覆盖。
异常处理的代码往往容易被忽视,记得也要测试各种异常情况。
进阶玩法
如果你想更细致地控制 Coverage 的行为,可以创建一个 .coveragerc
文件。比如:
[run]
source = my_package
[report]
exclude_lines =
pragma: no cover
def __repr__
if __name__ == .__main__.:
ignore_errors = True
这个配置文件可以帮你排除一些不需要测试的代码,让覆盖率报告更加精准。
Coverage 还有一堆高级功能,比如分支覆盖、并行模式等等。等你玩熟悉了基本操作,可以去看看官方文档,里面有更多花里胡哨的玩法。
好了,今天的 Coverage 入门就到这里。记住,写测试不是为了凑数字,而是为了让你的代码更靠谱。覆盖率高固然好,但更重要的是写出有意义的测试用例。去试试吧,相信你会爱上这个工具的!