django测试并行覆盖

Sar*_*ica 8 django coverage.py

我通过以下方式运行以下内容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
Run Code Online (Sandbox Code Playgroud)

如果我设置NPROCS为1,我将获得所有文件的预期100%测试覆盖率app.但是,如果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__.:
Run Code Online (Sandbox Code Playgroud)

fey*_*kyn 12

您从测量子流程中错过了几个步骤:

1)将coverage run命令更改为:

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

2)在本地文件夹中创建一个名为sitecustomize.py的文件

import coverage
coverage.process_startup()
Run Code Online (Sandbox Code Playgroud)

3)在rcfile中添加并发选项:

concurrency=multiprocessing
Run Code Online (Sandbox Code Playgroud)


Ant*_*ony 8

阅读了上面答案中链接的覆盖文档,也许它已经更新了,因为只需执行以下操作似乎适用于我们的 Django 项目:

coverage run --concurrency=multiprocessing manage.py test app --parallel=3
coverage combine
coverage report
Run Code Online (Sandbox Code Playgroud)