Pycharm/IntelliJ показывает 0% покрытия для pytest, хотя покрытие было сгенерировано
У меня есть проект Python и tests
задача, настроенная для запуска pytest
из рабочего каталога проекта.
дела Run 'tests' with coverage
от Run
Меню успешно запускает тесты, и результаты консоли показывают, что охват был измерен - например, 53% покрытия для mws.py
,
Автоматически применяемое покрытие (как справа) составляет 0% для всех файлов, я не знаю почему. Я использую IntelliJ 2017.2.2 EAP.
NB: здесь есть связанный пятилетний вопрос, но решение с самым высоким рейтингом там не применимо. В этом случае в консоли результатов отсутствует сообщение об ошибке.
2 ответа
Я думаю, что проблема заключается в том, что вы используете pytest-cov
Таким образом, Pycharm не может проанализировать результат, который показан в тексте, как 53%
создано pytest-cov
;
Так изменяет вариант в pytest.ini
в addopts = -s -v
когда вы хотите использовать встроенные инструменты покрытия Pycharm.
У меня была аналогичная проблема, но принятое решение не решило ее.
я имел pytest
автоматически запускать покрытие в файле конфигурации. В PyCharm я добавил конфигурацию запуска, чтобы запускать все мои тесты сpytest
. Казалось, что это сработало, и я увидел, что все тесты запущены, и получил их результаты для отображения в окне запуска PyCharm.
Но вскоре я заметил две проблемы:
- Когда я выбрал "Выполнить с покрытием", я получил сообщение об ошибке "Результаты покрытия не найдены", и все файлы показали 0% покрытия.
- Точки останова в тестах не были достигнуты при запуске теста в режиме отладки.
Обе проблемы исчезли, когда я добавил --no-cov
к "Дополнительным аргументам", переданным в pytest
(эта опция находится в конфигурации запуска).
Так что, похоже, решение было сказать pytest
чтобы не запускать покрытие при запуске из PyCharm. Теперь работают как параметр "Запуск с покрытием", так и точки останова в тестах.
Посмотрите на мой ответ на другой вопрос о той же проблеме: /questions/35464073/pycharm-django-pokryitie-s-nulevyim-kodom/35464092#35464092
В основном, если вы используете символические ссылки - отображение покрытия не будет работать.