图像识别在测试中的应用

图灵汇官网

提起UI自动化,大家通常首先想到的是基于控件的方法,例如使用XPath、ID、CSS选择器等进行元素定位和结果判断。然而,在实际应用中,无论是Web端还是移动端,仍然有许多场景需要依靠页面内容和图像来进行定位和判定。本文将重点介绍图像识别在测试中的应用。

图像识别在测试中的应用场景

在具体讲解之前,先来了解一下图像识别在测试中的应用场景: 1. 测试过程中的图像识别:在测试过程中,可以通过屏幕截图并使用图像识别算法来识别截图中是否包含预定义的可操作控件。如果存在,系统会触发相应的控制指令,从而引导测试流程。 2. 测试结果验证:通过对软件界面进行截图,并利用图像识别技术将其与预期结果进行匹配,可以自动获取测试结果。 3. 性能测试中的图像识别:例如,在APP测试中,可以通过图像识别技术来进行响应时间的测试。

图形识别在自动化测试中的应用

目前,图形识别在自动化测试中较为流行的技术之一是Sikuli。虽然Sikuli的安装过程不赘述,但其官网提供了详细的安装指南(https://launchpad.net/sikuli/+download)。

Sikuli的工作原理

Sikuli脚本通过Jython实现图像识别,从而模拟键盘和鼠标事件,实现UI层面的自动化测试。Sikuli的核心是一个Java库,主要由两个部分组成: - java.awt.Robot:这部分负责将键盘和鼠标事件传递到指定位置。具体位置由基于OpenCV模块的C++引擎通过脚本中的目标图片在屏幕上搜索并定位。C++引擎通过JNI接口与Java连接,并针对不同平台进行编译。 - 简单的应用层:这是开发者编写脚本的地方,它提供了一套简单易用的命令集。

常用函数介绍

以下是Sikuli的一些常用函数及其示例代码:

  • Find(x):在屏幕上找到相对应的图片。例如,选定一个手机。

    示例代码: find("手机.png")

  • FindAll(x):在屏幕上找到所有相同的图片。例如,关注多个手机。

    示例代码: findAll("手机.png")

  • Wait(x, 10):等待图片x在屏幕上或指定区域中出现,超时时间为10秒。

    示例代码: wait("手机.png", 10)

  • WaitVanish(x, 10):等待屏幕上或指定区域中的GUI组件消失,最长等待时间为10秒。

    示例代码: waitVanish("手机.png", 10)

  • Exists(x):在屏幕上或指定区域中查找指定的GUI组件是否存在。如果找不到该组件,则返回None。

    示例代码: exists("手机.png")

  • Click(x):在屏幕上或指定区域中单击匹配度最佳的GUI组件。

    示例代码: click("手机.png")

  • DoubleClick(x):在屏幕上或指定区域中双击匹配度最佳的GUI组件。

    示例代码: doubleClick("手机.png")

  • RightClick():在屏幕上或指定区域中右击匹配度最佳的GUI组件。

    示例代码: rightClick("手机.png")

  • Hover(x):将鼠标指针移动到匹配度最佳的GUI组件上。

    示例代码: hover("手机.png")

  • DragDrop(x, y):将图片x拖拽到图片y上。

    示例代码: dragDrop("图片x.png", "图片y.png")

  • Type(x, "text"):给选定的焦点输入文本。

    示例代码: type("输入框.png", "Hello World")

  • Paste(x, "text"):给选定的焦点粘贴文本。

    示例代码: paste("输入框.png", "Hello World")

代码示例

Sikuli还提供了许多实用的代码示例,可以在其官方网站的产品页面查看(http://www.sikuli.org/productivity.html)。下面是一个用于测试响应时间的代码示例。

优缺点分析

Sikuli具有以下优点: 1. 代码简单易懂:甚至会截图的人也可以进行自动化测试。 2. 适用于难以识别的UI控件:例如游戏或特殊应用中的控件。 3. 学习成本低:常用的函数已封装完毕,易于理解和使用。 4. 开源工具:支持二次开发。 5. 适用于无法通过识别控件进行自动化测试的项目:例如Flash项目。

然而,Sikuli也有一些缺点: 1. 屏幕不能有遮挡:因为Sikuli需要在当前桌面上识别目标并进行操作,如果有遮挡物会影响识别效果。 2. 分辨率依赖:在不同显示器上测试时,可能需要重新进行截图,因为原始截图的分辨率可能不再适用。 3. 只能前台运行:不能在后台进行测试,必须在前台运行。

希望以上内容对你有所帮助。如果你有任何其他问题,欢迎随时联系。

本文来源: 图灵汇 文章作者: IT桔子