Тестирование графиков на основе matplotlib в Travis CI
У меня есть пакет с модулем, который помогает пользователям создавать определенные графики с использованием matplotlib. Когда я вызываю эти функции в своих модульных тестах внутри Travis, я получаю следующую ошибку:
RuntimeError: Invalid DISPLAY variable
Как это исправить?
После создания графика мои функции обычно вызывают pyplot.show()
, который открывает окно, которое необходимо закрыть. Когда я называю эти функции в своих модульных тестах внутри Travis, они всегда навешиваются.
Как проверить, что эти графики создаются с помощью Travis CI?
Ответы
Ответ 1
Чтобы установить переменную DISPLAY внутри Travis, вам необходимо эмулировать отображение внутри своей виртуальной машины. Они учат, как это сделать, используя xvfb
, добавив следующее к before_script
файла yout .travis.yml
:
before_script: # configure a headless display to test plot generation
- "export DISPLAY=:99.0"
- "sh -e /etc/init.d/xvfb start"
- sleep 3 # give xvfb some time to start
Чтобы Тревис не повесился на участках, просто не звоните pyplot.show()
. Если вы тестируете слишком много графиков, обязательно вызывайте pyplot.close()
или он будет жаловаться на наличие слишком большого количества открытых изображений.
Ответ 2
Вы можете решить эту проблему без явной настройки отображения с помощью "agg" backend в matplotlib. Это необходимо в любом случае, по моему опыту, чтобы обеспечить согласованность сгенерированных изображений. Просто убедитесь, что вы
matplotlib.use('agg')
прежде чем импортировать pyplot или pylab. Я объяснил больше здесь.