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网站验证码识别
Jan 25 Python
Python正则表达式经典入门教程
May 22 Python
python reduce 函数使用详解
Dec 05 Python
Python实现控制台中的进度条功能代码
Dec 22 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
tensorflow创建变量以及根据名称查找变量
Mar 10 Python
python如何生成各种随机分布图
Aug 27 Python
梅尔倒谱系数(MFCC)实现
Jun 19 Python
python 使用while循环输出*组成的菱形实例
Apr 12 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
Sep 16 Python
利用python 下载bilibili视频
Nov 13 Python
Python超详细分步解析随机漫步
Mar 17 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
PHP6 先修班 JSON实例代码
2008/08/23 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
PHP按指定键值对二维数组进行排序的方法
2015/12/22 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
tp5.1 框架数据库常见操作详解【添加、删除、更新、查询】
2020/05/26 PHP
用js模拟struts2的多action调用示例
2014/05/19 Javascript
整理AngularJS框架使用过程当中的一些性能优化要点
2016/03/05 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
Bootstrap table 定制提示语的加载过程
2017/02/20 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
40行代码把Vue3的响应式集成进React做状态管理
2020/05/20 Javascript
[38:39]KG vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
python中的yield使用方法
2014/02/11 Python
Python程序设计入门(2)变量类型简介
2014/06/16 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
python爬虫增加访问量的方法
2019/08/22 Python
python——全排列数的生成方式
2020/02/26 Python
西海岸男士和男童服装:Johnnie-O
2018/03/15 全球购物
大学自主招生自荐信
2013/12/16 职场文书
财务工作检讨书
2014/10/29 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python
为Centos安装指定版本的Docker
2022/04/01 Servers
MySQL新手入门进阶语句汇总
2022/09/23 MySQL