gpt4 book ai didi

python - 通过 pytest 使用多进程处理时如何测量覆盖率?

转载 作者:行者123 更新时间:2023-12-04 16:45:25 27 4
gpt4 key购买 nike

我通过 pytest 运行我的单元测试.对于覆盖范围,我使用 coverage.py .

在我的一个单元测试中,我通过 multirpocessing 运行了一个函数并且覆盖率不反射(reflect)通过 multirpocessing 运行的功能,但断言有效。这就是我试图解决的问题。

测试看起来像这样:

import time
import multiprocessing

def test_a_while_loop():
# Start through multiprocessing in order to have a timeout.
p = multiprocessing.Process(
target=foo
name="Foo",
)
try:
p.start()
# my timeout
time.sleep(10)
p.terminate()
finally:
# Cleanup.
p.join()

# Asserts below
...

要运行测试并查看覆盖率,我在 Ubuntu 中使用以下命令:
coverage run --concurrency=multiprocessing -m pytest my_project/
coverage combine
coverage report

在 docs 中给出了如何做的指导,以便覆盖率正确地解释多处理( here )。所以我设置了一个 .coveragerc像这样:
[run]
concurrency = multiprocessing

[report]
show_missing = true

还有 sitecustomize.py看起来像这样:
import coverage
coverage.process_startup()

尽管如此,上述功能运行通过 multiprocessing仍不计入覆盖范围。

我做错了什么或错过了什么?

附言 This似乎是一个类似的问题,但它并没有再次解决我的问题:(

最佳答案

我通过执行以下两个操作来“修复”这个问题:

  • coverage.py 切换覆盖包至 pytest-cov .
  • process 上方添加此代码如通过他们的 docs 所描述的.

  • 代码:
    try:
    from pytest_cov.embed import cleanup_on_sigterm
    except ImportError:
    pass
    else:
    cleanup_on_sigterm()

    然后我简单地运行 pytest --cov=my_proj my_proj/

    关于python - 通过 pytest 使用多进程处理时如何测量覆盖率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61143858/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com