我想使用一些用Python编写的(单元)测试来获取Cython模块的覆盖率信息。我现在所掌握的是测试本身,即通过运行py.test
执行测试的哪几行。虽然看起来不错,但我更希望覆盖.pyx
文件,即我的测试涵盖了C / Python接口(interface)的哪些行。
我已经找到了一些信息,但无法使其在我的项目中运行:
http://blog.behnel.de/posts/coverage-analysis-for-cython-modules.html
https://medium.com/@dfdeshom/better-test-coverage-workflow-for-cython-modules-631615eb197a
How to use coverage analysis with Cython
这是有问题的代码: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
在
.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
文件丢失了。您还可以查看related issue on github。我不会做进一步的调查,因为它回答了您的问题,我想您将可以在这里找到所有遗失的东西。关于python - 使用py.test和coverage.py覆盖Cython模块,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48505458/