Я запускаю свои юнит-тесты через pytest
. Для покрытия я использую coverage.py
.
. В одном из моих модульных тестов я запускаю функцию через multirpocessing
, и покрытие не отражает функции, выполняемые через 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
В документах даются указания о том, что нужно сделать, чтобы покрытие правильно учитывало многопроцессорность ( здесь ). Итак, я настроил .coveragerc
следующим образом:
[run]
concurrency = multiprocessing
[report]
show_missing = true
, а также sitecustomize.py
выглядит так:
import coverage
coverage.process_startup()
Несмотря на это, вышеуказанная функция работает через multiprocessing
все еще не учитывается в покрытии.
Что я делаю неправильно или отсутствует?
PS Этот кажется похожим вопросом, однако он не решает мою проблему снова: (