当前位置: 首页 > 知识库问答 >
问题:

如何正确使用Python中的coverage.py?

柳志专
2023-03-14

我刚刚开始使用覆盖率。于是决定做一个简单的测试来检查它是如何工作的。

Sample.py

def sum(num1, num2):
    return num1 + num2


def sum_only_positive(num1, num2):
    if num1 > 0 and num2 > 0:
        return num1 + num2
    else:
        return None

测验派克

from sample import sum, sum_only_positive

def test_sum():
    assert sum(5, 5) == 10

def test_sum_positive_ok():
    assert sum_only_positive(2, 2) == 4

def test_sum_positive_fail():
    assert sum_only_positive(-1, 2) is None

如您所见,我所有的代码都覆盖了测试,py.test说它们都通过了。我希望Coverage.py显示100%的覆盖率。嗯,不。

然后我添加了这段代码:

if __name__ == "__main__":
    print(sum(2, 4))
    print(sum_only_positive(2, 4))
    print(sum_only_positive(-1, 3))

并删除了所有测试功能。在那之后,是保险范围。py显示100%:

为什么会这样?我们不应该买保险。py显示html" target="_blank">代码测试覆盖率,而不仅仅是执行覆盖率?我读过官方的F.A.Q.报道。是的,但找不到解决方案
由于很多用户都熟悉代码测试和代码覆盖率,我希望您能告诉我,我错在哪里了。

我只有一个想法:覆盖率。py可能只是观察哪些代码行没有执行,所以我应该为这些代码行编写测试。但是有些行已经执行了,但是没有测试覆盖,所以覆盖率很低。py将在这里失败。

共有3个答案

尹欣怿
2023-03-14

下面的命令为我工作:

coverage run --source=sample -m pytest test.py

coverage report -m
方献
2023-03-14

通过您的实验进行解析有点困难,而且您还没有包括在每个实验中使用的命令行。但是:如果使用以下选项运行测试:

python -m py.test test.py

然后,您可以在coverage.py下运行它们:

coverage run -m py.test test.py
席乐童
2023-03-14

覆盖范围寻找一个新的目标。覆盖率文件,以便为您读取和生成该报告。皮耶。测试本身不会创建一个。你需要佩里。覆盖率测试插件:

pip install pytest-cov

如果你已经有了它,那么你可以像这样同时运行两个:

py.test test.py --cov=sample.py

这意味着运行测试模块test。py并在样本上记录/显示覆盖率报告。py

如果需要进行多个测试运行并累积其记录的覆盖率,然后显示最终报告,则可以如下方式运行:

py.test test.py --cov=sample.py --cov-report=
py.test test.py --cov=sample2.py --cov-report=
py.test test.py --cov=sample3.py --cov-report=

这意味着运行测试模块test。py并在样本上记录(仅)覆盖率。py-不显示报告。

现在,您可以为完整的报告单独运行覆盖率命令:

coverage report -m

上面的命令仅显示基于累计覆盖率的格式化覆盖率报告。以前测试运行的覆盖率数据文件<代码>-m表示显示遗漏的行,即测试未涵盖的行:

Name        Stmts   Miss  Cover   Missing
-----------------------------------------
sample.py       6      0   100%  

Coverage支持更多开关,如--include--ommit以使用路径模式包括/排除文件。有关更多信息,请查看他们的文档:https://coverage.readthedocs.io/en/6.0.2/source.html?highlight=reporting#reporting

 类似资料:
  • 问题内容: 我在python 2.7中有一些代码,我想将它们全部转换成python 3.3代码。我知道可以使用2to3,但是我不确定如何使用它。 问题答案: 安装以下模块,该模块将2to3命令直接添加到entry_points。 正如在2to3 docs 上所写,要将整个项目从一个目录树转换到另一个目录树,请使用:

  • 本文向大家介绍Array.filter中如何正确使用Async,包括了Array.filter中如何正确使用Async的使用技巧和注意事项,需要的朋友参考一下 1. 如何仅保留满足异步条件的元素 在第一篇文章中,我们介绍了 async / await 如何帮助处理异步事件,但在异步处理集合时却无济于事。在本文中,我们将研究该filter函数,它可能是支持异步函数的最直观的方法。 2. Array.

  • 问题内容: 我只想检索UserAccount类中的某些列,所以我有以下代码: 我得到了空值作为回报。但是,如果我注释掉setProjections,我将获得具有所有属性的用户。在这种情况下,如何正确使用setProjection? 问题答案: 它返回一个Object数组,因此代码应为:

  • 问题内容: 我不知道我在哪里错了:/。当我运行这段代码时,我得到的只是一个空白元素。我似乎无法让insertRule方法执行任何操作(甚至不会产生错误)。我想念什么吗? 问题答案: 这有点令人困惑,但是您的代码确实可以工作,只是您看不到返回的XML树中插入的规则。 为了验证您的代码是否有效,您可以执行两个测试: 运行上面的代码片段,您可以看到CSS规则确实适用。并且属性也在控制台中更改。 当浏览器

  • 问题内容: 如何使用从类路径中查找递归资源? 例如 在“目录”中查找所有资源:想象一下 不幸的是,这只会检索到恰好该“目录”。 所有资源都已命名(递归) 但这返回一个空。 还有一个额外的问题:与有什么不同? 问题答案: 没有办法递归搜索类路径。您需要知道资源的完整路径名才能以这种方式检索它。该资源可能位于文件系统中的目录中,也可能位于jar文件中,因此它不像执行“类路径”的目录列表那样简单。您将需

  • 问题内容: 我最近开始使用ScriptManager。我有一个通过JavaScript填充的ASP.NET DropDownList控件。但是,我正在使用事件验证。因此,如果我不使用下拉菜单中的“ RegisterForEventValidation”调用,则会遇到以下错误。我怎么知道在第二个参数中设置什么值(我有“值”)?我正在通过JavaScript填充下拉列表,因此我不知道后面的代码中包含哪