前言
最近在寻找一种较高效率测试APP启动时间的工具和方法,偶遇Sikuli~~~他算是一种上手很快的自动化搅拌
之前做过一些启动时间测试的实践,但主要是想从用户体验方向进行高效测试,简单做了对比如下:
参考项 |
系统日志 |
录屏 |
图像识别 |
加日志 |
执行效率 |
高 |
低 |
中 |
高 |
用户体验 |
低 |
高 |
高 |
中 |
修改源码 |
否 |
否 |
否 |
是 |
竞品对比 |
是 |
是 |
是 |
否 |
实现成本 |
低 |
高 |
中 |
中 |
最后发现这个神奇的Sikuli还是可以做进一步发掘的,至少他是开源的,哈哈~
什么是Sikuli?
MIT的研究人员设计的一种新颖的图形脚本语言Sikuli,计算机用户只须有最基本的编程技能(比如会写print"hello world"),我们不需要去写出一行行代码,而是用屏幕截图的方式,用截出来的图形元素组合出神奇的程序。
以一言以蔽之,你在PC屏幕上看到的任何东西都可以通过Sikuli的图像识别实现自动化。
Sikuli怎么工作?
简单来说,他可以分为四个部分:Python+Jython+Java+C++。
Ø 通过Sikuli IDE建立脚本,包括python和截图。执行脚本时,通过python解析器和Java环境进行代码解析;
Ø 引用啦Jython库,作为两者桥梁。
Ø Java.awt.Robot传递键盘和鼠标的事件流到适当的位置;
Ø c++用于屏幕内搜索指定的图片。
各个模块的关系如下图所示:
如果比较费解,我翻译了一个时序图,帮助大家了解:
需要做的准备工作:
第一步:Sikuli下载
我的云盘:http://pan.baidu.com/s/1pKKXICN(.jar)
官网:http://www.sikuli.org/download.html
第二步:下载资源,进行安装
以jar包安装为例,双击按照提示下载相关资源进行安装即可,过程大概15min-20min左右。
(PS:Windows上可以正常运行,Mac上运行jar包会有报错,暂时没有深究尴尬!!有兴趣的童鞋可以一起琢磨琢磨…)
二次启动,可以直接双击sikuliapi.jar即可
第三步:检验是否成功
运行后你看到如下的界面,恭喜你!可以开始正式编写Sikuli脚本啦~
如何编写你的自动化脚本?
第一步:认识界面元素的功能
菜单栏与工具栏非常简单,下面介绍一下这几个按钮是干嘛用的~
【屏幕截图(Take screenshot)】:点击该按钮,进入屏幕截图状态,拖拽辅助线选取需要截取的界面元素,释放鼠标左键的同时,自动将该截图插入到编辑区中光标当前位置。使用快捷键 Ctrl+Shift+2(Command+Shift+2)也可激活截图状态,以完成对于弹出菜单、下拉框一类的控件的实时截图。该快捷键亦可通过主菜单 File->Preferences 进行自定义。
【插入图片(Insert image)】:除直接截图外,用户也可通过点击该按钮导入已有的 PNG 格式图片文件。
【建立屏幕区域(Create region)】:点击该按钮,进入屏幕区域选择状态,拖拽定位十字线选取屏幕区域。释放鼠标左键,即可将当前选中区域的屏幕坐标信息插入到编辑区中。
【运行(Run)】:点击执行当前脚本。快捷键为 Ctrl+R(Command+R)。
【慢速运行(Run in slow motion)】:点击后以较慢的速度执行当前脚本,以红色圆形外框显式标识每一次图像查找定位动作,便于程序调试中进行焦点追踪。快捷键为 Ctrl+Alt+R(Command+Alt+R)。
第二步:将手机APP的屏幕投影到PC(目前以Android为实践)
我这边使用的是Chrome的一个Vysor插件。
对!就是它 è
第三步:使用Python并结合左侧的功能函数完成,脚本的编写。
1、 因为我要实现启动时间的记录,所以要引入time和 datetime,完全和用Python的语言就可以。
2、 以点击APP图标时,记录其启动的时间:
3、 下来就要根据体验标准给出目标图片,记录出现的时间,和之前的启动时间进行做差,即可得到与用户体验接近的启动时间,例如:
4、 可以加个优化:增加一个for循环,多次取均值,结果误差会更小。
5、 现在点击运行,可以看看效果了,不满意还可以调试调试哈
实践完成后的总结:
优点:
1.整体上sikuli小巧、便捷、容易上手。
2.sikuli脚本可以不经过API的编译器直接自动化搜索到任何你能在屏幕上看到的东西
3.不存在标准控件和非标准控件的问题
4.提供.jar包
便于构建大型的测试框架,实现各类测试工具之间的互补。
5.用例设计与程序实施可分离
用例设计人员可以只关注图型逻辑关系和测试检查点,不需要懂得具体开发与程序语言基础;程序实施人员可以只进行编程而不过多参与设计。
缺点也很明显:
1、一套脚本,可能只针对同一设置;
2、投影的位置也要相对固定,分辨率或者位置发生变化,有可能导致脚本无法跑通;
3、UI发生较大变化时,原脚本需要进行维护;
4、图片的分辨率、色彩、尺寸、唯一性对程序的影响(如果有两个相同的,无法区分具体哪一个)
5、sikuli本身还不完善(处于开发、升级阶段) 还有很多程序bug,能否继续发展还是未知数
6、只认识当前活动的图标(只有当前桌面有才行)
7、截图的话,脚本存储占用空间较大
7、相似度调整需要手动一个个的调整,工作量大
8、测试报告的生成,直接用message的话比较弱,需要用jython编程实现可能会强大一些(还未调研)
猜你想问…
iOS可以用吗?
理论上,只有可以将屏幕投影到PC就可以,具体请见下回分解