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去掉字符串中空格的方法
Mar 11 Python
Python程序员鲜为人知但你应该知道的17个问题
Jun 04 Python
python进程管理工具supervisor的安装与使用教程
Sep 05 Python
使用Python的turtle模块画图的方法
Nov 15 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
Django url,从一个页面调到另个页面的方法
Aug 21 Python
wxPython色环电阻计算器
Nov 18 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
Python类super()及私有属性原理解析
Jun 15 Python
深入浅析python 中的self和cls的区别
Jun 20 Python
教你用Python爬取英雄联盟皮肤原画
Jun 13 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 ob_start()控制浏览器cache、生成html实现代码
2010/02/16 PHP
PHP性能优化工具篇Benchmark类调试执行时间
2011/12/06 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
php递归实现无限分类的方法
2015/07/28 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
Open and Print a Word Document
2007/06/15 Javascript
javascript数组去掉重复
2011/05/12 Javascript
jQuery实现的省市县三级联动菜单效果完整实例
2016/08/01 Javascript
js style.display=block显示布局错乱问题的解决方法
2016/09/21 Javascript
JavaScript 判断一个对象{}是否为空对象的简单方法
2016/10/09 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
mpvue跳转页面及注意事项
2018/08/03 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
跟老齐学Python之list和str比较
2014/09/20 Python
Python常用模块介绍
2014/11/21 Python
python实现数独算法实例
2015/06/09 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
Python快速排序算法实例分析
2017/11/29 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
flask入门之表单的实现
2018/07/18 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
德国圣伯纳德草药屋:Kräuterhaus Sanct Bernhard(有中文站)
2018/08/05 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
中秋晚会活动方案
2014/08/31 职场文书
小学教师岗位职责
2015/04/02 职场文书
董事长秘书工作总结
2015/08/14 职场文书