Pillow实现图片对比

简介:

 

  在编写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.7Python3.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”,如果不相同则返回结果值越大。

  这样就可以在自动化测试用例中调用该方法来断言执行结果。

=====================

目录
相关文章
|
缓存 NoSQL 数据库
探秘Redis读写策略:CacheAside、读写穿透、异步写入
本文介绍了 Redis 的三种高可用性读写模式:CacheAside、Read/Write Through 和 Write Behind Caching。CacheAside 简单易用,但可能引发数据不一致;Read/Write Through 保证数据一致性,但性能可能受限于数据库;Write Behind Caching 提高写入性能,但有数据丢失风险。开发者应根据业务需求选择合适模式。
2075 2
探秘Redis读写策略:CacheAside、读写穿透、异步写入
|
监控 负载均衡 安全
Elasticsearch集群配置优化
Elasticsearch集群配置优化
273 1
|
SQL 存储 缓存
SQL数据库查询详解
数据库是现代信息社会的基石,它们存储和管理着大量的数据。而SQL(StructuredQueryLanguage)作为一种强大的数据库查询语言,广泛应用于各种数据库系统中。本文将详细介绍SQL数据库查询的基本概念、语法、常用操作以及优化策略。一、SQL数据库查询概述SQL是一种用于管理关系数据库的标
788 3
|
缓存 监控 算法
提升安卓应用性能的实用策略
【5月更文挑战第28天】 在竞争激烈的应用市场中,一款应用的性能往往决定了用户的初体验和留存率。特别是对于安卓平台,由于设备多样性和应用生态环境的复杂性,优化应用性能显得尤为重要。本文将深入探讨影响安卓应用性能的关键因素,并提出一系列实用的性能优化策略。从内存管理到多线程处理,从布局优化到代码执行效率,我们将全面剖析如何打造一个响应迅速且流畅的安卓应用。
|
SQL 监控 Oracle
实时计算 Flink版产品使用合集之如何指定表的隐藏列为主键
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
第10章 经典智能算法——10.2 遗传算法的MATLAB实现(1)
第10章 经典智能算法——10.2 遗传算法的MATLAB实现(1)
G2Plot Tooltip 自定义展示内容(itemTpl 的进阶使用)
G2Plot Tooltip 自定义展示内容(itemTpl 的进阶使用)
717 0
|
存储 算法 搜索推荐
【数据结构】什么是拓扑排序—关于图的拓扑排序
【数据结构】什么是拓扑排序—关于图的拓扑排序
1042 0
【数据结构】什么是拓扑排序—关于图的拓扑排序
|
JavaScript
在Visual Studio Code中有很多红色波浪线怎么解决?
在Visual Studio Code中有很多红色波浪线怎么解决?
3240 0