微信号:gh_be6ab0a8dfb7

介绍:国内首个移动测试交流社区,最专业的 Appium 交流社区.专注于移动互联网测试和 Web 相关测试技术研究.我们的理念:Coding Share Show Cool

SikuliX+Mobizen 的自动化快餐

2015-10-09 08:03 watman
小编导读

做 UI 自动化测试总会遇到元素肉眼看得到但程序无法识别的问题,让我们大伤脑筋。而这次 watman 带来的 SikuliX + Mobizen 的方案则让程序和我们一样通过图像来识别界面元素,进行快速的简单脚本编写。



作者:watman

整理 By:chenhengjie123





0. 引子


  • SikuliX(前身叫Sikuli) 是由 MIT 的研究团队发布的新型图形化编程技术。它以图像检索技术为基础,提供了一套基于 Jython 的脚本语言以及集成开发环境。使用者可利用屏幕截图直接引用 GUI 元素进行编程,完成交互操作。


  • Mobizen 是由韩国的一家名为RSUPPORT的公司发布的Android设备远程控制的套件。它通过Wi-Fi/USB/移动网络连接手机后,将手机屏幕投射到PC端,并可以直接在PC端用鼠标来操控手机。类似软件很多,不过Mobizen的优势就是延时小,交互还算流畅。(新版本似乎功能更多了,请发掘吧)


将两者结合起来,就可以在PC端实现快速编程来完成自动化操控。优点就是快,编程简单,对于一些需要快速完成自动化的临时任务场景比较适用;缺点就是脚本通用性差,这也是基于图像的自动化(如Monkeyrunner等)的通病,还有就是当它运行的时候,PC几乎不能用来做其他事情。另外Silukix也可以用在PC端的其它GUI自动化:exe,浏览器等。


1. 安装


SikuliX安装


SikuliX的安装稍微有点复杂,需要先从官网下载页面下载安装引导的jar,然后通过引导来自动在线下载所需要的包来完成安装:

  1. 下载sikuli-setup.jar,放入一个空目录例如 SikuliX (个人建议:Windows下不要使用含中文或者空格的路径是一个好习惯);


  2. 双击执行 sikulixsetup~.jar ,或者使用命令 java -jar sikulixsetup....jar来打开安装引界面。在这里设置你准备使用的语言Python or Ruby、IDE、ORC识别的features、代理,特别需要注意的是代理,会影响到后面安装文件的下载。不清楚的内容可以点H看帮助;


  3. 完成设置后,点击 Setup Now 按钮开始下载,如果一切顺利下载下来后你将会在Setup目录里看到:


    • SikuliX-1.1.0-SetupLog.txt --- contains debug information of setup workflow

    • sikulixsetup-1.1.0.jar (might have a lengthy version suffix)

    • runsikulix(.cmd) --- command script for commandline usages of SikuliX

    • sikulix.jar --- (non-Mac systems only) SikuliX IDE and scripting support (option 1)

    • SikuliX.app --- (Mac systems) Mac application, should be moved to /Applications (option 1)

    • sikulixapi.jar --- Java programming support (option2)


  4. 如果你需要手动下载,则先建立 Setup 目录并从 http://nightly.sikuli.de/ 下载第3步中的文件,然后打开 sikulixsetup~.jar ,它会提示你文件已经存在,是重新下载还是跳过使用本地文件;


  5. 按照 Step by step 操作下来,如果没有问题就会提示你安装成功了。如果失败,就看看 SetupLog.txt 里面是什么错误,再针对解决;


  6. 安装完成后就可以使用 runsikulix.cmd 来启动 SikuliX 了。


Mobizen安装


Mobizen分为手机端和PC端两部分,分别下载安装即可。


  1. 官网下载地址下载PC端安装包安装。


  2. Google Play 下载APK安装包在手机上安装。如果没有梯子,也可以在 CoolAPK 上下载。


  3. 打开手机端Mobizen, 按照提示注册一个账号,这个账号将用来确认连接。手机客户端可以设置连接方式等内容。


  4. 打开PC端Mobizen,输入账号和密码,完成连接。此过程可能会要求下载驱动、手机出现录屏等各种提示,请适当操作即可。


2. 自动化实现


  1. 通过Mobizen连接手机,验证一下通过鼠标可以进行操作并能得到反馈。(打脸的是,刚才我在自己的手机上失败了,只能看不能摸,估计是Android 5.1的限制。)


    Mobizen的在这里的功能也仅仅只是连接手机并进行操作,目前连接不上也找不到合适的手机了,所以下面就只用模拟器演示一下SikuliX,如果你可以用Mobizen连接手机,你应该可以完成这一套方案。
    以下请脑补成我的模拟器就是Mobizen连接的真机

  2. 打开SikuliXIDE,编写测试脚本,以ApiDemo为例:


    通过左侧的各种函数可以直观地完成各种查找和操作,可查阅这方面的资料,上手很容易。

  3. 一些Tips:


    • 鼠标指向左侧函数列表并停留,可以得到函数说明,中文的哟


    • Ctrl+T 或者菜单里的<视图> - <Show ThumbNails> 可切换显示方式,显示为图片或者显示为图片名称(字符串)


    • 点击图片可以修改图片匹配时候的相似度百分比,拖动滑块实时预览匹配情况方便调节;可以修改目标位置偏移,比如你的目标很小,难以从当前整个屏幕中准确定位出来,你可以使用周边的一些明显特征来区分,截一张大图再利用偏移来准确定位到自己需要的位置上。例如下图,两个相同的按钮定位,先借助上面的文本和icon从整个屏幕上找到,然后通过偏移定位到按钮来进行点击操作



    • 可以使用编程语言(Python/Ruby)实现更强大的功能


  4. 执行测试:


    点击运行就开始执行了。需要注意的是,执行的时候SikuliX界面会自动隐藏,因此如果你有各种输出,暂时是不可见的,log或者数据建议写入文件。执行的时候,随时可以按快捷键 Alt+Shift+C 来终止。


  5. 结果:
    很遗憾,结果只能依靠自己的代码来输出,这里并没有什么内置的报告模块。


  6. Demo代码(其实没有图片就没有什么X用):

# Sikulix + Mobizen demo 
#20150925

def hello_demo(): if not exists("1443166848804.png"): # 进行错误处理 return -1;

click("1443166848804.png") wait("1443166987065.png", 5) # 等待目标出现,设置5秒超时 click("1443167235874.png") sleep(1) # 使用真机需要稍微大一点的延时以保证成功率 click("1443167266728.png")

# 可以使用 exists 方法来进行断言 assert exists("1443167432886.png") # 或者 if 判断 if exists("1443167432886.png"): print('OK') else: print('Failed')

# 直接用python执行adb命令 import os os.system('%adb% shell am force-stop com.example.android.apis') sleep(1) assert exists("1443167805504.png")if __name__ == '__main__': hello_demo()



 
testerhome 更多文章 Android GPU 过渡绘制小 Demo,真正的测试 Appium 入门到原理合集 Robotium 跨进程(底层设备事件注入 年终奖去哪儿了? React Native—— 移动应用跨平台框架江湖将现终结者?
猜您喜欢 IXDC2014中国用户体验行业调研报告出炉 请不要对程序员初学者说这些话…… 设计师的职人精神 嗨!2015软件测试现状有奖调查召唤你来参与! DockerCon 2016 D1| 盘点Docker生态链