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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
Django与JS交互的示例代码
Aug 23 Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 Python
python通过Windows下远程控制Linux系统
Jun 20 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
python中用ggplot绘制画图实例讲解
Jan 26 Python
python 模块导入问题汇总
Feb 01 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之第四天
2006/10/09 PHP
简单介绍下 PHP5 中引入的 MYSQLI的用途
2007/03/19 PHP
PHP中Date获取时间不正确怎么办
2008/06/05 PHP
php与paypal整合方法
2010/11/28 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
Js 正则表达式知识汇总
2014/12/02 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
微信小程序 富文本转文本实例详解
2016/10/24 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
vue自动路由-单页面项目(非build时构建)
2019/04/30 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
微信小程序scroll-view点击项自动居中效果的实现
2020/03/25 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
Python实现自动上京东抢手机
2018/02/06 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
Python for循环与range函数的使用详解
2019/03/23 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
Django中URL的参数传递的实现
2019/08/04 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
python3 requests库文件上传与下载实现详解
2019/08/22 Python
pytorch实现查看当前学习率
2020/06/24 Python
python 实现端口扫描工具
2020/12/18 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
英国屋顶用品和材料超市:Roofing Supplies UK
2019/08/24 全球购物
J2EE中的容器都包括哪些
2013/08/21 面试题
初一科学教学反思
2014/01/27 职场文书
行政文秘岗位职责范本
2014/02/10 职场文书
班级年度安全计划书
2014/05/01 职场文书
2015财务年度工作总结范文
2015/05/04 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python