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接收Gmail新邮件并发送到gtalk的方法
Mar 10 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
简单谈谈Python的pycurl模块
Apr 07 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
将pandas.dataframe的数据写入到文件中的方法
Dec 07 Python
Django 大文件下载实现过程解析
Aug 01 Python
Python图片的横坐标汉字实例
Dec 04 Python
推荐值得学习的12款python-web开发框架
Aug 10 Python
基于python爬取梨视频实现过程解析
Nov 09 Python
sublime3之内网安装python插件Anaconda的流程
Nov 10 Python
Django web自定义通用权限控制实现方法
Nov 24 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/11/16 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php实现读取内存顺序号
2015/03/29 PHP
php实现的mongodb操作类
2015/05/28 PHP
PHP微信网页授权的配置文件操作分析
2019/05/29 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
vue cli构建的项目中请求代理与项目打包问题
2018/02/26 Javascript
在Vue项目中引入腾讯验证码服务的教程
2018/04/03 Javascript
详解webpack运行Babel教程
2018/06/13 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
Python使用reportlab将目录下所有的文本文件打印成pdf的方法
2015/05/20 Python
Python中列表和元组的使用方法和区别详解
2020/12/30 Python
python 系统调用的实例详解
2017/07/11 Python
python通过opencv实现批量剪切图片
2017/11/13 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
使用python实现多维数据降维操作
2020/02/24 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
viagogo英国票务平台:演唱会、体育比赛、戏剧门票
2017/03/24 全球购物
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
自荐信怎么写呢?
2013/12/09 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
2015年毕业实习工作总结
2014/12/12 职场文书