繁体   English   中英

使用py.test和coverage.py覆盖Cython模块

[英]Coverage of Cython module using py.test and coverage.py

我想使用Python编写的一些(单元)测试来获取Cython模块的覆盖信息。 我现在所拥有的是测试本身的覆盖范围,即通过运行py.test来执行测试的哪一行。 虽然很好看,但我更愿意覆盖.pyx文件,即我的测试涵盖了C / Python接口的哪些行。

我已经找到了一些信息但是无法让它为我的项目运行:

http://blog.behnel.de/posts/coverage-analysis-for-cython-modules.html

https://medium.com/@dfdeshom/better-test-coverage-workflow-for-cython-modules-631615eb197a

如何使用Cython进行覆盖率分析

这是有问题的代码: https//github.com/SCIP-Interfaces/PySCIPOpt/tree/coverage

目前的答案有两个部分:

  • pytest配置
  • coverage.py配置

让我们从pytest配置开始。 目前在您的coverage分支上有.travis.yml文件,其中包含以下行: py.test --cov tests ,这告诉pytest-cov向您显示您不想要的tests目录的覆盖范围。 您可以改为运行py.test tests --cov或更改setup.cfg而不是通过tests

然后,您将拥有setup.cfg文件:

[tool:pytest]
testpaths = 
    tests

.coverage文件中,您需要:

[run]
plugins = Cython.Coverage
source = src/pyscipopt
omit =
    tests
    *__init__.py

单独指定paths已过时,我已将其删除。 这样, coverage.py知道它应该只检查src/pyscipopt目录的覆盖范围。

在这些更改后,我得到的输出是:

---------- coverage: platform darwin, python 3.6.4-final-0 -----------
Name                          Stmts   Miss Branch BrPart  Cover
---------------------------------------------------------------
src/pyscipopt/Multidict.py       17     17     10      0     0%
src/pyscipopt/conshdlr.pxi      301    129      0      0    57%
src/pyscipopt/expr.pxi          168     57      0      0    66%
src/pyscipopt/heuristic.pxi      44     18      0      0    59%
src/pyscipopt/lp.pxi            235    177      0      0    25%
src/pyscipopt/pricer.pxi         52     24      0      0    54%
---------------------------------------------------------------
TOTAL                           817    422     10      0    48%

这看起来像你想要的正确输出,但我确实看到缺少scip.pyx文件。 您还可以在github上查看相关问题 我没有进一步调查,因为它回答了你的问题,我想你可以从这里找到任何遗漏的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM