Sno*_*gus 6 code-coverage cython
我正在尝试使用pytest-cov和coveralls.io对一些Cython代码进行覆盖率分析.我已经建立了启用跟踪的扩展模块,并在以下链接的帮助下运行分析:
http://docs.cython.org/src/tutorial/profiling_tutorial.html
http://blog.behnel.de/posts/coverage-analysis-for-cython-modules.html
但是,我得到了一些我无法解释的结果.似乎代码中的许多def/ cdef/ cpdef行显示为未运行,尽管其中的代码正常.结果甚至不一致,因为有些线条似乎没问题.
示例报告:https://coveralls.io/files/1871744040
我不知道我是否说错了,如果这是一个错误,或者我只是没有正确地解释结果.
在上面的示例中,该get_cost方法看起来没问题,但是__set__上面的属性的方法没有被调用,尽管已经调用了函数中的行.
更新:似乎问题出在Cython类上.如果定义了类def而不是cdef问题消失了.我想还没有完全支持.
如果 Cython 跟踪工具似乎未按预期工作,则应该可以将其用于gcovcython 代码的覆盖率分析。通过这种方式,我们可以验证生成的 C 代码的某一行是否被执行。
用一个简单的main.pyx
import mymod
def main():
mymod.test()
Run Code Online (Sandbox Code Playgroud)
和mymod.pyx
def test():
return 42
Run Code Online (Sandbox Code Playgroud)
进而
cython --embed main.pyx
cython mymod.pyx
gcc -O1 -fPIC -fprofile-arcs -ftest-coverage -Wall -I/usr/include/python2.7 -c -o main.o main.c
gcc main.o -fprofile-arcs -lpython2.7 -lgcov -o main
gcc -O1 -fPIC -fprofile-arcs -ftest-coverage -Wall -I/usr/include/python2.7 -c -o mymod.o mymod.c
gcc -shared mymod.o -fprofile-arcs -lgcov -lpython2.7 -o mymod.so
Run Code Online (Sandbox Code Playgroud)
创建了一个可执行文件。执行./main main.gcda后,为gcov创建了mymod.gcda。
| 归档时间: |
|
| 查看次数: |
1029 次 |
| 最近记录: |