Pillow实现图片对比

 

  在编写Web自动化测试用例的时候,如何写断言使新手不解,严格意义上来讲,没有断言的自动化脚本不能叫测试用例。就像功能测试一样,当测试人员做了一些操作之后必然会判断实际结果是否等于预期结果,只不过,这个过程由测试人员的眼睛完成。而自动化测试脚本必然要通过一此信息来断定用例是否成功。

 

这其中常用的三种信息分别是:

title :页面不同或显示不同时往往title也会有所变化。

url :与title类似,当页面发生变化时,跟着url也会改变。

text:相比前者应用更广泛,因为通过它可以获取页面上的任意标识性文本,用于“证明”用例执行是成功的。例如,登陆之后人用户名,查询的结果等。

 

但是,在有些情况下,无法获取这些信息来证明用例是成功的怎么办?当然,下策是不写断言,脚本运行没有报错来证明用例执行成功,这当然是无奈之举。除此之外还可以选择断言两张图片,在用例执行正确的情况下对当前页面进行截图,在用例执行的过程中再次进行截图。通过对两张图片进行比较,从而判断用例是否运行成功。

 

Pillow下载:https://pypi.python.org/pypi/Pillow/3.0.0

根据自己的操作系统以及python版本选择下载。

安装:

> python3 -m pip install Pillow-3.0.0-cp35-none-win_amd64.whl

Processing c:\selenium\pillow-3.0.0-cp35-none-win_amd64.whl

Installing collected packages: Pillow

Successfully installed Pillow-3.0.0

  注意,因为我本机同时安装了Python2.7和Python3.5,所以,这里特意指定安装在Python3的下面。

 

from PIL import Image
import math
import operator
from functools import reduce

def image_contrast(img1, img2):

    image1 = Image.open(img1)
    image2 = Image.open(img2)

    h1 = image1.histogram()
    h2 = image2.histogram()

    result = math.sqrt(reduce(operator.add,  list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) )
    return result

if __name__ == '__main__':
    img1 = "./img1.jpg"  # 指定图片路径
    img2 = "./img2.jpg"
    result = image_contrast(img1,img2)
    print(result)

 

  如果两张图片完全相等,则返回结果为浮点类型“0.0”,如果不相同则返回结果值越大。

  这样就可以在自动化测试用例中调用该方法来断言执行结果。

=====================

时间: 2024-10-29 19:30:46

Pillow实现图片对比的相关文章

Java实现图片对比功能_java

之前用按键精灵写过一些游戏辅助,里面有个函数叫FindPic,就上在屏幕范围查找给定的一张图片,返回查找到的坐标位置. 现在,Java来实现这个函数类似的功能. 算法描述: 屏幕截图,得到图A,(查找的目标图片为图B): 遍历图A的像素点,根据图B的尺寸,得到图B四个角映射到图A上的四个点: 得到的四个点与图B的四个角像素点的值比较.如果四个点一样,执行步骤4:否则,回到步骤2继续: 进一步对比,将映射范围内的全部点与图B全部的点比较.如果全部一样,则说明图片已找到:否则,回到步骤2继续: 这里

Python基于pillow判断图片完整性的方法_python

本文实例讲述了Python基于pillow判断图片完整性的方法.分享给大家供大家参考,具体如下: 1.安装第三方库. pip install pillow 2.函数示例. #encoding=utf-8 #author: walker #date: 2016-07-26 #summary: 判断图片的有效性 import io from PIL import Image #判断文件是否为有效(完整)的图片 #输入参数为文件路径 def IsValidImage(pathfile): bValid

Beyond Compare如何快速进行图片对比

  Beyond Compare是我们工作中的好帮手,提供功能强大的文件图片比较功能,它可以执行多种类型的比较任务,接下来小编就和大家一起分享下, Beyond Compare有哪些优点可以快速找出图片差异,实用技巧get起来! 优点一:界面简单,调整大小.旋转.反射或裁剪图片. 打开Beyond Compare软件,选择图片比较会话,打开操作界面.单击"打开文件"按钮,选需要比较的图片.如果对比的原图需要修改,单击工具栏"视图"按钮,在展开的菜单可进行图片修改操作

移植MonkeyRunner的图片对比功能实现-Appium篇

如果你的目标测试app有很多imageview组成的话,这个时候monkeyrunner的截图比较功能就体现出来了.而其他几个流行的框架如Robotium,UIAutomator以及Appium都提供了截图,但少了两个功能: 获取子图 图片比较 既然Google开发的MonkeyRunner能盛行这么久,且它体功能的结果验证功能只有截屏比较,那么必然有它的道理,有它存在的价值,所以我们很有必要在需要的情况下把它相应的功能给移植到其他框架上面上来. 经过本人前面文章描述的几个框架的源码的研究(ro

jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法_jquery

本文实例讲述了jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法.分享给大家供大家参考.具体如下: 左右拖拽切换对比图片效果,运行效果后,图片中间有个拖动条,拖动左右滑动,可看到图片不一样的效果,女模特的脸变嫩了,呵呵,其实是用了两张背景图片实现的,这就需要jquery.beforeafter.js插件了,拖动时候的小图标不见了,路径可以在jquery.beforeafter.js中设置,不多说了. 运行效果截图如下: 在线演示地址如下: http://d

图片像素对比OpenCV实现,实现人工分割跟算法分割图像结果的对比

图片对比,计算不同像素个数,已经比率.实现人工分割跟算法分割图像结果的对比,但是只能用灰度图像作为输入   // imageMaskComparison.cpp : 定义控制台应用程序的入口点. // // imageMaskComparison.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.h

图片原理与优化 如何在网站设计中发挥更好的效果

中介交易 SEO诊断 淘宝客 云主机 技术大厅 前言:该文收集了前辈们的一些关于图片优化的技巧,在此收拢到一起,对于各个方法的优化原理做了一些研究,希望能给大家对于图片优化这一块起到抛砖引玉的作用. 提到图片,我们不得不从位图开始说起,位图图像(bitmap),也称为点阵图像或绘制图像,是由称作像素(图片元素)的单个点组成的.这些点可以进行不同的排列和染色以构成一副图片.当放大位图时,可以看见赖以构成整个图像的无数单个方块. 常见的格式中JPG.PNG.GIF亦属于位图,所以它们的数据结构大致相

CSS图片优化的一些相关建议

  CSS图片优化就是尽量压缩图片的大小,加快页面加载速度,这对于大型网站是很有用的.不要小看它,它可以大大提高网页加载速度.通常大家用到的方法就是css sprites. CSS Sprites(图片整合技术) 的目的就是通过整合图片,减少对服务器的请求数量,从而加快页面加载速度.想必很多人已经在用这个技术,我给大家简单介绍一下,总结一下我使用css sprite时的一些技巧. CSS Sprites实现方法: 首先将小图片整合到一张大的图片上,然后根据具体图标在大图上的位置,给背景定位. C

网页设计理论:对比和等同

  等同和对比,联系与分别,归类和不归类等都是能将元素中相同或不同的元素加以区别的方式.基于它们所承载的信息,我们希望等同的元素能发生某种联系,用以表明它们在某一方面的相似性.我们同样也希望不同的元素加以区分,以显示它们分属不同的类别. 等同和对比是通过元素之间所呈现的关系表现出来的,如果两个元素有着某种联系,可以确定这两个元素必定有相同的特性.当然,两个不同元素也必定看上去不同. 基础特性 你是如何表达元素间的等同和对比性的?是的,从它们的基础特性中表现出来. 那么,什么是元素的基础特性呢?基