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 dict remove数组删除(del,pop)
Mar 24 Python
Python实现的数据结构与算法之双端队列详解
Apr 22 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
对python sklearn one-hot编码详解
Jul 10 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
Django 用户认证组件使用详解
Jul 23 Python
关于django 1.10 CSRF验证失败的解决方法
Aug 31 Python
Python SSL证书验证问题解决方案
Jan 13 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
Python可视化神器pyecharts绘制地理图表
Jul 07 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
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
php class中public,private,protected的区别以及实例分析
2013/06/18 PHP
[原创]php正则删除html代码中class样式属性的方法
2017/05/24 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
使用JavaScript动态设置样式实现代码(2)
2013/01/25 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
2013/11/26 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
2014/07/06 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
js+html5实现可在手机上玩的拼图游戏
2015/07/17 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
jQuery中Datatables增加跳转到指定页功能
2017/02/08 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
细说webpack源码之compile流程-入口函数run
2017/12/26 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
微信运维交互机器人的示例代码
2018/11/12 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
python3 pandas 读取MySQL数据和插入的实例
2018/04/20 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
利用CSS3制作简单的3d半透明立方体图片展示
2017/03/25 HTML / CSS
会议活动邀请函
2014/01/27 职场文书
党员岗位承诺书
2014/03/25 职场文书
2014年施工员工作总结
2014/11/18 职场文书
医德医风自我评价2015
2015/03/03 职场文书
《平移和旋转》教学反思
2016/02/19 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis