做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
- facebook wda启动方式可参考Starting WebDriverAgent,
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
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
参考及扩展阅读
更多知识可关注公号:CodeMonkeyJerry
做iOS自动化测试必须知道的一些知识的更多相关文章
- 如何使用UIAutomation进行iOS 自动化测试(Part I)
转自:http://www.cnblogs.com/vowei/archive/2012/08/10/2631949.html 写在前面 研究iOS的自动化测试也有些日子了,刚开始的时候,一直苦于找不 ...
- mac上搭建appium+IOS自动化测试环境(一)
阅读须知 由于OS X系统最近才开始接触,所以有些东西也不是很清楚,这里只提供方法不提供原理,能解释清楚的我也会尽量解释.可能也有一些地方说的不严谨或有错的,还望大家指点一二. 实验环境 操作系统: ...
- 【Mac + Appium + Python3.6学习(三)】之IOS自动化测试环境配置
在做这一节之前先配置我的另一篇文章所需要安装的前提准备条件:<[Mac + Appium学习(一)]之安装Appium环境前提准备> 一.安装IOS自动化测试环境 配置环境: Appium ...
- iOS自动化测试的那些干货
前言 如果有测试大佬发现内容不对,欢迎指正,我会及时修改. 大多数的iOS App(没有持续集成)迭代流程是这样的 也就是说,测试是发布之前的最后一道关卡.如果bug不能在测试中发现,那么bug就会抵 ...
- appiumstudio工具-----实现windows上安卓、IOS自动化测试
博主用的是win10,用python+appium做完安卓的自动化第一个版本后,大量地搜索windows上做IOS自动化的解决办法,有的建议用虚拟机,安装苹果的系统,没有实践过,据说效果不很好.然后, ...
- 谈一谈做iOS播放器库开发所涉及的知识点
在自己研究生毕业的时候,想着能找上一份做视频编解码的工作,可惜没有如愿,最后到了一家iOS游戏渠道公司去做游戏支付业务的SDK开发,我的iOS正式开发生涯就这么开始了. 在那家iOS游戏渠道没做上一年 ...
- Airtest结合tidevice实现IOS自动化测试
这篇博文内容,是基于之前的配置而来的.我们可以先回顾一下之前博文,Windows搭建mac黑苹果系统:WebDriverAgent重签名爬坑记 . 今天来分享下如何通过 tidevice实现IOS自动 ...
- 零成本实现Android/iOS自动化测试:基于Appium和Test Perfect
https://item.taobao.com/item.htm?spm=a230r.1.14.14.42KJ3L&id=527677900735&ns=1&abbucket= ...
- Appium Studio 初体验(windows做ios自动化,录制appium脚本)
偶然的机会遇到了这个工具——Appium Studio, 在官网是这么解释的 Get your Appium testing projects going within minutesInstall ...
随机推荐
- Linux创建ftp并设置权限以及忘记ftp帐号(密码)修改 (转)
忘记ftp密码修改方法:1.登录服务器 cd /etc/vsftpdcat ftpusers找到对应的ftp用户名 (如果用户名也忘记了 那么 cd /etc 然后cat passwd 查看用户 ...
- MySQL中的字段拼接 concat() concat_ws() group_concat()函数
1.concat()函数 2.concat_ws()函数 3.group_concat()函数 操作的table select * from test_concat order by id limit ...
- runtime使用总结
runtime这个东西,项目是很少用到的,但面试又避不可少,了解其内部的机制对底层的理解还是很有必要的. 1.动态添加属性 拓展类别属性的简单实现 a.定义字面量指针 static char dyna ...
- OSSBrowser windows使用
目录 1. 安装 2. 启动OSSBrowser并登录 1. 安装 下载地址:github或官方 2. 启动OSSBrowser并登录 ossbrowser安装包下载到本地解压之后,点击oss-bro ...
- Django基础-004 上下文管理器&中间件&前端公共代码复用
一.上下文管理器 在views中重复使用的代码,可以在上下文管理器中实现 上下文管理器的处理流程如下: 1.先走完views里面的代码,将结果返回给前端 2.然后再将上下文的结果返回给前端 3.上下文 ...
- 12. Mysql基础入门
课程大纲 • 数据库概述 • MySQL基本操作 • MySQL索引基础 • MySQL高级特性
- .Net Core with 微服务 - Polly 服务降级熔断
在我们实施微服务之后,服务间的调用变的异常频繁.多个服务之间可能是互相依赖的关系.某个服务出现故障或者是服务间的网络出现故障都会造成服务调用的失败,进而影响到某个业务服务处理失败.某一个服务调用失败轻 ...
- [善用佳软]Chrome插件之彩云小译
最近公众号新推出个栏目[善用佳软],旨在和大家分享各种小插件和制作开源小软件. 最近在浏览外网时,发现一个贼好用的翻译神器---[彩云小译],在网页端就可以快速的对照翻译出来,经过试用发现无论是速度还 ...
- 给你的Mac 整个好用的命令行iTerm2 + zsh + oh-my-zsh + powerlevel10k
给你的Mac 整个好用的命令行iTerm2 + zsh + oh-my-zsh + powerlevel10k 介绍 iTerm2 是一个MacOS 下的终端模拟器,和其他的终端本质上没啥大不同.但相 ...
- Nacos 2.0源码分析-拦截器机制
温馨提示: 本文内容基于个人学习Nacos 2.0.1版本代码总结而来,因个人理解差异,不保证完全正确.如有理解错误之处欢迎各位拍砖指正,相互学习:转载请注明出处. Nacos服务端在处理健康检查和心 ...