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
Comments
comments powered by Disqus