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构造icmp echo请求和实现网络探测器功能代码分享
Jan 10 Python
python编程线性回归代码示例
Dec 07 Python
python如何实现int函数的方法示例
Feb 19 Python
分享vim python缩进等一些配置
Jul 02 Python
python3实现钉钉消息推送的方法示例
Mar 14 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
Python如何给函数库增加日志功能
Aug 04 Python
python,Java,JavaScript实现indexOf
Sep 09 Python
让你相见恨晚的十个Python骚操作
Nov 18 Python
使用Python提取文本中含有特定字符串的方法示例
Dec 09 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中操作MySQL数据库的一些要注意的问题
2006/10/09 PHP
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
php使用sql数据库 获取字段问题介绍
2013/08/12 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
jquery 图片轮换效果
2010/07/29 Javascript
漂亮的jquery提示效果(仿腾讯弹出层)
2013/02/05 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
jQuery过滤选择器详解
2015/01/13 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
javascript求日期差的方法
2016/03/02 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
vue项目中使用百度地图的方法
2018/06/08 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
详解关于Vue单元测试的几个坑
2020/04/26 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
[02:00]最后,我终于出了辉耀
2018/03/27 DOTA
django表单实现下拉框的示例讲解
2018/05/29 Python
解决Mac下首次安装pycharm无project interpreter的问题
2018/10/29 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
opencv调整图像亮度对比度的示例代码
2019/09/27 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
iPad和Surface Pro蓝牙键盘:Brydge
2018/11/10 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
介绍下Java中==和equals的区别
2013/09/01 面试题
考博自荐信
2013/10/25 职场文书
刘胡兰的英雄事迹材料
2014/02/11 职场文书
身边的榜样活动方案
2014/08/20 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
工资证明范本
2015/06/12 职场文书
小学新课改心得体会
2016/01/22 职场文书