Gro*_*sha 35 python unit-testing coverage.py python-3.x
我刚刚开始使用Coverage.py模块,所以决定进行一个简单的测试来检查它是如何工作的.
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
Run Code Online (Sandbox Code Playgroud)
test.py
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
Run Code Online (Sandbox Code Playgroud)
如你所见,我的所有代码都包含测试,py.test表示所有代码都通过了.我希望Coverage.py显示100%的覆盖率.好吧,不.
好吧,Coverage.py可能看不到test.py文件,所以我将测试函数复制到sample.py文件并再次运行Coverage:

然后我添加了这段代码:
if __name__ == "__main__":
print(sum(2, 4))
print(sum_only_positive(2, 4))
print(sum_only_positive(-1, 3))
Run Code Online (Sandbox Code Playgroud)
并删除所有测试功能.之后,Coverage.py显示100%:
为什么会这样?Coverage.py不应该显示代码测试覆盖率,而不仅仅是执行覆盖率?我已经阅读了Coverage.py 的官方常见问题解答,但无法找到解决方案.
由于许多SO用户都熟悉代码测试和代码覆盖,我希望你能告诉我,我在哪里弄错了.
我在这里只想到一个:Coverage.py可能只是看不执行哪行代码,所以我应该为这些行编写测试.但是有些行已经执行但未被测试覆盖,因此Coverage.py将在这里失败.
fip*_*ips 19
Coverage查找.coverage文件以读取并为您生成该报告.Py.test本身并不能创建一个.你需要py.test插件来覆盖:
pip install pytest-cov
Run Code Online (Sandbox Code Playgroud)
如果你已经拥有它,那么你可以像这样同时运行它们:
py.test test.py --cov=sample.py
Run Code Online (Sandbox Code Playgroud)
这意味着运行测试模块test.py和记录/显示覆盖率报告sample.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=
Run Code Online (Sandbox Code Playgroud)
这意味着运行测试模块test.py和记录(仅)覆盖sample.py- 不显示报告.
现在,您可以单独运行coverage命令以获取完整的报告:
coverage report -m
Run Code Online (Sandbox Code Playgroud)
上面的命令只显示基于先前测试运行的累积.coverage数据文件的格式化覆盖率报告.-m表示缺少显示行,即未被测试覆盖的行:
Name Stmts Miss Cover Missing
-----------------------------------------
sample.py 6 0 100%
Run Code Online (Sandbox Code Playgroud)
Coverage支持更多交换机,--include并--omit使用路径模式包含/排除文件.有关更多信息,请查看他们的文档:https://coverage.readthedocs.io/en/coverage-4.5.1/cmd.html#reporting
Ned*_*der 11
通过实验解析起来有点困难,而且您没有包含每个实验中使用的命令行.但是:如果你运行测试:
python -m py.test test.py
Run Code Online (Sandbox Code Playgroud)
然后你可以在coverage.py下运行它们:
coverage run -m py.test test.py
Run Code Online (Sandbox Code Playgroud)
以下命令对我有用:
coverage run --source=sample -m pytest test.py
coverage report -m
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27979 次 |
| 最近记录: |