Tôi sử dụng coveralls kết hợp với coverage.py để theo dõi phạm vi mã python của các tập lệnh thử nghiệm của tôi. Tôi sử dụng các lệnh sau:Bảo hiểm mã Python và đa xử lý
coverage run --parallel-mode --source=mysource --omit=*/stuff/idont/need.py ./mysource/tests/run_all_tests.py
coverage combine
coveralls --verbose
Điều này hoạt động khá độc đáo với ngoại lệ multiprocessing. Mã được thực hiện bởi các nhóm công nhân hoặc các tiến trình con không được theo dõi.
Có khả năng theo dõi mã đa xử lý không? Bất kỳ tùy chọn cụ thể nào tôi bị thiếu? Có thể thêm trình bao bọc vào thư viện đa xử lý để bắt đầu bảo hiểm mỗi khi một tiến trình mới được sinh ra?
EDIT:
tôi (và jonrsharpe, cũng :-) tìm thấy một monkey-patch for multiprocessing.
Tuy nhiên, điều này không hiệu quả đối với tôi, việc xây dựng Tracis-CI của tôi bị giết gần như ngay sau khi bắt đầu. Tôi đã kiểm tra vấn đề trên máy cục bộ của mình và dường như thêm bản vá vào bộ nhớ đa xử lý cho bộ nhớ của tôi. Các thử nghiệm mất ít hơn 1GB bộ nhớ cần nhiều hơn 16GB với bản sửa lỗi này.
EDIT2:
Con khỉ-vá làm việc sau khi một sự thay đổi nhỏ: Xóa các config_file
phân tích cú pháp (config_file=os.environ['COVERAGE_PROCESS_START']
) đã làm các trick. Điều này giải quyết vấn đề của bộ nhớ cồng kềnh. Theo đó, dòng tương ứng đơn giản trở thành:
cov = coverage(data_suffix=True)
Bạn không kiểm tra mã cho các quy trình con đó trực tiếp phải không? – jonrsharpe
Vâng, vâng, hầu hết là tôi làm. Nhưng có một số phần chỉ hữu ích và chỉ được thực hiện trong trường hợp đa xử lý được sử dụng (như gói cơ sở dữ liệu truy cập với khóa hoặc hàng đợi đa xử lý để thực thi lưu trữ dữ liệu nối tiếp). Và tôi biết rằng mã này đang hoạt động do các thử nghiệm thành công. Nó sẽ chỉ là tốt đẹp nếu điều này cũng sẽ hiển thị trên yếm :-) – SmCaterpillar
Xem https://bitbucket.org/ned/coveragepy/issue/117/enable-coverage-measurement-of-code-run-by, qua http : //nedbatchelder.com/code/coverage/trouble.html – jonrsharpe