Как получить данные о покрытии из приложения django при запуске в пулеметном
Как получить покрытие кода из кода представления проекта Django (и код, вызываемый кодом просмотра)?
coverage gunicorn <params> не показывает никаких ударов линий.
Ответ 1
coverage gunicorn <params> не работает, потому что gunicorn создает рабочие процессы, а модуль coverage не может работать через forks (в основном, создание новых процессов). Вы можете использовать API покрытия, хотя, например, в модуле python, который содержит ваше приложение WSGI:
Затем запустите gunicorn -w 1 wsgi_with_coverage:application <other params>.
Проблема в том, что функции atexit не вызываются, если вы убиваете процесс пушки, например, с помощью CTRL + C. Но они вызываются на SIGHUP, поэтому, если вы делаете kill -HUP $(cat <gunicorn_pidfile_here>), данные покрытия должны быть сохранены (по умолчанию ".coverage" в текущем каталоге).
Возможная оговорка заключается в том, что это не сработает с несколькими рабочими-оружейниками, потому что все они будут перезаписывать файл ".coverage". Если вам абсолютно нужно больше одного рабочего, вы можете написать ".coverage-%d" % os.getpid() (укажите имя файла с помощью параметра data_file конструктору coverage) и используйте метод combine(), чтобы объединить отдельные измерения.
Это должно работать и на других серверах WSGI, в зависимости от того, разрешают ли они очищать рабочие процессы с помощью метода atexit.