Python-Code-Coverage und Multiprocessing

8

Ich verwende Overalls in Kombination mit coverage.py , um die Python-Code-Abdeckung meiner Testskripts zu verfolgen. Ich benutze die folgenden Befehle:

%Vor%

Dies funktioniert ziemlich gut mit Ausnahme von Multiprocessing . Code, der von Worker-Pools oder untergeordneten Prozessen ausgeführt wird, wird nicht verfolgt.

Gibt es eine Möglichkeit, auch Multiprocessing-Code zu verfolgen? Irgendeine bestimmte Option, die ich vermisse? Vielleicht fügen Sie Wrapper in die Multiprocessing-Bibliothek ein, um die Coverage jedes Mal zu starten, wenn ein neuer Prozess erzeugt wird?

BEARBEITEN :

Ich (und jonrsharpe, auch :-) haben eine gefunden Affe-Patch für Multiprocessing .

Allerdings funktioniert das bei mir nicht, mein Tracis-CI Build wird fast gleich nach dem Start getötet. Ich habe das Problem auf meinem lokalen Computer überprüft und anscheinend fügt das Hinzufügen des Patches zu Multiprocessing mein Gedächtnis zu. Tests, die viel weniger als 1 GB Speicher benötigen, benötigen mehr als 16 GB mit diesem Fix.

EDIT2 :

Der Affe-Patch funktioniert nach einer kleinen Änderung: Entfernen Die config_file Analyse ( config_file=os.environ['COVERAGE_PROCESS_START'] ) hat den Trick gemacht. Dies löste das Problem des aufgeblähten Speichers. Dementsprechend wird die entsprechende Zeile einfach:

%Vor%     
SmCaterpillar 03.02.2015, 11:12
quelle

2 Antworten

6

Coverage 4.0 enthält die Befehlszeilenoption --concurrency=multiprocessing , um damit umzugehen. Sie müssen danach coverage combine verwenden.

    
David Ketcheson 26.04.2016, 11:29
quelle
0

Ich habe einige Zeit damit verbracht, sicherzustellen, dass die Coverage mit multiprocessing.Pool funktioniert, aber es hat nie funktioniert.

Ich habe endlich eine Lösung gefunden, die es funktioniert - wäre glücklich, wenn jemand mich anweist, wenn ich etwas falsch mache.

Ссылка

    
Andrey Cizov 28.12.2016 16:04
quelle