2016-02-15 14 views
10

Ho un pacchetto che ha un modulo che aiuta gli utenti a generare grafici specifici usando matplotlib. Quando chiamo queste funzioni in mio test di unità all'interno di Travis, ottengo il seguente errore:Test dei grafici basati su matplotlib in Travis CI

RuntimeError: Invalid DISPLAY variable 

Come posso risolvere il problema?

Dopo aver generato il grafico, le mie funzioni di solito chiamano pyplot.show(), che apre una finestra che deve essere chiusa. Quando chiamo queste funzioni nei miei test unitari all'interno di Travis, vengono bloccate per sempre.

Come verificare che questi grafici vengano generati utilizzando Travis CI?

risposta

10

Per impostare la variabile DISPLAY in Travis, è necessario emulare un display dalla propria VM. They teach how to do it utilizzando xvfb aggiungendo quanto segue al before_script di yout file di .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 

Affinché Travis non ottenere appeso nelle piazzole, semplicemente non chiamare pyplot.show(). Se stai testando troppe trame, assicurati di chiamare pyplot.close() o si lamenterà di avere troppe immagini aperte.

+0

Questo funziona! Per tua informazione, se usi anche [tox] (https://pypi.python.org/pypi/tox), non dimenticare di aggiungere 'DISPLAY' a' passenv' – shapiromatron

0

È possibile risolvere questo problema senza impostare esplicitamente la visualizzazione utilizzando il backend "agg" in matplotlib. Ciò è comunque necessario, secondo la mia esperienza, al fine di garantire la coerenza delle immagini generate. Assicurati di avere

matplotlib.use('agg') 

prima di importare pyplot o pylab. Ho spiegato di più here.