Appium 关于 Appium 的一些疑惑

sixleaves · August 31, 2016 · Last by 陈恒捷 replied at September 01, 2016 · 1356 hits

1、最近打算把公司的自动化 UI 框架替换成 Appium 于是了解了一下这 Appium 这个框架的底层原理。
原本的 UIAutomation 的通信是通过 instrument 简介实现的。而 Appium 是机遇 WDA 实现。看了下 WDA 的原理,是 Facebook
开发的,链接进了 XCTest 框架。我就有一个疑惑了,根据我查找的资料,苹果提供的 XCTest 进行 UI 自动化,是必须内嵌进项目
代码种。但是 Appium 进行的是黑盒测试。这就有点解释不通了?

2、是否 WDA 的作用就是在于手机端接受服务器的命令,然后转换成相应要调用的苹果 API。
因为我看到工程中 dump 出了大量的 XCTest 的私有头文件,然后调用苹果这些原生私有 API 进行了这项操作。

有了解的么?希望和你讨论。

共收到 5 条回复 时间 点赞

XCUITest 和 XCTest 虽然同是 XCTest 框架,但具体执行方式略有不同。

  • XCTest 是内嵌到应用中的,和被测应用属于同一进程。
  • XCUITest 虽然代码上是和应用项目写在一起,但执行时和被测应用是分开不同进程的。

举个例子,应用有一个内部变量 a ,没有直接显示在界面中,XCTest 有办法获取到这个变量 a ,但 XCUITest 就不行。

XCUITest 支持对 iOS 的任意界面进行界面自动化测试,且运行环境是在被测应用外另外开一个进程执行。你可以理解成有点类似 UIAutomation 那样,在被测应用以外控制界面,只是 UIAutomation 做了强制检测,被测应用一旦退出就自动停止(我以前用 UIAutomation 做 monkey 测试的时候,由于发送指令速度过快,有时候被测应用已经闪退了它还会继续执行一两个事件才停止)。

WDA 的实现形式是自己做一个 app ,然后启动的时候是通过执行那个应用的 UI Testing Bundle 方式启动,并在启动完成后模拟按下苹果的 home 键回到桌面。由于前面提到它支持对任意界面进行自动化测试,所以只需要让它去启动你的应用(可以根据 bundleId 启动任意应用,包括苹果系统自带的),就可以控制你的应用界面了。

如果和 Android 的 UI 自动化测试框架进行类比的话,WDA 有点类似 UIAutomator。

#1 楼 @chenhengjie123 关于你提到的 WDA 的形式是自己做一个 app,通过 bundle id 去启动 app 这个没错。但是我的疑惑是它如何控制应用的界面,是通过 XCTest 框架的 API?

#2 楼 @sixleaves 对。严格的说是 XCUITest 相关的 API 。因为这个 API 可以控制任意界面(包括非这个项目的界面),所以就可以控制你的被测应用界面咯

#3 楼 @chenhengjie123 而且 facebook 用了很多的私有 API,并对一些私有类做了扩展。这样很可能会造成苹果发布一个新版本,私有类活 API 一变动,Appium 这边就不支持了,兼容性没有通过 instrument 通信的方式那么好。

#4 楼 @sixleaves 问题在于苹果已经不打算再维护 UIAutomation 了,所以相比之下 XCUITest 相对靠谱一些。而且既然有 facebook 在做维护,苹果新版本跟进速度应该不会太慢。

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up