写在前面
最近两天,公司有个PC客户端的测试任务,除了最基础的功能测试外,还包括稳定性测试和兼容性测试需求。刚好去年接触过Sikuli这款基于GUI图像识别框架的自动化测试工具,于是便应用于测试工作中,辅助测试任务。初步试用下来,总体效果还算差强人意。
 

一、GUI图像识别框架元祖:Sikuli

Sikuli 创始于 2009 年,是麻省理工学院用户界面设计小组的一个开源研究项目。2012 年由 RaiMan 接管开发和 支持并将其命名为 SikuliX。 它以图像检索技术为基础,提供了一套基于 Jython 的脚本语言以及集成开发环境。使用者可利用屏幕截图直接 引用 GUI 元素进行编程,完成交互操作。 Sikuli 一词取自墨西哥的土著语,意为“上帝之眼”,寓意—— Sikuli 让电脑能像人一样”看”这个”真实世 界”。官网:http://www.sikulix.com/
SikuliX支持作为脚本语言:
  • Python 语言级别 2.7(由Jython支持)
  • 支持运行RobotFramework文本脚本
  • Ruby 语言级别 1.9 和 2.0(由JRuby支持)
  • JavaScript(受 Java 脚本引擎支持)
SikuliX的常见用途:
  • 应用程序或网页的日常自动化任务
  • 玩游戏
  • IT系统和网络的管理
 

二、Sikuli运行原理

 

三、Sikuli安装

Sikuli 支持跨平台运行,可以运行在Mac OS X、Windows 和 Linux 系统下。
下载地址:https://launchpad.net/sikuli/+download 或者官网:http://sikulix.com/
推荐安装x1.0-rc3(需要依赖JDK1.6版本)

四、Sikuli IDE主界面基本使用

Sikuli1.x版本官方文档:http://doc.sikuli.org/
1.左侧为常用函数,包括查找、鼠标动作、键盘动作等
2.点击元素的图片可以调节识别的偏移度、匹配的精度
3.sikuli脚本首次保存会提示并弹出保存路径,可自定义保存路径
4.脚本也可以导出为exe格式的可执行文件
  • 一个脚本对应一个目录,目录中对应脚本中的图标截图、python脚本,
 

五、Sikuli 脚本语法

Sikuli 的脚本编写遵循 Python 语法规范,其本身提供了多种自定义类及其自定义方法。由于 Sikuli 基于 Jython,其核心代码由 Java 编写,可在用户自定义的 Java 工程中将其作为 Java 标准类库进行
  • 定位APP窗口:myApp.window()
  • 聚焦到当前APP:myApp.focus()
  • 判断元素是否存在:exists()
  • 点击某个元素或图标:click()
  • 输入文本内容:type("http://www.baidu.com")
  • 按下键盘按键:type(Key.ENTER) 按键名要大写

六、Sikuli 应用示例

PC客户端的自动循环发送消息的脚本示例:
import time
import random myApp=App("yueyun-im") # 声明APP实例
if not myApp.window(): # 判断当前是否处于APP窗口
openApp("D:\\yueyun-im\\yueyun-im.exe") # 如果不处于APP窗口,则打开指定位置EXE
myApp.focus() # 聚焦于APP
if exists("K7iX.png"): # 判断图标是否存在
click("K7iX.png") # 点击指定图标按钮
if not exists("1655945972853.png"):
click("1655946081065.png")
click("1655945972853.png")
#while 'p' in 'python':
for i in range(10):
type("TEST-SIKULI-MSG-"+str(i))
time.sleep(0.2) # 休眠3秒
#click("1655946081065.png")
type(Key.ENTER) # 按下键盘的ENTER键,按键名要大写
type(Key.ENTER)
myApp.close() # 关闭APP
 

七、Sikuli 优势及局限

1.优势

① 学习成本低,只需掌握简单的python语法就能快速上手;
② 无需关注元素有哪些属性,所见即所得;
③ 适合非标准控件等自定义界面的定位,如游戏界面;
④ 支持跨平台,支持Windows、Linux、macOS;

2.局限

① 基于图像识别,图片的大小、分辨率、色彩都会对识别造成影响,定位不能百分百准确地识别到元素;
② 只能定位当前正在操作的窗口界面;
③ 若流程过长,则会造成脚本过于臃肿;
④ 图片存在相似度,会对识别造成影响,需要手动一一调整图片的精度;
 

Sikuli 使用小结

  • 尽管sikuli用来实现复杂的测试场景不太现实,这也是所有GUI自动化测试无法改变的现实。但用来做一些特定场景的测试还是游刃有余,比如:
① 循环、持续发送消息,7*24h运行,以检测程序运行稳定性;
② 持续发送图片或视频文件,以检测程序的连续上传、下载文件的稳定性;
③ 在不同的PC系统版本上运行,以检测程序的兼容性;
  • 对于web自动化、APP自动化主要用该端特定的自动化框架,如selenium、appium,sikuli作为辅助、可以和selenium等结合使用;
  • 对于特定的、复杂的场景,如游戏界面、flash应用等难以识别到元素的应用界面,可以使用sikuli;
  • 今天在测试场景②的过程中也发现了一个bug:【当前聊天窗口,连续下载图片过程中,程序闪退】。虽然硬说是sikuli测出来的bug有些牵强,但本身自动化测试也不是用来发现bug的,sikuli也算是出了很大一份力。只要能合理地利用,任何不起眼的工具都可以发挥它的价值!

更多实用干货,同步首发于微信公众号【测试开发实战】,欢迎关注!

基于Sikuli GUI图像识别框架的PC客户端自动化测试实践的更多相关文章

  1. 基于netty实现rpc框架-spring boot客户端

    上篇讲了RPC服务端的实现.原理就是解析netty通道数据拿到类.方法及入参等信息,然后通过java反射机制调用本地接口返回结果.没有用到很复杂的技术. 这篇我们将客户端的实现.说白了客户端的任务很简 ...

  2. PC客户端自动化测试工具--pywinauto

    1.安装 pywinauto pip install pywinauto 2.打开PC的.exe可执行文件的,一种方式就够用了 from pywinauto import application ap ...

  3. 基于图像识别框架Airtest的Windows项目自动化测试实践

    写在前面 上一篇分享了<基于Sikuli GUI图像识别框架的PC客户端自动化测试实践>,但sikuli看起来怎么都像是上个世纪的界面风格,且功能过于简陋.而同样基于图像识别框架的Airt ...

  4. python 实现 PC 客户端自动化快速入门:pywinauto !

    本文转载自:http://www.lemfix.com/topics/420 一.前言 ​ 我们柠檬班的小可爱,在学完我们柠檬班自动化的课程之后,就掌握了接口自动化,web自动化,app自动化,这些工 ...

  5. [1]开发准备-使用C#.NET开发基于本地数据缓存的PC客户端

    小记:本人是PHPer,对C#.NET的开发只能说看得懂,也写得了功能略简单的PC客户端程序,下面的是本人开发一款名叫“理财速记”的PC客户端软件的全过程记录,期间包括比较繁琐的C#.NET资料查询等 ...

  6. 基于滴答清单 Web 开发的 PC 客户端

    基于滴答清单 Web 开发的 PC 客户端 关于「滴答清单」 滴答清单是一款不可多得的 GTD 效率工具,它有着清晰明了的界面设计.恰到好处的功能设置.稳定的同步服务,如果你还缺少一款简洁而有效的 G ...

  7. 搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

    搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating ...

  8. 用node-webkit 开发 PC 客户端

      7月 3 2013 导言 node-webkit 是一个很神奇的桌面客户端项目,正如这个项目的名字,这个项目是由node 和 webkit 构成,简单来说,就是你可以用HTML 5和 node 进 ...

  9. 开发WebApp之PC客户端

    HTML5的跨平台性还是很好的,苹果.Android手机都可以用,所在最近使用Jquery Mobile开发了一个手机端应用程序,一次开发,多个平台使用. 但我们的很多客户使用的是还是IE浏览器,有的 ...

随机推荐

  1. 数仓选型必列入考虑的OLAP列式数据库ClickHouse(中)

    实战 案例使用 背景 ELK作为老一代日志分析技术栈非常成熟,可以说是最为流行的大数据日志和搜索解决方案:主要设计组件及架构如下: 而新一代日志监控选型如ClickHouse.StarRocks特别是 ...

  2. MASA Auth - 权限设计

    权限术语 Subject:用户,用户组 Action:对Object的操作,如增删改查等 Object:权限作用的对象,也可以理解为资源 Effect:规则的作用,如允许,拒绝 Condition:生 ...

  3. python将test01文件夹中的文件剪切到test02文件夹中

    将test01文件夹中的文件剪切到test02文件夹中 import shutil import os def remove_file(old_path, new_path): print(old_p ...

  4. H5 页面 上使用js实现一键复制功能

    2.解决苹果手机浏览器 无法使用的问题  上面的方法在 iphone 手机 safari浏览器失效的问题 其实就是使用输入框先显示然后模拟选择复制在隐藏输入框

  5. 对于vjudge在有些网络下无法打开的问题

    因为有些网络会屏蔽vjudge,所以打开 镜像网址 不行再试试这个:最新镜像网址

  6. WC2015 题解

    K小割 题目链接:WC2015 K小割 Description 题目很清楚了,已经不能说的更简洁了-- Solution 这道题出题人挺毒的,你需要针对不同的部分分施用不同的做法 . 第\(1\)部分 ...

  7. 花两万培训Java的三个同学,最后都怎么样了

    仙路尽头谁为峰,学完Java学Python. 前言 对于IT行业的培训,例如Java.大数据.H5等等,我一直保持着肯定的态度. 因为当年大学时期的我,也差点去参加Java培训.一是因为那时钱包空空, ...

  8. 最短路之 Dijkstra 算法

    普通的 Dijkstra 这是一种运用贪心的单源最短路算法,就是求从一个节点出发,到任意一个点的最短距离 首先我们要一个图 假设要求从 1 开始的单源最短路 dis[] 表示最短路数组, vis[] ...

  9. 前端学习 linux —— shell 编程

    前端学习 linux - shell 编程 shell 原意是"外壳",与 kernel(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁.shell 有很多种,国内通常使用 ...

  10. VueX的模块你知道多少?

    为什么会出现VueX的模块呢?当你的项目中代码变多的时候,很难区分维护.那么这时候Vuex的模块功能就这么体现出来了. 那么我们就开始吧!一.模块是啥? /* eslint-disable no-un ...