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类:class创建、数据方法属性及访问控制详解
Jul 25 Python
Python中操作mysql的pymysql模块详解
Sep 13 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
Nov 02 Python
Python处理CSV与List的转换方法
Apr 19 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
python3实现名片管理系统
Nov 29 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
Feb 13 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
Python 实现文件读写、坐标寻址、查找替换功能
Sep 11 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
tensorflow 变长序列存储实例
Jan 20 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 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获取指定月份第一天和最后一天的方法
2015/07/18 PHP
最准确的php截取字符串长度函数
2015/10/29 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
自己的js工具 Event封装
2009/08/21 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
一个JavaScript函数把URL参数解析成Json对象
2014/09/24 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
2014/12/16 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
javascript jquery对form元素的常见操作详解
2016/06/12 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
深入理解Vue 组件之间传值
2018/08/16 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
写一个Vue loading 插件
2020/11/09 Javascript
JS算法教程之字符串去重与字符串反转
2020/12/15 Javascript
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python实现简单多线程任务队列
2016/02/27 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
Python之web模板应用
2017/12/26 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
SQL语言面试题
2013/08/27 面试题
MYSQL支持事务吗
2013/08/09 面试题
优秀员工自荐信范文
2013/10/05 职场文书
行政专员工作职责
2013/12/22 职场文书
2014全国两会学习心得体会1000字
2014/03/10 职场文书
村委会换届选举方案
2014/05/03 职场文书
党员作风建设自查报告
2014/10/23 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书