Coverage,让你的代码测试更有底气!

文摘   2024-10-20 19:20   黑龙江  

Coverage,让你的代码测试更有底气!

代码覆盖率,这个听起来就很高大上的词,其实就是衡量你的测试代码有多全面的一个指标。简单来说,就是看看你的测试用例到底覆盖了多少实际代码。今天咱们就来聊聊 Python 中的一个神器 —— Coverage。这玩意儿能帮你轻松搞定代码覆盖率的测试,让你写出来的代码更靠谱!



Coverage 是个啥?


Coverage 是 Python 世界里的一个超级实用的库。它能帮你检查你的代码有哪些地方被测试用例覆盖到了,哪些地方还是个“处女地”。用它来衡量代码覆盖率,简直不要太爽!


安装 Coverage 超级简单,就一行命令的事:    



pip install coverage


装好之后,你就可以开始玩耍了。



怎么用 Coverage?


用 Coverage 测试代码覆盖率,基本上分三步走:


  1. 跑测试

  2. 生成报告

  3. 看报告找问题

听起来是不是很简单?咱们来看看具体怎么操作。


跑测试

假设你有个 my_math.py 文件,里面有一些简单的数学函数:



def add(a, b):    return a + bdef subtract(a, b):    return a - bdef multiply(a, b):    return a * bdef divide(a, b):    if b == 0:        raise ValueError(“Cannot divide by zero”)    return a / b


再假设你有个测试文件 test_my_math.py



import unittestfrom my_math import add, subtract, multiply, divideclass 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 全部覆盖了。



温馨提示


看到这儿,你可能会想:哇,这也太简单了吧!但是别高兴得太早,有几个坑你得注意:


  1. 别太迷信覆盖率数字。100% 的覆盖率不代表你的代码就绝对没问题。

  2. 有些代码可能执行了,但结果并没有被验证,这种情况 Coverage 也会算作已覆盖。

  3. 异常处理的代码往往容易被忽视,记得也要测试各种异常情况。


进阶玩法


如果你想更细致地控制 Coverage 的行为,可以创建一个 .coveragerc 文件。比如:



[run]source = my_package[report]exclude_lines =    pragma: no cover    def __repr__    if __name__ == .__main__.:ignore_errors = True


这个配置文件可以帮你排除一些不需要测试的代码,让覆盖率报告更加精准。


Coverage 还有一堆高级功能,比如分支覆盖、并行模式等等。等你玩熟悉了基本操作,可以去看看官方文档,里面有更多花里胡哨的玩法。


好了,今天的 Coverage 入门就到这里。记住,写测试不是为了凑数字,而是为了让你的代码更靠谱。覆盖率高固然好,但更重要的是写出有意义的测试用例。去试试吧,相信你会爱上这个工具的!




乐意说事
阅他人故事,品百味人生,坚持日更,加油!
 最新文章