其他测试框架 SikuliX+Mobizen 的自动化快餐

区曼 · 2015年09月25日 · 最后由 AppAutomation 回复于 2015年11月29日 · 3675 次阅读
本帖已被设为精华帖!

0. 引子

  • SikuliX(前身叫 Sikuli)是由 MIT 的研究团队发布的新型图形化编程技术。它以图像检索技术为基础,提供了一套基于 Jython 的脚本语言以及集成开发环境。使用者可利用屏幕截图直接引用 GUI 元素进行编程,完成交互操作。[1]
  • Mobizen 是由韩国的一家名为 RSUPPORT 的公司发布的 Android 设备远程控制的套件。它通过 Wi-Fi/USB/移动网络连接手机后,将手机屏幕投射到 PC 端,并可以直接在 PC 端用鼠标来操控手机。类似软件很多,不过 Mobizen 的优势就是延时小,交互还算流畅。(新版本似乎功能更多了,请发掘吧)

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

1. 安装

SikuliX 安装

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

  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 为例:

    Sikuli代码

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

  3. 一些 Tips:

    • 鼠标指向左侧函数列表并停留,可以得到函数说明,中文的哟
    • Ctrl+T 或者菜单里的<视图> - 可切换显示方式,显示为图片或者显示为图片名称(字符串)
    • 点击图片可以修改图片匹配时候的相似度百分比,拖动滑块实时预览匹配情况方便调节;可以修改目标位置偏移,比如你的目标很小,难以从当前整个屏幕中准确定位出来,你可以使用周边的一些明显特征来区分,截一张大图再利用偏移来准确定位到自己需要的位置上。例如下图,两个相同的按钮定位,先借助上面的文本和 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()

共收到 11 条回复 时间 点赞

赞!写得好详细!

以下请脑补成我的模拟器就是 Mobizen 连接的真机

....脑补成功。是的,这是真机。😉

用 SikuliXIDE 确实是很方便,写起来速度也快,但脱离了它很痛苦。
之前有个项目用了 python + sikuliX,结果累死在编写元素库的路上。。。

SikuliXIDE mac 上能用?

#2 楼 @lihuazhang 这个我能回答:能!这个 IDE 是 Java 程序来的。

#2 楼 @lihuazhang Sorry,更正一下,官网上说不支持 10.10.x 。。。

#4 楼 @chenhengjie123 我问你的时候,大部分情况是我已经是试验过的。

#5 楼 @lihuazhang 好坑啊。。。。

老是觉得没什么可写,这篇虎头蛇尾的东西写完也是然并卵的感觉。然而新手贴得到了鼓励,因此产生了动力。
第 2 步自动化执行里面的图是 SikuliX 官网的,图上却是 Mac OSX 10.10.1 ,另外我看到它说支持

SikuliX is a Java application, that works on Windows XP+, Mac 10.6+ and most Linux/Unix systems.

谁送我一个 Mac 我也来验证一下😍
不说了我去看徐峥包贝尔了见面会啊哈哈哈

做粘合剂合适, 做完整的自动化体系维护会是个大坑. 国外的一些云测服务, 有的提供了图形识别的支持.

SikuliX 可以换成按键精灵,哈哈,话说有没有人用过安卓的按键精灵测试过啊,之前用来做性能上一些测试感觉还行

SikuliX can run directly on Android.
Search AnkuLua on google play.

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册