Запуск тестового покрытия внутри контейнера Docker для тестовых примеров Pyspark

#docker #pyspark #test-coverage

Вопрос:

У меня есть проект pyspark с несколькими файлами модульных тестов

 test case files
test_testOne.py
test_testcaseTwo.py
 

Эти тестовые классы выполняются внутри контейнера docker. Во время выполнения тестов внутри контейнера я также хочу получать отчеты о тестовом покрытии. Поэтому я добавил следующую строку в свой requirements.txt файл

 coverage==6.0.2
 

И внутри контейнера docker я запускаю следующую команду

 python -m coverage discover -s path/to/test/files
 

Я получаю следующий вывод

 /opt/conda/bin/python: No module named coverage
 

Кто-нибудь может помочь мне успешно выполнить мои тесты с тестовым покрытием. Пожалуйста, обратите внимание, что все тестовые примеры успешно выполняются внутри контейнера с помощью следующей команды. Но он не генерирует тестовое покрытие

 python -m unittest discover -s path/to/test/files
 

Ответ №1:

Если вы используете coverage команду:

 python -m unittest discover -s path/to/test/files
 

Становится:

 coverage run -m unittest discover -s path/to/test/files
 

Как указано в документации: быстрый запуск

Поскольку вы используете docker, хорошим вариантом будет создать том внутри контейнера docker, а по завершении тестов coverage сгенерировать отчет и сохранить его на вашем хост-компьютере. Таким образом, вы можете автоматизировать весь процесс и сохранять отчеты.

  • Создайте том с помощью -v флага при запуске контейнера docker (дополнительная информация: Использование томов)
  • После тестов запустите coverage html -d /path/to/your/volume/inside/docker (посмотрите в документации для получения дополнительной опции: coverage html)