如果有一天,有人告诉你,仅仅靠截图就能实现自动化,你会相信么?没有什么不可能,威廉能结婚,美国干拉登,只要功夫深,铁杵磨成针。借助MIT的sukuli开源项目,我们能很容易的实现会截图就会自动化测试这个看似遥远而飘渺的传说技术。
作为一个手工或者黑盒测试人员,有一项技能应该是必备的,那就是截图技能。好的bug截图会让开发人员一眼就能定位到bug所在,让他们很清晰直观的了解到什么地方出了bug,这个bug究竟是什么。截图技巧的高低会直接影响到开发人员对测试人员的评价高地及信任程度,以至于很多时候,有一些刚入行的同学在跟我聊天的时候隐约提到,他们认为手工测试就是 点来点去 + 截图。当然这个观点自然是片面和消极的,不过从这里我们也可以看出,对测试人员来说,截图一手好图不亚于某风流才子吟得一首好诗,会截图,截好图的测试人员会潜移默化的使得整个团队都变得高效和敏捷起来。
测试人员都会截图。以前我们截的图都是给人看的,现在我们要截图给机器看,让机器通过截图去“读懂”我们的想法,为我们进行自动化测试。
Sikuli是什么?
下面是来自于官网的介绍:Sikuli is a visual technology to automate and test graphical user interfaces (GUI) using images (screenshots). Sikuli includes Sikuli Script, a visual scripting API for Jython, and Sikuli IDE, an integrated development environment for writing visual scripts with screenshots easily. Sikuli Script automates anything you see on the screen without internal API's support. You can programmatically control a web page, a Windows/Linux/Mac OS X desktop application, or even an iphone or android application running in a simulator or via VNC.
Sikuli是一种使用截图进行UI自动化测试的技术。Sikuli包括sikul脚本,基于Jython的API以及sikuli IDE。Sikuli可以实现任何你可以在显示器上看到ui对象的自动化,你可以通过编写一些代码来实现web 页面,window/linux/Mac OS X桌面应用、甚至是iphone和android模拟器的自动化测试。
安装jruby/sikuli及其他软件:
在这里我们先介绍一下如何使用sikuli + jruby + watir-web_driver来实现基于web的自动化测试,因此在开始之前,我们需要安装一些基本工具。
安装sikuli:
在这里下载安装sikuli:http://sikuli.org/download.shtml
注意:
1,sikuli是跨平台的,所以请选择对应的平台版本进行下载;
2,sikuli需要最新的JRE作为支持,所以安装前请将jre升级到最新;
3,Sikuli安装完成后,运行sikuli IDE,检查是否正常安装。
安装jruby:
下载地址:http://www.jruby.org/download
注意:
1,如果是windows系统,请选择JRuby 1.6.1 Windows Executable (md5, sha1)进行安装;
2,安装完成后,进入命令行,键入jruby -v查看jruby版本,确定jruby是否安装成功;
3,将sikuli安装目录下的sikuli-script.jar文件拷贝至jruby安装目录\lib目录下;
安装watir-webdriver安装完jruby后,进入命令行,键入jgem install watir-webdriver,进行安装。
安装jruby是因为在sikuli运行的时候会用到Java对象,因此需要在jruby环境中使用。当然,也可以使用jython来调用sikuli,sikuli IDE默认的脚本语言是jython。
安装watir-webdriver是因为我们需要一套web 页面的自动化测试框架来配合sikuli使用,让sikuli的作用发挥至最大。
实战演习——使用watir + sikuli进行web qq登陆测试
下面的代码演示了如何使用sikuli进行web qq的登陆测试。由于web qq前端技术神乎其技,导致一些基于dom的测试工具——如watir无法对其进行测试。比如watir无法识别web qq中使用的一些html5标签。这时候我们就需要借助于sikuli进行对象的识别和操作。
下面是脚本中所使用的全部截图。
上面的脚本就是采用图形比对的方法,在屏幕上找到截图中看起来一样的图形,然后对这片区域进行操作。 实战演习——使用sikuli IDE进行漂流瓶操作QQ邮箱的漂流瓶是当下非常受欢迎的一个功能,由于QQ邮箱的多frame前台架构,导致waitr等传统web工具在进行qq邮箱测试时非常的麻烦。这里我们演示一下如何使用sikuli IDE进行漂流瓶的投递操作。 打开sikuli IDE,由于该应用是java写的,所以运行起来非常缓慢,请大家稍等。 进入QQ邮箱,打开漂流瓶应用,此时UI应该如下:
下面是操作漂流瓶的sikuli IDE代码:
可以看到原生sikuli代码还是很清晰易懂的。注意:在sikuli script中,方法的默认调用对象是当前的Screen。也就是说click的默认调用者就是当前的screen。
这里我们简单介绍了一下sikuli的基本应用,以后我们会详细讲解sikuli的更多高级用法。