Тестирование графиков на основе 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. Я объяснил больше здесь.