2012-03-28 4 views

Antwort

0

Hier ist eine einfache Lösung, die Subprozess Aufrufe an die coverage ausführbare Datei verwendet. Ich nehme an, Sie haben ein Python-Paket namens mycoolpackage, das den Code enthält, für den Sie die Testabdeckung messen möchten, und Sie haben ein mytests-Paket, das eine suite-Funktion verfügbar macht, die die Testsuite zurückgibt.

Erstellen Sie zunächst eine run-tests.py Datei:

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')  

dann in setup.py den folgenden Befehl erstellen und auf das cmdclass Argument der setup() Funktion hinzuzufügen.

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']) 

Beachten Sie, dass coverage.py eine API hat, die Sie diesen Aufruf ohne Verwendung eines Teilprozess zu erreichen erlauben würde.

+0

Das Hinzufügen eines Coverage-Befehls wäre nur dann sinnvoll, wenn Sie den internen Tester von setuptools verwenden. Mit diesem können Sie auch einfach den Coverage-Befehl ausführen. –

2

Was Sie suchen, ist Extending Distutils capabilities through extensions und es ist in den Dokumenten abgedeckt, die ich verknüpft habe. Die Grundidee besteht darin, den Befehl und den Startpunkt für die Ausführung zu geben, und der Einstiegspunkt sollte einigen von setuptools folgen. Ich denke, Sie sind hier Glück, weil jemand bereits erfolgreich versucht hat (Adding Test Code Coverage Analysis to a Python Project's setup Command), es für sein Projekt zu integrieren, und Sie sollten es für Ihre Zwecke adoptieren können.