coverage.py是否正确显示Python绑定的测试覆盖率?
我对我的功能测试的测试覆盖率很感兴趣。这些测试是用来测试通过SWIG编译的模块代码的。
我尝试运行了:
coverage run --source=/path/to/module/__init__py allMyTests.py
还有
coverage run --source=/path/to/module/__init__py partOfTests.py
在每种情况下,它保存的信息都是一样的,尽管测试的数量和它们使用的模块代码量差别很大。看起来并没有达到我预期的效果,可能是我做错了什么。
我能否找到Python绑定代码的测试覆盖率呢?
这不一定非要用coverage.py这个工具。
1 个回答
2
覆盖率是用来判断你的代码有多少部分被测试过的。所以,即使有两个测试文件的代码量和测试数量完全不同,只要它们测试的是你API的相同部分,最终得到的覆盖率数据可能还是一样的。
更新:
听起来你想测试你在Python扩展DLL中的C/C++代码的覆盖率。因为这个扩展是用C/C++写的,所以覆盖率模块无法深入到里面去。这个模块能告诉你的是,你的测试中是否调用了扩展里的每一个Python函数。
不过,任何能够处理动态链接的DLL并且可以按需加载的C/C++代码覆盖率工具,都能满足你的需求。最终,你的脚本是由python.exe运行的,它会加载你的DLL。如果这个DLL是用Visual C++ 2010写的,并且你能找到一个与这个编译器兼容的C/C++代码覆盖率工具,那么你可以告诉Visual Studio去连接到Python进程,并为你感兴趣的DLL提供覆盖率统计(我自己没有做过,但我想应该有办法告诉覆盖率工具,哪个部分的exe——在这个情况下是你的DLL——是你关注的)。
所以我建议你多花点时间去找一个适合你C++编译器的C/C++代码覆盖率工具。在Windows上,这个SO帖子 Visual Studio 2010中的本地C++ exe/dll的代码覆盖率 提到有这样的工具。