使用coverage.py生成代码覆盖率报告的setuptools创建命令的最佳方法是什么?
答案 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,允许您在不使用子进程调用的情况下完成此操作。