Sikuli 基于图形识别的自动化测试技术

作为一名测试人员,测试过程如果遇到应用程序界面结构庞大,页面设计频繁变动,对页面元素定位比较困难的的情况,又需要进行大量重复操作的测试,我们有什么快速解决问题的方法呢?也许Sikuli可以成为你的选择之一,它可以让你摆脱对控件API的依赖,通过实时检索当前屏幕的图像,获取可操作对象,模拟用户行为,校验真实的屏幕展示结果。

什么是Sikuli?

Sikuli自动化测试,是将屏幕上展示的内容,通过图像识别,用来定位到元素的位置,并进行操作GUI组件,最后也可以通过识别图片中的内容来判断操作是否成功。这样使得测试人员可以通过截图来代替编写代码,从而降低测试成本,简化编写测试脚本的流程。

Sikuli是在墨西哥维乔印第安人的语言里是”上帝之眼”的意思,目标是让电脑能像人一样去看真实的世界,并与之交互。

Sikuli的开发者

Sikuli是一个开放源码的最初的用户界面设计组织在麻省理工学院的研究项目,现在是保持并进一步协调与开源社区开发的Sikuli实验室在美国科罗拉多州博尔德大学。这是支持的,部分由国家科学基金会奖IIS-0447800,广达电脑的一部分的TParty项目。Sikuli 的MIT许可证下发布的。

下载和安装

版本1.1.3以下官方下载页面是

https://launchpad.net/sikuli/sikulix

新版本的1.1.4以上在

https://raiman.github.io/SikuliX1/downloads.html

如果使用1.1.3版本以下的,下载文件中直接双击打开sikulix.jar文件便是sikuli提供IDE,可以进行拖拽式的编写方式。

如下所示:

这种方式运行时要依赖于IDE,不方便使用脚本启动去执行测试,所以有另外两种方式,直接编写python脚本来执行。

01

纯python环境-Lackey库

Lackey是Python的一个自动化库,专为易用性和Sikuli自动化脚本的交叉兼容而生。它提供了一个简单但强大的API,用来查找屏幕上的图片,以及使用鼠标和键盘的基本用户输入。

Lackey依赖库

numpy

pillow

opencv

keyboard

安装命令:pip install Lackey

脚本中导入方式:from lackey import *

该库支持截图类型有.bmp, .pbm, .ras, .jpg, .tiff, and .png

find(“***.png”):查找元素,不存在抛出异常

exists(“***.png”):查找元素,返回true或false

wait(“***.png”,5):等待指定秒数,查找元素

click(“***.png”):点击元素

dubleClick(“***.png”):双击元素

input_(“text”):输入文本

……

实现了一个类似monkey工具的脚本示例如下(将所有截图放在工程里的btn_pictrues目录下即可):

02

写python脚本调用sikulixapi.jar中的API

** **准备环境

1

安装jython: pip install JPype1

2

安装 VCForPython27

3

安装JDK,并配置%JAVA_HOME%

可能遇到的坑

调用getDefaultJVMPath,找不到JAVA_HOME;或者启动java虚拟机会崩溃。可能是由于java和python安装版本位数不同导致的,两个同为32位或者64位软件才能正常运行。

注: 使用java -d32 或者 -d64查看32还是64位;终端中输入python,如下图查看查看32还是64位。

总结

Sikuli的优点是简单容易上手,支持多种编程语言(python/java),但是缺点也很明显。图片的分辨率色彩和尺寸等对程序执行结果影响很大,一台设备上执行成功的脚本可能一直到另一台设备上不能成功,需要重新截图。而且只能检测当前桌面上显示的内容,后台进程无法操作,pc端的所有用户操作并没有完全支持,sikuli本身还不完善,还在开发升级阶段。所以使用sikuli完成复杂的大型自动化测试,还不是一个最佳选择,但是它小而美的特点还是可以应用于测试的很多场景的