2012-03-28 2 views

ответ

0

Вот одно простое решение, которое использует вызовы подпроцесса для исполняемого файла coverage. Я предполагаю, что у вас есть пакет Python с именем mycoolpackage, который содержит код, для которого вы хотите измерить охват тестирования, и у вас есть пакет 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, который позволит вам сделать это без использования подпроцесс вызова.

+0

Добавление команды покрытия действительно будет полезно только в том случае, если вы используете внутренний testrunner для setuptools. С этим вы можете просто запустить команду покрытия. –

2

То, что вы ищете, является Extending Distutils capabilities through extensions, и оно покрыто документами, с которыми я связан. Основная идея состоит в том, чтобы дать команду и точку entr5y для выполнения, а точка входа должна следовать некоторой терминологии, основанной на компонентах setuptools. Я думаю, вам повезло здесь, потому что кто-то уже успешно (Adding Test Code Coverage Analysis to a Python Project's setup Command) интегрировал его для своего проекта, и вы должны уметь его использовать для своих целей.

Смежные вопросы