mat*_*ten 18 python code-coverage cython 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
这是有问题的代码:https://github.com/SCIP-Interfaces/PySCIPOpt/tree/coverage
目前的答案有两个部分:
让我们从pytest配置开始.目前在您的coverage分支上有一个.travis.yml文件,其中包含以下行:py.test --cov tests,这告诉pytest-cov向您显示tests目录的覆盖范围,这是您不想要的.您可以py.test tests --cov改为运行或更改您的运行,而setup.cfg不是通过tests.
然后,您将拥有以下setup.cfg文件:
[tool:pytest]
testpaths =
tests
Run Code Online (Sandbox Code Playgroud)
在.coverage您需要的文件中:
[run]
plugins = Cython.Coverage
source = src/pyscipopt
omit =
tests
*__init__.py
Run Code Online (Sandbox Code Playgroud)
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%
Run Code Online (Sandbox Code Playgroud)
这看起来像你想要的正确输出,但我确实看到scip.pyx文件丢失.您还可以在github上查看相关问题.我没有进一步调查,因为它回答了你的问题,我想你可以从这里找到任何遗漏的东西.