ORIGINALLY POSTED ON IXA.IO
Our code base includes a large suite of functional tests using Lettuce, Selenium and PhantomJS. When a test fails, we have a hook that captures the current screen contents and writes it to a file. In an ideal CI system these would be collected as a failure artifact (along with the stack trace, etc.) but that’s not currently possible withGitlab CI (hint hint Gitlab team, investigate Subunit for streaming test output).
Instead what we do on Gitlab is output our images as base64 encoded text:
if $SUCCESS; then echo "Success" else echo "Failed ------------------------------------" for i in Test*.html; do echo $i; cat "$i"; done for i in Test*.png; do echo $i; base64 "$i"; echo "EOF"; done fi
$SUCCESS[/bash]
Of course now you have test output full of meaningless base64’ed data. Enter Greasemonkey.
// ==UserScript== // @name View CI Images // @namespace io.ixa.ci // @description View CI Images // @version 1 // @match https://gitlabci/projects/*/builds/* // ==/UserScript== (function ($) { var text = $('#build-trace').html(); text = text.replace(/(Test_.+\.png)\n([A-Za-z0-9\n\/\+=]+)\nEOF\n/g, '<h2>$1</h2><img src="data:image/png;base64,$2" ' + 'style="display:block; max-width:800px; width: auto; height: auto;" ' + '/>'); $('#build-trace').html(text); })(jQuery);
Web browsers (handily) can already display base64’ed images. This little user script will match builds on the CI server you specify and then replace those huge chunks of base64 with the image they represent.
This technique could easily be replicated on Travis CI by updating the jQuery selector.