• 15
  • 15
分享
  • 进阶必备:超热门的自动化测试技术知多少——软件测试圈
  • 曼倩诙谐 2021-11-08 10:33:13 字数 4306 阅读 1297 收藏 15

  Sikuli简介

  Sikuli是MIT的研究人员设计的一种新颖的图形脚本语言,计算机用户只须有最基本的编程技能(比如会写print ”hello world”),他不需要去写出一行行的代码,而是用屏幕截图的方式,用截出来的图形元素组合出程序。

  一、Sikuli的前世今生

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

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

  目前其官网更新为http://www.sikulix.com/,软件也更名为Sikuli X,但在诸多下载站点上,依然可以下载到其历史版本。Sikuli和Sikuli X虽然是一个软件的不同演进版本,但是其主要核心功能还是一致的。

  Sikuli-IDE和Sikuli Script就是现在的Sikuli X,最新版本是SikuliX2.0.5,部分兼容Sikuli JAVA API,支持Python和Ruby,Sikuli使用图像识别方法来识别GUI元素,将屏幕上看到的一切自动化。Sikuli脚本允许用户使用屏幕截图来自动化GUI交互,通过定位图像和键盘鼠标来操作GUI,能很好的实现桌面类应用的自动化,目前暂不支持移动端的使用。

  二、Sikuli的下载与安装

  2.1 Sikuli的下载

  Sikuli只有32位的版本,为了运行正常,需要确保满足以下条件:

  1.安装java6/JRE32位版本(目前不支持java7或者64位JRE)

  2.已经卸载之前的Sikuli版本(尤其是0.10.x版本)

  3.安装JRE或卸载旧版本的Sikuli后,系统已经重新启动

  Sikuli X则是只支持64位操作系统,支持的操作系统和注意事项如下:

  1.WindowsXP,7,8,10(其中Win10版本还在开发中)

  2.Mac OSX 10.10及以后版本(其中Mac OS 10.15版本在开发中)

  3.Linux/Unix的可用性则取决于前置条件

  4.移动操作系统(安卓、iOS等)目前不支持本地模式(VNC解决方案可能可以适用)

  2.2 Sikuli的安装

  将下载好的安装文件双击运行安装,程序不大,比起QTP?等大型工程工具,几乎可以直接忽视了。目前它已经改名为Sikuli X,为了方便起见,我们依然称之为Sikuli。

1.png

  需要注意的是,因为不是商业软件,所以提供的安装文件版本有可能会早于下载包的打包时间,所以必要的话,可以将下载下来的zip包解压,得到一个SIKULI-IDE?的目录,再将SIKULI-IDE目录下的所有文件替换Sikuli X下的所有文件。

  这可以用于修复最新的bug,可以作为应急处理。如果条件允许,还是使用最新版本的文件进行安装最为妥当。

  安装完成后安装目录下应该有5个文件:runsikulix.cmd、sikulix.jar、SikuliX-x.x.x、SetupLog.txt、sikulixapi.jar、sikulixsetup-x.x.x.jar,其中sikulixsetup-x.x.x.jar是安装包(x.x.x是版本号);runsikulix.cmd用来启动SikuliIDE;sikulix.jar是IDE需要的jar包;SikuliX-x.x.x-SetupLog.txt是安装日志(x.x.x是版本号);sikulixapi.jar是Java API。

  三、Sikuli的界面介绍

2.png

  1.菜单栏和工具栏

3.png

  屏幕截图:该状态下,完成对于弹出菜单、下拉框一类的控件的实时截图。拖拽鼠标光标选取需要截取的界面元素,释放鼠标左键的同时,自动将该截图插入到编辑区中光标当前位置。快捷键?Ctrl+Shift+2。

  插入图片:除屏幕实时截图外,用户也可通过点击该按钮导入已有的图片文件。

  建立屏幕区域:该状态下,拖拽鼠标光标定位线框选屏幕区域。释放鼠标左键,即可将当前选中区域的屏幕坐标信息插入到编辑区中。

  运行:点击执行当前脚本。快捷键为Ctrl+R。

  慢速运行:点击后以较慢的速度执行当前脚本,以红色外框标识每次图像查找定位,便于程序调试中进行焦点追踪。快捷键为Ctrl+Alt+R。

4.png

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

  右边区域上半部分为脚本编辑区域,测试脚本就是在这个区域编写,并且以原有效果呈现。下半部分为提示信息,会给出相应运行结果的提示信息。

  四、Sikuli语法示例

  Sikuli的语法很简单,代码也非常易懂,在了解Sikuli?的界面之后,下面给出几个自动化的小例子(官方的小例子为开始运行里输入”hello world”)。

5.png

  s这是一个运行在Windows平台的实例,根据代码关键字,基本上就可以了解这是一个打开Lotus邮箱,并且进行登录的脚本。

6.png

  这是一个运行在MacOS中,进行日常清洁任务的脚本。

  通过以上两个脚本,可以很清晰地梳理出Sikuli脚本的用途和每句的含义,尽管如此,还是有一些基本的语法需要进行了解和学习的,特别是Sikuli的脚本风格与Python十分相似,所以一定的脚本语言基础,对于掌握Sikuli是十分有帮助的。

  4.1Sikuli常用方法

  1)创建Screen类对象

  Screen是由Sikuli提供的一个基类。需要首先创建该Screen类的对象,才可以访问所有Sikuli提供的方法。

  语法:Screen s=new Screen();

  2)单击一个元素

  此方法用于点击屏幕上的特定图像。

  语法:s.click(“<>”);

17.png

  #这里需要注意,在对象页面中,test.png和上文的示例图片应该是对应的,或者该图片是唯一的。这样可以迅速定位元素

  3)右键单击一个元素

  此方法用来右键点击屏幕上的特定图像。

  语法:s.rightClick(“<>”);

18.png

  4)查找元素

  此方法用于查找屏幕上的特定元素存在。

  语法:s.find(“<>”);

19.png

  5)双击一个元素

  此方法用于触发屏幕上特定图像的双击事件

  语法:s.doubleClick(“<>”);

20.png

  6)检查元素是否在屏幕上显示

  这个方法是用来检查指定的元素是否存在于屏幕上。

  语法:s.exists(“<>”);

21.png

  7)在文本框输入一个字符串

  这种方法是用来在文本框输入指定的文本。

  语法:s.type(“<>”,”String to be typed”);

  例:s.type(“test.png”,“HI!!”); 

  8)旋转指定的图像

  这个方法是用来对图形元素进行旋转操作。

  语法:s.wheel(“<>”,<>,<>);

22.png

  9)拖放图片

  这个方法是用来将图片从源位置拖放到目标位置的。

  语法:s.dragDrop(“<>”,”<>”);

23.png

  10)特定图像的滚动鼠标悬停

  这个方法是用来对特定图像进行滚动悬停事件。

  语法:s.hover(“<>”);

24.png

  11)粘贴复制的字符串

  这个方法用来在指定的文本框中粘贴文本。

  语法:s.paste(“<>”,”test”);

25.png

  4.2Sikuli语法

  如果命令由两个词语组成,那么第二个词的首字母要大写。上文已经体现出来这样的原则,在编写脚本时要注意。Sikuli的脚本编写遵循Python语法规范,其本身提供了多种自定义类和自定义方法,与Sikuli基于Jython,其核心代码由Java编写,可在用户自定义的Java工程中将其作为Java标准类库进行引用。

  复杂的脚本需要读者在日后的学习和练习场景中逐渐摸索和实践。到这里可以看出Sikuli语言是将标定元素用图片或者截图的方式进行显示和定位,其基本的框架依然是基于Python语言,所以针对Sikuli语言的学习,依然要基于脚本语言。

  五、Sikuli实例

  在了解了语法之后,可以试着在Sikuli X的界面中写出自己的实用例子。本文以在Windows11系统使用Edge浏览器打开51testing网站为例,进行实例说明。

  脚本如下,每步给出了注释:

15326825_2021110116012110f66x.png

  以上就是打开51testing网站并进行登录的Sikuli脚本,按照动作和显示的不同,用户还可以选择不同的断言标志或者定位元素。同样的,将Sikuli脚本作为含有图形的脚本语言进行调试,更有助于加深理解。

  六、Sikuli的扩展

  Sikuli脚本可以很容易地与Selenium WebDriver整合,来自动化有Flash的网站。可以自动的与Windows以及其他的应用程序兼容。

  因为其使用的视觉匹配,因此可以自动化几乎所有我们在屏幕上看到的东西。它还提供了对Flash对象的广泛支持。也就是说, Adobe Flash播放器的组件可以被自动化,包括音频播放器,视频播放器等。

  Sikuli脚本可以被创建为Maven项目,还可以从命令提示符下运行。因此,Sikuli是最友好的自动化工具,用来自动化富有挑战性的Flash和Windows应用程序,故在自动化测试中,Sikuli语言是可以作为自动化测试利器的,可以避免复杂甚至繁琐的UI元素定位,从而提高自动化测试的准确性和效率。

  较为复杂的Sikuli实例是通过和Eclipse和Maven的配合进行的,但因为需要有较多的设置配置和调试内容,限于篇幅,本文暂不做介绍,待以后作为进阶内容说明,本次以简单场景为例,说明Sikuli的用法。希望以此抛砖引玉,使得读者对于Sikuli语言有初步而全面的认知,以更好地掌握其用法,使得在软件测试工作中发挥更大的作用。



作者:苗条小胖   

来源:http://www.51testing.com/html/30/n-4479630.html


2021 问卷礼物图.png

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   数据库大量应用程序开发项目中,大多数情况下,数据库的操作性能成为整个应用的性能瓶颈。数据库的性能是程序员需要去关注的事情,当设计数据库表结构以及操作数据库(尤其是查询数据时),都需要注意数据操作的性能。本文我们以MySQL数据库为例进行讨论。  一、数据库优化目标  1、减少 IO 次数  IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。  2、降低 CPU 计算  除了 IO 瓶颈之外,SQL优化中需要考虑的就是...
            8 8 1825
            分享
          •   问题引出  不知道大家有没有遇到这样的测试场景:一个Web应用,待测功能很简单,只需要点击按钮启动运行,经过一系列内部运算,返回给用户一个结果列表。  从可见的交付给用户的最上层UI功能来看,待测功能只是一个简单的“启动”—“观察结果”。  但是,我想当测试人员接手这样一个测试项目的时候,恐怕应该是先“惊喜”后“恐慌”吧?!  “惊喜”:这么简单,点一下看一下结果不就测完了?  “恐慌”:这么简单?会不会还有什么测试点我遗漏了,怎么感觉有点惴惴不安呢?!  这样的测试场景,我想几乎每个测试人员在职业生涯中都会遇到。那么,是不是真的就是“点一点”看看结果就行了呢?显然不是。  那么,对于这样...
            0 0 898
            分享
          •   前言  CANape是一款用于ECU测量、标定、诊断以及ADAS传感器数据采集的工具型软件。  测量——通过CANape不仅能采集记录ECU内部信号,还支持与车辆上的各种传感器的总线进行通信。与ECU不同,ADAS传感器不提供车辆实际运行信号,而是提供车辆运行时周围环境的详细信息,如通过摄像头和雷达传感器感知周围环境。传感器感知周围环境,将车身所处环境信息传至ECU通过ADAS算法分析决策之后,控制相应执行器动作。环境感知是ADAS技术中最基础、最重要的一环,感知系统提供信息的准确性直接影响到了整个ADAS系统的性能。通过CANape对传感器识别感知信息进行采集,以提高ADAS系统分析决策...
            0 0 2489
            分享
          • 背景知识Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。 Python 由 Guido van Rossum 于 1989年底发明,第一个 公开发行版发行于 1991 年。 Python 源代码遵循 GPL(GNU GeneralPublic License) 协议。 Python 不是大蟒蛇,而是个 BBC 电视剧(命名的来源) Python 是 解释型语言&nb...
            0 1 1054
            分享
          •   面对ChatGPT的来势汹汹,谷歌彻底慌了。  OpenAI发布ChatGPT也不过是4个月之前。但是在这4个月里,已经有不少预言,称ChatGPT带来的变革,将会颠覆谷歌的现有搜索产品和商业模式。  于是,谷歌CEO桑达尔·皮柴(Sundar Pichai) 开启“战备”状态:先是在ChatGPT问世两周内就拉起了“红色警报”,然后创始人拉里·佩奇和谢尔盖·布林时隔3年再度被紧急唤回。  今天皮柴更是在官网上称,谷歌一直在研发一款名为Bard的实验性对话AI服务,今天起,谷歌将把它对信任的开发者开放,然后将在接下来的几周内,把它向更广泛的受众开放。  谷歌终于加入了这场智能聊天机器人对搜...
            0 0 976
            分享
      • 51testing软件测试圈微信