我正在创建一个简单的Django站点,该站点使用matplotlib绘制指定数据集并显示结果图。我已经保存了正确图表的静态副本,我想将其与页面上显示的图像进行比较。
home.html的
<img id="id_graph_image" src="/graphs/selected_graph.png">
图表/ urls.py
urlpatterns = patterns('',
# other patterns...
url(r'^graphs/selected_graph.png$', 'graphs.views.show_selected_graph'),
)
图表/ views.py
def show_selected_graph(request):
# matplotlib code...
canvas = FigureCanvasAgg(figure)
response = HttpResponse(content_type='image/png')
canvas.print_png(response)
return response
图表/ tests.py
def test_selected_graph_shows_the_right_graphs(self):
# request and response...
graph_on_page = Image.open(StringIO(response.content)).
expected_graph = Image.open('file://../graphs/static/scenario_1_statistic_1.png')
# TODO: compare graphs
我想添加Selenium测试或单元测试以确认图表视图返回给定数据集的正确图像。我尝试将两个图像与PIL和直方图的RMS差异进行比较,但任何两个matplotlib图形图像都具有相似的直方图。
&#34;百分比差异&#34;简单?我应该以一种非常不同的方式测试吗?
感谢所有人的帮助,谢谢!
答案 0 :(得分:1)
如果您在进行图像比较时已经死定了,可以尝试使用opencv(参见例如http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_imgproc/py_template_matching/py_template_matching.html)。然而,这对我来说感觉很好(虽然如果你使用硒,你的测试可能会慢一点,但你可能已经比我在单元测试中拍摄的速度慢了)。另一种方法可能是将您传递给drawGraph部分的数据转换为数组并将其与预期值进行比较(因为看起来您的图形包含大约100 x,y对,这比数据要小得多) 100 * 100像素),但我不太清楚你的意图是测试matploblib代码生成正确的数据,还是将数据正确转换为图形。