.. post:: 2015-11-29 :tags: nose, nosetests, image, comparison, matplotlib, tests :category: tests :author: Tim Cera :location: Gainesville, FL :language: en Testing Images -------------- TLDR; I use matplotlib.testing.compare.compare_images instead of matplotlib.testing.decorators.image_comparison Searching for image testing led to serveral pages using the "image_comparison" decorator in matplotlib.testing.decorators. Tried to use it, but since a decorator hides the name of the decorated function, nose didn't see that the name began with "test\_" and should be part of the test suite. Tried to create a decorator that would use "image_comparison" in the background, but wrap the "test_*"" function to keep it's name correctly visible to nose. I couldn't figure it out. After looking at the "image_comparison" decorator code found that the heavy lifting is done by a "compare_images" function. Was able to use that directly with a much easier to understand test.:: from matplotlib.testing.compare import compare_images from pandas.util.testing import TestCase from tstoolbox import tstoolbox class TestPlot(TestCase): def setUp(self): # Data to plot and temporary filename for plot image self.df = tstoolbox.read('tests/data_sine.csv') fp, self.fname = tempfile.mkstemp(suffix='.png') def test_sine(self): # Plot using function to test plt = tstoolbox.plot(input_ts=self.df, ofilename=None) plt.savefig(self.fname) # Compare against base version... # different versions of matplotlib have slightly different fonts # set the tolerance pretty high to account for this problem. results = compare_images('tests/baseline_images/test_plot/sine.png', self.fname, 10) if results is None: # the images compare favorably return True base, ext = os.path.splitext(self.fname) os.remove('%s-%s%s' % (base, 'failed-diff', ext)) print(results) assert False