利用Python开发图像识别测试框架(一)
图像识别是一个非常高深的技术领域,牵涉到计算机视觉,人工智能,各种数学模型和算法等,是一个跨多个领域的组合学科。但是,本书存在的价值并非要为大家传授这些高深莫测的内容,而是要帮助大家既能够更好的理解自动化测试技术的实现原理,又能够学以致用,在关键时刻,利用原生代码帮助我们实现更强大的自动化。
严格意义上来说,图像识别是一个非常高深的技术领域,牵涉到计算机视觉,人工智能,各种数学模型和算法等,是一个跨多个领域的组合学科。但是,本书存在的价值并非要为大家传授这些高深莫测的内容,而是要帮助大家既能够更好的理解自动化测试技术的实现原理,又能够学以致用,在关键时刻,利用原生代码帮助我们实现更强大的自动化。
另外一方面,我们看到了SikuliX在自动化测试领域的价值,当我们无法通过一些特征和属性来精确定位到我们需要操作的界面元素时,SikuliX便能够提供给我们一种根本上的自动化测试解决方案,因为它不需要关注界面是什么类型的,在哪个操作系统上运行,是一种通用的解决方案。但是我们也发现,利用Python来调用SikuliX是比较别扭的一件事情,因为SikuliX目前并没有提供专门的Python接口,我们只能使用JPype进行跨语言调用。不单调用不方便,代码也不符合Python的风格,所以本节内容,我们将带领大家一起来基于图像识别的基本原理和算法,利用原生的Python代码来实现一个类似于SikuliX功能的自动化测试框架。
图像识别的基本思路
无论何种图像识别技术,其核心本质就是对图像轮廓的描述,变形后的容错,像素信息的匹配处理等。本章内容则主要研究如果在一个大的界面中,查找一个匹配该界面中的某个小区域的特定元素,并定位到该元素上从而实行相对应的操作,进而达到测试的目的。所以在利用图像识别原理进行自动化测试开发的过程中,以下三个概念需要我们先行理解:
1.模板匹配
事实上,我们利用图像识别技术来进行自动化测试的过程,其实跟我们对一个系统进行手工测试的过程几乎是一致的。大都会经历如下步骤:
1) 通过人眼观察当前界面,找到需要操作的那个元素的位置。
2) 将鼠标移动到该位置上,进行相应的鼠标或键盘操作。
3) 通过对界面作出的改变进行判断,看看是否跟期望结果一致。
整个这个过程中,其实核心就是三个步骤。而对于图像识别的自动化测试来说,找到想找的那个元素所在的位置是最关键的一步,而这一步同样也可以应用于第三步的断言上。整个这个过程中我们称之为模板匹配,简单理解就是预先对我们需要操作的元素进行截图(这张小图就叫模板),然后在实际运行过程中,再针对当前屏幕或特定区域截图(大图),然后在该大图中寻找到有没有一个区域是跟我们截取的模板图一致的地方,有,就表明找到了,进而获取该小图所在的位置坐标即可。
2.滑动比对
所谓滑动比对,是指将一张小图在大图区域范围内,按照像素点的顺序,一个点一个点地在大图上移动,并一一对比小图的像素点的颜色值(RGBA:即Red, Green, Blue三原色和Alpha通道,即透明度,每个颜色的聚会范围在0~255之间)与大图的颜色值是否一致。如果发现移动到某个区域后,双方每一个像素点的值都一致,那么可以认为匹配成功,此时,将该小图在大图中的位置获取到,便可以进行后续操作。整个过程如下图所示。
3.匹配度:
匹配度,也可以称为相似度(Similarity),主要用于解决图像匹配过程中的容错问题。由于我们利用图像识别技术来解决的是基于GUI的自动化测试,那么这个过程中就难免出现界面由于风格变化,颜色变化而引起的色彩的变化,较容易出现虽然是同一个模板,但是匹配却不成功的情况。比如针对同一个网页,我们利用Chrome找开该网页或者利用Firefox打开这个网页,我们看到的整体界面风格并不一致,有可能导致图像识别失败。这个时候,我们可以通过设置匹配度阀值来解决一些问题,使图像识别更加可靠一些。通过对图像识别当中的匹配度的处理,可以使用以下几种方法:
1) 利用像素点的颜色值的相同占比进行计算,公式为:相同像素点/像素点总数量。比如针对一个宽度为100,调试为50的模板图片,像素点总数量为5000个。如果我们设置其匹配度为80%,那么只要这5000个像素点中,的4000个像素点的颜色值是一样的,就认为匹配成功。
2) 利用每个像素点的RGBA值对应的变化范围。这种情况要求我们取得每个像素点的每一个RGBA的像素值。比如我们模板的像素点的RGBA值为(120,200,180,255),而匹配到的某个像素点的值为(110,180,190,250),那么如果我们设置匹配度为80%(即允许每个像素点的误差范围在20%),则我们可以认为这两个像素点是一致的。
3) 利用灰度图进行处理。由于我们的GUI都是彩色图像,所以对比过程对颜色比较敏感,我们可以将期转换为灰度图,保留简单的像素值和图片轮廓,让对比过程更加关注于图片的轮廓上。
下期推送:模板匹配的核心算法
为了答谢大家对蜗牛学院的支持,蜗牛学院将会定期对大家免费发放干货,敬请关注蜗牛学院的官方微信。