Python通过Pillow实现图片对比


Posted in Python onApril 29, 2020

 在编写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”,如果不相同则返回结果值越大。

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

关于Pillow库的详细文档:

http://pillow.readthedocs.org/en/latest/index.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python调用系统底层API播放wav文件的方法
Aug 11 Python
python实现画圆功能
Jan 25 Python
Python操作MySQL数据库的三种方法总结
Jan 30 Python
Python实现打砖块小游戏代码实例
May 18 Python
Python3 实现串口两进程同时读写
Jun 12 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
pandas计数 value_counts()的使用
Jun 24 Python
django多文件上传,form提交,多对多外键保存的实例
Aug 06 Python
Python实现平行坐标图的绘制(plotly)方式
Nov 22 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
python3 中时间戳、时间、日期的转换和加减操作
Jul 14 Python
Python unittest单元测试框架实现参数化
Apr 29 #Python
Python ORM框架Peewee用法详解
Apr 29 #Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 #Python
Pytorch十九种损失函数的使用详解
Apr 29 #Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 #Python
Python爬虫工具requests-html使用解析
Apr 29 #Python
Python基于Hypothesis测试库生成测试数据
Apr 29 #Python
You might like
修改了一个很不错的php验证码(支持中文)
2007/02/14 PHP
PHP初学者最感迷茫的问题小结
2010/03/27 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
php面向对象中的魔术方法中文说明
2014/03/04 PHP
php中将一段数据存到一个txt文件中并显示其内容
2014/08/15 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
2015/04/15 PHP
PHP抽象类与接口的区别实例详解
2019/05/09 PHP
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
IE和Firefox之间在JavaScript语法上的差异
2016/04/22 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
使用JS和canvas实现gif动图的停止和播放代码
2017/09/01 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
微信小程序实现指定显示行数多余文字去掉用省略号代替
2018/07/25 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
Nuxt v-bind绑定img src不显示的解决
2019/12/05 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
python UNIX_TIMESTAMP时间处理方法分析
2016/04/18 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
Python之Class&Object用法详解
2019/12/25 Python
call在Python中改进数列的实例讲解
2020/12/09 Python
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
白色公司:The White Company
2017/10/11 全球购物
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
快餐公司创业计划书
2014/04/29 职场文书
安全生产月宣传标语
2014/10/06 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
庆元旦主持词
2015/07/06 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS