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 相关文章推荐
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
Python3.6简单操作Mysql数据库
Sep 12 Python
python中的decorator的作用详解
Jul 26 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
python 设置输出图像的像素大小方法
Jul 04 Python
Python-copy()与deepcopy()区别详解
Jul 12 Python
Python搭建HTTP服务过程图解
Dec 14 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
Python中的sys.stdout.write实现打印刷新功能
Feb 21 Python
Python3中的f-Strings增强版字符串格式化方法
Mar 04 Python
Opencv求取连通区域重心实例
Jun 04 Python
python如何控制进程或者线程的个数
Oct 16 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 array_walk() 数组函数
2011/07/12 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
2017/01/13 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
JavaScript设置body高度为浏览器高度的方法
2015/02/09 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
Angular 2使用路由自定义弹出组件toast操作示例
2019/05/10 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
Django中处理出错页面的方法
2015/07/15 Python
Python有序字典简单实现方法示例
2017/09/28 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python 用正则表达式筛选文本信息的实例
2018/06/05 Python
Python使用pymysql从MySQL数据库中读出数据的方法
2018/07/25 Python
python自动化之Ansible的安装教程
2019/06/13 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
python3 kubernetes api的使用示例
2021/01/12 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
比利时买床:Beter Bed
2017/12/06 全球购物
护士自我鉴定总结
2014/03/24 职场文书
新闻人物通讯稿
2014/10/09 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
党课主持词大全
2015/06/30 职场文书
《认识钟表》教学反思
2016/02/16 职场文书