百木园-与人分享,
就是让自己快乐。

做iOS自动化测试必须知道的一些知识

WDA

facebook wda

2015年Facebook 开源了一款 iOS 移动测试框架WebDriverAgent,WebDriverAgent 在 iOS 端实现了一个 WebDriver server ,借助这个 server 我们可以远程控制 iOS 设备。你可以启动、杀死应用,点击、滚动视图,或者确定页面展示是否正确。它通过链接 XCTest.framework 并调用苹果的 API 直接在设备上执行命令。这使得它成为应用程序端到端测试或通用设备自动化的完美工具

wda作为任何UITest的捆绑软件启动,WebDriverAgentRunner作为一个后台应用运行在iOS手机上,
ServerURLHere->http://[SOME_IP]:8100<-ServerURLHere即在手机上8100端口启动一个HTTP server,内部就是一个死循环,监听网络传输过来的webdriver协议的数据,解析并处理点击事件

但该项目已经存档(archived),不再维护。2019年5月,Facebook开源了IDB,即“ iOS Development Bridge”,这是一个用于使iOS模拟器和设备自动化的命令行界面。他们正在将自己的内部项目从WDA迁移到IDB,并建议将其检查出来作为替代方案

appium wda

由于facebook wda已经停止维护,现在一般推荐使用fork自 facebook wda的appuim wda

airtest wda

iOS-Tagent也是基于 facebook 的 WebDriverAgent 项目上进行开发的 , 目的是为了对 Airtest Project 提供iOS平台的测试支持,该项目在原项目的基础上进行了定制化的优化和功能调整

XCTestWD

XCTestWD是WebDriver server的Swift版本实现,主要用于Macaca自动化项目,这里不做过多介绍,更多可参考官方文档Macaca面向多端的自动化测试

wda的安装和启动

  • 安装:可参考各自官方指南如iOS-Tagent 安装、iOS 真机如何安装 WebDriverAgent
  • 启动方式:
    • facebook wda启动方式可参考Starting WebDriverAgent,Xcode, xcodebuild 或FBSimulatorControl
    • appium wda 启动方式可参考Appium XCUITest Driver Real Device Setup

usbmux、libimobiledevice、usbmuxd及libusbmuxd

  • usbmux是苹果的私有协议,苹果设计该协议的原因是为了自家的macOS APP能够和iDevice进行通信,从而实现诸如iTunes备份iPhone、Xcode真机调试等功能
  • libimobiledevice 是一个使用原生协议与苹果iOS设备进行通信的库,可以把iPhone端口映射到电脑端口,那么就可以通过访问电脑的端口访问到手机的端口了
  • libimobiledevice底层使用的是usbmuxd,usbmuxd(USB multiplexing daemon)是跨平台的与iOS设备多路复用连接的scoket守护进程,该进程的作用是建立本地端口和远程端口的转发,实现usb到tcp的转换服务,根据相关usb协议,客户端将请求包发送到usbmuxd进程,通过usbmuxd转发到对方设备,实现tcp连接。而更底层用的是libusbmuxd,更详细的可点击查看项目中的介绍

安装libimobiledevice

brew install libimobiledevice --HEAD

libimobiledevice常用命令

  • 端口转发:iproxy xxxx yyyy(本地xxxx端口到设备的yyyy端口)
    如将本地8100端口映射到设备端口8100即iproxy 8100 8100,这样就可以通过访问电脑的端口访问到手机的端口了
  • 查看设备系统日志idevicesyslog
  • 查看连接设备信息ideviceinfo

更多参看libimobiledevice Usage

iOS自动化

综上,WDA会在iOS 端实现了一个 WebDriver server,并监听网络传输过来的webdriver协议的数据,通过电脑与手机端口的映射,我们就可以通过电脑发送网络请求到手机上的server,server就能解析并处理点击事件了

tidevice

因此我们需要做的是安装并启动WDA,设置端口转发。在tidevice出现之前,WDA只能通过xcodebuild来启动,而运行xcodebuild则必须有一台Mac才行。tidevice没有通过xcodebuild,而是通过usbmuxd直接跟手机上的服务进行直接通信完成手机上WDA的启动。usbmux在不同的平台都有开源的实现,所以tidevice不仅能在Mac上运行,也能在Linux、Windows上运行

  • 安装WDA
    方法1:(必须mac)将iOS设备与一台Mac连接,然后使用xcode编译源码安装,成功安装WebDriverAgent即可脱离Mac
    方法2:使用tidevice的安装命令,将开发者证书重签名的WebDriverAgent.ipa安装到iOS设备上

  • 运行WDA

  • tidevice relay,转发请求到手机,类似于iproxy如tidevice relay 8100 8100
  • tidevice xctest,运行xctest
  • # 运行XCTEST
    $ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner
    [I 210127 11:40:23 _device:909] BundleID: com.facebook.wda.WebDriverAgent.Runner
    [I 210127 11:40:23 _device:911] DeviceIdentifier: 12345678901234567890abcdefg
    [I 210127 11:40:23 _device:773] SignIdentity: \'Apple Development: -Your-Developer-Name-\'
    [I 210127 11:40:23 _device:840] Launch \'com.facebook.wda.WebDriverAgent.Runner\' pid: 239
    [I 210127 11:40:23 _device:1003] ProductVersion: 12.4
    [I 210127 11:40:24 _device:952] Start execute test plan with IDE version: 29
    [I 210127 11:40:24 _device:875] WebDriverAgent start successfully

    # 修改监听端口为8200, 并显示调试日志
    $ tidevice xctest -B com.facebook.wda.WebDriverAgent.Runner -e USB_PORT:8200 --debug

  • tidevice wdaproxy命令,wdaproxy这个命令会同时调用xctest和relay命令,另外当wda退出时,会自动重新启动xctest
  • # 可通过tidevice applist来获取wda的BundleID
    # 运行 XCTest 并在PC上监听8200端口转发到手机8100服务
    # facebook-wda
    $ tidevice wdaproxy -B com.facebook.wda.WebDriverAgent.Runner --port 8200
    # appium的wda
    $ tidevice wdaproxy -B com.gameappium.WebDriverAgentRunner.xctrunner --port 8200

    可通过在浏览器中访问http://localhost:8200/status来查看WDA是否启动成功
    Linux和Windows因为默认没有usbmux这个服务,提前安装一下就可以。可以参考这个issue
    启动后你就可以使用Appium 或者 facebook-wda 来运行iOS自动化了

    更多关于tidevice可参看tidevice

    参考及扩展阅读

    • WebDriverAgent(WDA)的配置使用及源码分析
    • usbmux协议分析

    更多知识可关注公号:CodeMonkeyJerry

    来源:https://www.cnblogs.com/mliangchen/p/15174202.html
    图文来源于网络,如有侵权请联系删除。

    未经允许不得转载:百木园 » 做iOS自动化测试必须知道的一些知识

    相关推荐

    • 暂无文章