У меня есть многопроцессорный веб-сервер с процессами, которые никогда не заканчиваются, я бы хотел проверить покрытие кода на весь проект в живой среде (не только из тестов).
Проблема заключается в том, что, поскольку процессы никогда не заканчиваются, у меня нет хорошего места для установки крючков cov.start() cov.stop() cov.save()
.
Поэтому я думал о нерестах потока, который в бесконечном цикле будет сохранять и комбинировать данные покрытия, а затем спать некоторое время, однако этот подход не работает, отчет о покрытии кажется пустым, за исключением линии сна.
Я был бы рад получить любые идеи о том, как получить покрытие моего кода, или любые советы о том, почему моя идея не работает. Вот фрагмент моего кода:
import coverage
cov = coverage.Coverage()
import time
import threading
import os
class CoverageThread(threading.Thread):
_kill_now = False
_sleep_time = 2
@classmethod
def exit_gracefully(cls):
cls._kill_now = True
def sleep_some_time(self):
time.sleep(CoverageThread._sleep_time)
def run(self):
while True:
cov.start()
self.sleep_some_time()
cov.stop()
if os.path.exists('.coverage'):
cov.combine()
cov.save()
if self._kill_now:
break
cov.stop()
if os.path.exists('.coverage'):
cov.combine()
cov.save()
cov.html_report(directory="coverage_report_data.html")
print "End of the program. I was killed gracefully :)"