上篇文章:http://www.04007.cn/article/963.html 讲到使用pytest进行代码自动化测试,测试必然会用到测试用例,那么究竟需要写多少个测试用例呢?有没有个什么标准,这就涉及到一个概念:测试代码覆盖率,测试代码覆盖率是指测试的代码覆盖程度的一种度量方式,是描述程序测试中源代码被测试的比例和程度。代码测试覆盖中需要了解的一些指标名字:
1、语句覆盖:被测试代码中的每一个可执行语句是否被执行到,语句覆盖是为“最弱的覆盖”,对一些控制结构的代码他不能真正表示是否完全覆盖到。
2、判定覆盖:度量程序中每一个判定的分支是否都被测试到。
3、条件覆盖:度量判定中的每个子表达式结构true和false是否被测试到。
4、路径覆盖:度量是否方法的每一个分支都被执行到了,也就是要求所有可能的分支都执行一遍。路径覆盖也被称作是最强的覆盖。本文地址:http://www.04007.cn/article/965.html,未经许可,不得转载.
接下来我们使用pytest-cov在项目中来实现度量代码测试覆盖率。
首先需要安装pytest自动化测试功能,在上一篇文章中我这已经具备了环境了,另外就是需要安装pytest-cov来计算覆盖率,我这里的python版本是V3.8.2,安装的的pytest-cov 2.10.1版本,安装及使用如下:本文地址:http://www.04007.cn/article/965.html,未经许可,不得转载.
$ pip install pytest-cov #安装成功 Successfully installed coverage-5.3.1 pytest-cov-2.10.1 #进行自动化测试及覆盖率度量 root@test:~# pytest --cov collected 7 items test_abc.py ..... [100%] #下面就是覆盖率数据 Name Stmts Miss Cover --------------------------------------------------------- api/__init__.py 61 6 90% api/acts/__init__.py 0 0 100% test_abc.py 13 1 92% ... --------------------------------------------------------- TOTAL 2373 1152 91%本文地址:http://www.04007.cn/article/965.html,未经许可,不得转载.
和pytest不同的只是运行用例的时候需要加上 --cov 参数,覆盖率报告中几个项指的是代码行数和测试的行数,完整意义如下:
Stmts(statements) - means the total lines of code you have in a specific file
Miss(missing) - total number of lines that are not covered by unittest.
Cover - percentage of all line of code that are covered by unittest.
Missing - lines of codes that are not covered.本文地址:http://www.04007.cn/article/965.html,未经许可,不得转载.
pytest-cov测试报告有一些选项,比如指定目录,比如指定报告形式为html本文地址:http://www.04007.cn/article/965.html,未经许可,不得转载.
> pytest -h coverage reporting with distributed testing support: --cov=[SOURCE] 限制测试的代码文件目录. --cov-report=TYPE 测试报告展示方式: term, term-missing, annotate, html, xml (multi-allowed). term, term- missing may be followed by ":skip-covered". annotate, html and xml may be followed by ":DEST" where DEST specifies the output location. Use --cov-report= to not generate any output. --cov-config=PATH Config file for coverage. Default: .coveragerc --no-cov-on-fail Do not report coverage if test run fails. Default: False --no-cov Disable coverage report completely (useful for debuggers). Default: False --cov-fail-under=MIN Fail if the total coverage is less than MIN. --cov-append Do not delete coverage but append to current. Default: False --cov-branch Enable branch coverage. --cov-context=CONTEXT Dynamic contexts to use. "test" for now.本文地址:http://www.04007.cn/article/965.html,未经许可,不得转载.
#运行如下命令即可将测试报告保存成html,在项目目录生成一个covhtml文件夹。
$ pytest --cov --cov-report=html
进入html文件夹打开index.html,其查看形式比终端友好,并且可以点击所有的文件查看每个代码文件的具体哪行未覆盖到。本文地址:http://www.04007.cn/article/965.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/965.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |