2017-03-10 22 views
5

मैं एक Makefiel के माध्यम से निम्नलिखित चला रहा हूँ:कवरेज परीक्षण

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 

अगर मैं 1 के लिए NPROCS निर्धारित करते हैं, मैं app के भीतर सभी फाइलों की उम्मीद 100% परीक्षण कवरेज मिलता है। हालांकि, अगर NPROCS 1 से अधिक है, तो मुझे अपनी रिपोर्ट में बहुत सारी लापता लाइनें मिलती हैं।

मैं क्या गलत कर रहा हूं?

मेरे .coveragerc-app इस प्रकार है:

# 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

मुझे लगता है कि आपको subprocesses ठीक से मापा जा रहा नहीं है। आप रन के दौरान उत्पादित डेटा फ़ाइलों की जांच कर सकते हैं। आप कितने प्राप्त करते हैं, और वे किन लाइनों को कवर कर रहे हैं? आप डेटा का सारांश देख सकते हैं: "COVERAGE_FILE = the_data_file कवरेज डीबग डेटा" –

+0

@NedBatchelder मुझे केवल एक फ़ाइल '.coverage.serval.TLD.12116.528573' प्राप्त होती है जिसमें केवल डेटा का हिस्सा होता है। अंतिम रिपोर्ट वास्तव में सही है और उस फ़ाइल में डेटा से मेल खाती है। मुझे लगता है कि एक्स (= एनपीआरसीएस) फाइलें होनी चाहिए। मुझे आश्चर्य है कि यह django प्लगइन है जो सही काम नहीं कर रहा है? ... – Sardathrion

उत्तर

7

आप कुछ ही कदम याद आती है, Measuring sub-processes से:

1) यह एक करने के लिए कवरेज रन आदेश बदलने के लिए:

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

2) अपने स्थानीय एफ में साइटcustomize.py नाम की एक फ़ाइल बनाएं पुराने

import coverage 
coverage.process_startup() 

3) के साथ अपने rcfile में जोड़े संगामिति विकल्प:

concurrency=multiprocessing 
+0

इसे पढ़ने में खुशी है! मैंने इस तथ्य को हटा दिया है कि यह वैकल्पिक हो सकता है – feydaykyn

+0

यह मुझे बहुत समय बचा रहा है ... वास्तव में बहुत धन्यवाद। – Sardathrion

संबंधित मुद्दे