您的位置:首页 > 其它

sikuli自动化测试环境搭建和demo

2016-05-25 13:35 323 查看
官方文档:http://doc.sikuli.org/globals.html
http://sikulix-2014.readthedocs.io/en/latest/index.html
Sikuli 是一种新颖的图形脚本语言,或者说是一种另类的自动化测试技术。它与我们常用的自动化测试技术(工具)有很大的区别。



当你看到上图sikuli的脚本时,一定会惊呼,这样都可以~!脚本加截图~~~

OK ,在惊讶过后,我们一起来大体的了解一下这个技术。

什么是Sikuli?

   Sikuli脚本自动化,你在屏幕上看到的任何东西。它使用图像识别,识别和控制GUI组件。这是有用的,当有一个GUI的内部或源代码的访问是不容易的。

  Sikuli(在墨西哥维乔印第安人的语言里是”上帝之眼”的意思)是由美国麻省理工学院开发的一种最新编程技术,使得编程人员可以使用截图替代代码,从而简化代码的编写流程。从它研究方向上看,是一种编程技术,但是该技术还可以用于进行大规模的程序测试,脚本程序编写使用的是python语言。

谁正在开发的Sikuli脚本?

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

  好吧~!你觉得谷歌浏览器翻译的太烂(但对我这种E文件菜鸟来说知道意思就行),那么可以去官网看英文介绍:

http://www.sikuli.org/

  Sikuli 可以采用Python 来做为脚本语言, 当然,你如果熟悉Python 的话,相信你对sikuli 的上手非常快。当然,你也可以使用sikuli的java API 使其在java 环境下运行。

下载安装

是否有兴趣与俺一起体验一下呢?

来下载页面看看http://www.sikuli.org/download.html

好吧~!这货已经发生了不小的改变,去年玩的时候还是“单纯”的一下小软件。现在好像要求变多了。

Sikuli 告诉我们目前只有32位的版本,不过这个版本应该也可以运行在32位与64的windows系统下。但是,是有前提条件地:

  1、请确保你已经安装java 6 JRE 32位版本(如果是java 7 或者是64位JRE 那是不被支持的)

  2、请确定你已经卸载的先前的sikuli版本(尤其是0.10.x版本)

  3、请确保在你安装 JRE 或 卸载旧版本的sikuli 后已经重新启动了系统。

安装步骤

一、就在上面提供的下载页面,点击“ Sikuli X-1.0rc3(R905)-win32.exe”下载安装。程序很小,比起QTP 等工具,就可以直接忽视了。



我的安装路径:I:\Program Files (x86)\Sikuli X

二、 安装完成后先不在不要运行,输因为他还有点小毛病,我们需要在下载页面找到“Sikuli X R930 ”连接,把这个zip类型的文件下载下来。

三、 我们将下载的文件sikuli-r930-win32.zip解压,然后得到一个SIKULI-IDE 的目录,把SIKULI-IDE目录下的所有文件替换Sikuli X下的所有文件。(这种做法有点2了!)做这一步的目的是r930关联文件修复了了最近的bug ,所以替换r905(有问题版本)文件关联。希望官方进快对下载版本修复,在你看到这篇文章再去下载安装时不用这么麻烦了。

界面介绍

上面已经安装完成,下面运行起来看看长相如何。



(注意窗口标题栏显示为“sikuli -r930”说明我们用的是替换版本)



菜单栏与工具栏非常简单,下面介绍一下这几个按钮是干嘛用的

   屏幕截图(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)。



  左侧侧边栏中分类列出了部分常用函数,点击函数名可快速将其插入到编辑区,若该函数需截图作为参数,则自动转入屏幕截图状态。下方的状态栏可用于查看当前行号,与行首 Tab 缩进的层级 ( 列号 )。

  右边区域上半部分为脚本编辑区域,我们的自测化测试脚本就是在这个区域编写完成。

  下半部分为提示信息,不管运行成功与失败,都会给出相应的提示信息。

小例子

  大体上了解sikuli 的界面,下面来做一个自动化的小例子。(官方的第一个小例子为开始运行里输入hello world )这里为打开360极速浏览器(默认为百度首页),搜索框里输入sikuli ,然后点击“百度一下”按钮搜索。

第一步、点击桌面360极速浏览器图标。

方法一,输入双击函数doubleClick(),然后通过截图工具对桌面图标截图,输入。

方法二很快捷,点击窗口左侧双击函数doubleClick(),直接进入截图状态。截图完成后直接添加函数到脚本编辑区域。



第二步,我们依然用第二种快捷的方式,点击左侧type(图标,text) 函数,这次截取的对象为百度首页的输入框。



因为,默认定位的焦点为图片的中心,我们要输入的位置在输入框的左侧,所以需要对焦点进行调整。直拉点击截图的输入框图片。



  当然,在这个窗口中,我们也可调整图片的匹配度,匹配度越低容错能力越强。这里来简单解释一下:

  大家知道ie7 与 ie8 的图标虽然相似,但还是有所差别的。为了使脚本的移植性更强。比如本机是用IE7 录制的脚本,移植到另一台电脑上只有IE 8 ,因为精确度调低,脚本也会把IE8 当IE 7 来执行。当然有些情况下调低并不好,比如桌面上有两个图标非常相识,那么精确度调整的很低,那么脚本就无法辨认谁是谁了。



第三步、这一步与第一步一样,不过这里要使用的函数是单击函数click() ,点击“百度一下”按钮。

下面完整脚本:



运行一下吧这个小脚本吧!成就感就此而生,这是你对这种技术产生兴趣的动力。。

优缺点

了解一下这个工具的优缺点会让你更正确的使用这个工具

优点

1、整体上sikuli小巧、便捷、容易上手。

2、sikuli脚本可以不经过API的编译器直接自动化搜索到任何你能在屏幕上看到的东西

3、对各种程序都适合

4、不存在标准控件和非标准控件的问题

5、相对位置概念较小,要求不高(但是对象本身尺寸有影响)

6、一次编码,多次运行(基于java的) 7、jython和java的支持,用编程的方式比较容易扩展

缺点

1、图片的分辨率、色彩、尺寸、唯一性对程序的影响 (如果有两个相同的,无法区分具体哪一个)

2、sikuli本身还不完善(处于开发、升级阶段) 还有很多程序bug,能否继续发展还是未知数

3、只认识当前活动的图标(只有当前桌面有才行)

4、用例组织方面有提供但是目前有bug,还未调研尝试便利性

5、截图的话,脚本存储占用空间较大

6、相似度调整需要手动一个个的调整,工作量大

7、ljw200901t和ljw200902t的区别(不太容易区别出来,可能需要调整到similarity=1.0才行,但这样的话可移植性就差了)

8、目前还不适合设计成一种测试框架(有用例组织功能,但是目前有bug,暂时没有用过)

9、测试报告的生成,直接用message的话比较弱,需要用jython编程实现可能会强大一些(还未调研)


sikuli常用函数:

1、findAll(图片)

findAll() searches the entire screen for all the matchingvisual patterns and returns a list of locations of those similar patterns. Thiscapability allows us to obtain all the checked items are on the screen. Then,we can simply write a for loop in standard Python

syntax and call click() oneach element in the list.



典型例子:Uncheck AllCheckboxes

2、点击操作

click(x)

左键点击元素x

rightClick(x)

右键点击元素x

3、below()





4、dragDrop()

This function takes two images asarguments. The first image describes the source GUI object to drag and thesecond image describes the appearance of the destination location where the GUIobject should be dragged to and dropped.



典型例子:Working with Sliders

5、right()
表示在右边




6、popup(string)
弹出一个提示框

例:

popup("Obama has updated his message")

运行:




7、键盘操作:



8、Resizinga
Window

This tutorial demonstrates how to use Sikuli script to resize a window by dragging its bottom-right corner.
In order to do so, you have to evaluate the current position of this corner on the screen,
move the mouse pointer to the applicable click point and then perform one or more drag actions.




9、表示方位的词:

Nearby(number)、above()、below()、left()、right()、getCenter()

10、位置偏移

Location(t.x-30,t.y+30)

其实用图形法会方便和舒服:点击图片,进入设置界面,点击偏移选项卡,然后可以用鼠标设置偏移量,点到哪就偏移到哪,如果想偏移到更远的地方,就滚动鼠标滑轮,可以放大缩小页面,选择偏移点。

11、屏幕翻页



其他键盘操作类型参数见Key (built-in class)

12、读写文件(其实就是python的语法)

#打开 写文件

f=open('c:/wy.txt','a')

t="hello\n"

f . write(t)

f.close()

#打开 读文件

f=open('c:/wy.txt','r')

t=f.read()

popup(t)

#open(路径+文件名,读写模式)

#读写模式:r只读,r+读写,w新建(会覆盖原有文件),a追加,b二进制文件.常用模式

13、input(“字符串”)

显示一个输入框,以供输入。要输入中文应该在前面加u

input(u“字符串”),不然会乱码

14、if语句

If 条件 and 条件:#(注意有冒号,‘#’号表示注释)

语句

15、openApp(应用程序路径名)

打开应用程序,注意应用程序的路径名里的斜杠“\”要改为双斜杠“\\”。

16、复制、粘贴操作

type("c",KEY_CTRL) #复制

type("v",KEY_CTRL) #粘贴

17、waitVanish("20120902172907.png",300)

waitVanish()最好带时间,不然还没消失就返回消失的信息了。

我觉得用下面的代替好些

while exists("image.png"):

wait(1) #ifthe image exist it will wait until the image disappear


18、sikuli输入中文

input(u"请输入想要获取并下载多少个页面的App资源:")

popup(u”chinese”)

在前面加‘u’避免乱码,‘u’是unicode还是utf8,我就不清楚了。

19、设定循环次数

for x inrange(10): #循环10次,x不用预先定义

循环体

20、编程小经验

1、用sikuli编程的时候,最好是保存为可执行文件来测试,因为有些功能直接测试是测试不出来的,比如type("c",KEY_CTRL) #复制,直接运行测试(好像)是无效的,当时我还困惑了很久。后来无意中保存为可执行文件后才发现是可以的。

2、用sikuli编程时,多用wait()语句,因为很多时候没有给它一定的识别时间,就容易出错。

还有的就是,进行复制粘贴操作时,如果需要切换到另外一个页面粘贴,再切回来,如果中间不wait一段时间,等粘贴完成,很可能就没有粘贴成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: