Was ist der beste Weg, um einen Befehl für setsetools zu erstellen, der einen Code-Coverage-Bericht mit coverage.py generiert?Befehl setuptools für coverage.py
Antwort
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.
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.
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. –