cover.py的setuptools命令

时间:2012-03-28 02:26:49

标签: python setuptools coverage.py

使用coverage.py生成代码覆盖率报告的setuptools创建命令的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您正在寻找的是Extending Distutils capabilities through extensions,并且我已经链接的文档中介绍了它。基本思想是给出命令和entr5y执行点,入口点应遵循一些setuptools基于组件的术语。我想,你在这里很幸运,因为有人已经成功地尝试(Adding Test Code Coverage Analysis to a Python Project's setup Command)将它集成到他的项目中,你应该能够为你的目的采用它。

答案 1 :(得分:1)

这是一个简单的解决方案,它使用对coverage可执行文件的子进程调用。我假设您有一个名为mycoolpackage的Python包,其中包含您要测量测试覆盖率的代码,并且您有一个mytests包,它公开了一个返回测试套件的suite函数

首先,创建一个run-tests.py文件:

import os.path, sys
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

import unittest
from mytests import suite

unittest.main(defaultTest='suite')    

然后在setup.py中创建以下命令并将其添加到cmdclass函数的setup()参数中。

class run_coverage(Command):
    description = "Generate a test coverage report."
    user_options = []    
    def initialize_options(self): pass
    def finalize_options(self): pass 
    def run(self):
        import subprocess
        subprocess.call(['coverage', 'run', '--source=mycoolpackage', 'run-tests.py'])
        subprocess.call(['coverage', 'html'])

请注意,coverage.py确实有一个API,允许您在不使用子进程调用的情况下完成此操作。