2017-03-10 22 views
5

Tôi đang chạy sau thông qua một Makefiel:bảo hiểm song song cho django kiểm tra

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 

Nếu tôi đặt NPROCS tới 1, tôi nhận được dự kiến ​​100% bảo hiểm thử nghiệm của tất cả các file trong vòng app. Tuy nhiên, nếu NPROCS lớn hơn 1, tôi nhận được nhiều dòng bị thiếu trong báo cáo của mình.

Tôi đang làm gì sai?

My .coveragerc-app được như sau:

# 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

tôi sẽ đoán rằng bạn không có trình con được đo đúng cách. Bạn có thể kiểm tra các tệp dữ liệu được tạo trong khi chạy. Có bao nhiêu bạn nhận được, và những gì họ đang bao gồm dòng? Bạn có thể xem tóm tắt dữ liệu với: "COVERAGE_FILE = the_data_file dữ liệu gỡ lỗi vùng phủ sóng" –

+0

@NedBatchelder Tôi chỉ nhận được một tệp '.coverage.serval.TLD.12116.528573' chỉ chứa một phần dữ liệu. Báo cáo cuối cùng thực sự chính xác và khớp với dữ liệu trong một tệp đó. Tôi giả định rằng cần có các tệp X (= NPROCS). Tôi tự hỏi nếu nó là plugin django không hoạt động đúng không?… – Sardathrion

Trả lời

7

Bạn bỏ lỡ một vài bước, từ Measuring sub-processes:

1) thay đổi bảo hiểm chạy lệnh bên dưới:

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

2) Tạo tệp có tên là sitecustomize.py trong địa phương của bạn cũ với

import coverage 
coverage.process_startup() 

3) Thêm tùy chọn đồng thời trong rcfile của bạn:

concurrency=multiprocessing 
+0

Rất vui khi đọc điều đó! Tôi đã loại bỏ một thực tế rằng nó có thể là tùy chọn – feydaykyn

+0

Điều này tiết kiệm cho tôi rất nhiều thời gian… Cảm ơn rất nhiều. – Sardathrion

Các vấn đề liên quan