2017-03-10 14 views
5

Używam następujących poprzez Makefiel:pokrycie równolegle do Django testuje

NPROCS:=$(shell /usr/bin/nproc) 

.PHONY: coverage-app 
coverage-app: 
    coverage erase --rcfile=./.coveragerc-app 
    coverage run --parallel-mode --rcfile=./.coveragerc-app manage.py test -v 3 --parallel=$(NPROCS) app 
    coverage combine --rcfile=./.coveragerc-app 
    coverage report -m --rcfile=./.coveragerc-app 

Jeżeli ustawić NPROCS 1, uzyskać oczekiwane 100% pokrycia test wszystkich plików wewnątrz app. Jeśli jednak NPROCS jest większa niż 1, w moim raporcie pojawia się wiele brakujących linii.

Co robię źle?

My .coveragerc-app się następująco:

# Control coverage.py 
[run] 
branch = True 
omit = */__init__* 
     */test*.py 
     */migrations/* 
     */urls.py 
     app/admin.py 
     app/apps.py 
source = app 
parallel = true 

[report] 
precision = 1 
show_missing = True 
ignore_errors = True 
exclude_lines = 
    pragma: no cover 
    raise NotImplementedError 
    except ImportError 
    def __repr__ 
    if self\.logger\.debug 
    if __name__ == .__main__.: 
+1

Ja myślę, że nie masz podprocesów właściwie mierzone. Możesz sprawdzić pliki danych, które są produkowane podczas biegu. Ile dostałeś i jakie linie pokrywają? Możesz zobaczyć podsumowanie danych za pomocą: "COVERAGE_FILE = dane debugowania obszaru danych" –

+0

@NedBatchelder Mam tylko jeden plik '.coverage.serval.TLD.12116.528573', który zawiera tylko część danych. Końcowy raport jest rzeczywiście poprawny i pasuje do danych w tym jednym pliku. Zakładam, że powinny istnieć pliki X (= NPROCS). Zastanawiam się, czy jest to plugin django, który nie działa poprawnie? ... – Sardathrion

Odpowiedz

7

pominięcia kilka kroków od Measuring sub-processes:

1) zmienić bieg polecenie pokrycia do tego:

COVERAGE_PROCESS_START=./.coveragerc-app coverage run --parallel-mode --concurrency=multiprocessing --rcfile=./.coveragerc-app manage.py test -v 3 --parallel=$(NPROCS) app 

2) Utwórz plik o nazwie sitecustomize.py w swoim lokalnym f starszy z

import coverage 
coverage.process_startup() 

3) Dodaj opcję współbieżności w pliku rc:

concurrency=multiprocessing 
+0

Szczęśliwy, aby to przeczytać! Usunąłem fakt, że może być opcjonalny – feydaykyn

+0

To oszczędza mi dużo czasu ... Wielkie dzięki. – Sardathrion