HULK一线技术杂谈 https://mp.weixin.qq.com/s/MYA6l9V4BYIZO8Jgtds6GAcss
在具体进行讲解以前先介绍一下图像识别在测试中可以想到的引用场景:html
测试过程当中,经过对待测软件进行屏幕截图,采用图像识别算法识别截图中是否包含预约义的可操做控件,若是存在,则触发控制指令,达到了图像识别引导测试过程的目的;java
测试结果的验证,经过对待测软件的界面进行截图操做,利用图像识别技术将截图与指望的结果进行匹配,从而自动获取测试结果。c++
经过图像识别对比来进行性能测试,好比app测试中常见的响应时间的测试web
首先分享一下图形识别在自动化测试中的应用,目前比较流行的就是sikuli, 其中关于sikuli的安装在这里就很少说了,官网有具体的介绍(https://launchpad.net/sikuli/+download)算法
女主宣言函数
不管是web端仍是移动端,仍有不少时候须要根据页面内容、页面中的图像进行定位及断定,这是传统基于选择器等手段所达不到的,今天咱们来介绍一下关于图像识别在测试中的应用。工具
本文转自Qtest之道,关注了解更多测试知识~性能
PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!
提起ui自动化你们首先想到的就是基于控件的自动化,好比常见的xpath、id、css选择器等手段进行元素定位并进行结果判断。可是在实际应用中,不管是web端仍是移动端,仍有不少时候须要根据页面内容、页面中的图像进行定位及断定,是这些手段所达不到的,这里咱们来介绍一下关于图像识别在测试中的应用。
在具体进行讲解以前先介绍一下图像识别在测试中可以想到的引用场景:
测试过程当中,经过对待测软件进行屏幕截图,采用图像识别算法识别截图中是否包含预约义的可操做控件,若是存在,则触发控制指令,达到了图像识别引导测试过程的目的;
测试结果的验证,经过对待测软件的界面进行截图操做,利用图像识别技术将截图与指望的结果进行匹配,从而自动获取测试结果。
经过图像识别对比来进行性能测试,好比app测试中常见的响应时间的测试
首先分享一下图形识别在自动化测试中的应用,目前比较流行的就是sikuli, 其中关于sikuli的安装在这里就很少说了,官网有具体的介绍(https://launchpad.net/sikuli/+download)
原理
Sikuli脚本是由jython经过图像识别的方式来模拟键盘和鼠标事件,从而实现ui层面的自动化测试。Sikuli脚本的核心是一个java库主要由两部分组成:
java.awt.Robot 这个部分主要是讲键盘和鼠标事件传送给指定的位置,具体的位置是由c++引擎(基于opencv模块)经过脚本中的目标图片去屏幕上搜索并定位。C++引擎与java的JNI连接而且进行编译来适应不一样的平台。在java的上层是一个简单的应用层就是咱们开发脚本用的,这层给最终用户提供了一套简单易用的命令。
函数介绍
Find(x)
在屏幕上找到相对于的图片,好比选定一个手机
示例代码:
findall(x)
在屏幕上找到全部的相同图片x,好比能够关注多个手机(一次性把全部的图片的坐标选定,若是选定后再刷新桌面背景有可能出现以前的坐标和以前的功能点对应不上,达不到测试效果)
示例代码:
wait(x,10)
等待图片x在屏幕上或者指定的区域中出现,超时时间10秒
示例代码:
waitVanish(x,10)
等待屏幕上或者指定区域中给定的gui组件消失,最长等待10秒(最好设置时间)
示例代码:
exists(x)
在屏幕上或者指定区域中查找指定的GUI组件是否存在,若找不到改组件,就返回none,不抛异常,同时能够设置超时时间
示例代码:
click(x)
在屏幕上或指定区域中左键单击匹配度最佳的GUI组件
示例代码:
dubleclick(x)
在屏幕上或指定区域中双击匹配度最佳的GUI组件
示例代码:
rightclick()
在屏幕上或指定区域中右击匹配度最佳的GUI组件
示例代码:
hover(x)
将鼠标指针移动到匹配度最佳的GUI组件
示例代码:
dragDrop(x,y)
将图片x拖拽到图片y上
示例代码:
type(x,“text”)
给选定的焦点输入内容
示例代码:
paste(x,“text”)
给选定的焦点粘贴内容(具体和type目前没发现具体的区别)
代码介绍
http://www.sikuli.org/productivity.html
下面是一个用来测试响应时间的一个代码示例
优缺点
优势
介绍到这会有人问有了webdriver等ui自动化后为何还要用图像识别呢?我能想出来的理由也只有这几点了:
一、代码简单易懂,简单到什么程度呢?能够说会截图就能够进行自动化测试;
二、针对一些游戏或者一些特殊的应用ui控件比较难以识别这样就能够经过图像识别轻易的找到对应的元素;
三、代码的学习成本比较低经常使用的函数已经封装完毕,并且简单易懂;
四、工具开源能够进行二次开发;
五、能够识别相似flash这样不能经过识别控件来进行自动化测试的项目;
缺点
一、 屏幕不能有遮挡,由于sikuli是在当前桌面识别 对应的目标并进行操做,若是桌面有遮挡就会致使对应的元素找不到;
二、 若是代码换一个显示屏进行测试就要从新进行截图,由于以前全部的截图分辨率已经不适应当前界面;
三、 不能在后台进行测试,必须前台运行;
HULK一线技术杂谈