移动端的自动化测试,最常见的是 Android 自动化测试,我个人觉得 Android 的测试优先级会更高,也更开放,更容易测试;而 iOS 相较于 Android 要安全稳定的多,但也是一个必须测试的方向,这个系列文章记录了 iOS 自动化测试的一些实践。
1.环境准备
1.1 硬件环境
Macbook Pro(做 iOS 测试,Mac 是绕不开的,我们依赖的软件环境需要运行在 Mac 上,必须要有一台 Mac 本(很贵),得攒银子咬牙买一台 😓~,如果预算紧张,也可以考虑先买一个 Macmini)。
iPhone、iPad:既然测试 iOS 软件,那 iPhone 和 iPad 也自然不用多说了,虽然 Xcode 里有虚拟机,但是实际测试还是以真机为准。
1.2 软件环境
Xcode:Xcode是苹果官方提供的开发IDE,里面集成了苹果软件开发所需的所有,包括专项的性能测试等,我们做自动化也需要通过它来与设备绑定证书
Xcode 下载地址:https://developer.apple.com/download/
下载安装好的图标如下 :
依赖工具包
- brew install --HEAD ideviceinstaller
- brew install --HEAD libimobiledevice
- brew install ios-deploy
- brew install carthage
xocode相关
- bundle identifier:类似于android的包名,如果本地调试可以随便填写,如果要发布则不能随便填写。
- signing:签名需要证书才能构建编译,在模拟器和真机上运行。
- .app文件:项目编译后生成的项目打包代码,其实是一个目录,zip文件
- .ipa文件:经过签名后的打包文件,本质是一个zip文件
2.技术方案
2.1 主流框架
先来看目前主流的 iOS 移动测试框架
Appium :目前最常用的 App 自动化测试框架,具备跨平台性
Calabash-IOS :BDD 模式,没有过多的了解使用
KIF :KIF 使用 XCTest 框架,需要对 Objective—C 、Swift 和 XCTest 掌握程度较高,这个对测试工程师来说学习成本太大
XCTest :苹果官方提供的 iOS 测试框架,要求同 KIF 一致
WebDriverAgent :由 Facebook 推出的一款 iOS 移动测试框架,也是 Appium 跨平台的底层驱动;WDA 本身也是一个完整的基于 webdriver 协议的框架
Uiautomation :在 Xcode8 后废弃
2.2方案选型
之前的 Android 自动化我们选择的是 Appium 框架作为底层的驱动框架,当时就介绍说 Appium 的优点之一就是跨平台性,其实也就是因为其底层封装了 WebDriverAgent,而我们期望的是:
做一套可以跨平台支持的 App 测试方案,可以在公司的 Android 和 iOS 版本间自由切换测试
并且在编程语言上要是测试工程师常用的 Java 或 Python,降低学习成本
综上原因,那么最终的选择依然是 Appium。
3.落地实践(踩坑)
3.1 App安装
Appium 官方提供了一个演练的 iOS App,以此为例进行演示。
Appium 演练 example 地址:
https://github.com/appium/ios-uicatalog
将项目 clone 到本地后用 Xcode 打开,注意打开 iOS 项目要打开以 .xcodeproj 结尾的文件 。
插入真机,Xcode 上选择真机,在Singing 中添加 AppleID 作为 account,生成一个本地的 Provisioning Profile 和设备上的证书
踩坑 :你可能会遇到如下的错误信息
这是因为你的 bundle identifier 不唯一导致,将其修改自定义为一个唯一的 bundle identifier 再尝试即可
Xcode 中选中 Build,Success 后在手机中我们可以看到 UICatalog 已经被成功安装,尝试打开:
踩坑: 苹果对未在 AppStore 中上架的 App 做了限制,默认不受信任,所以我们需要手动将其设置为信任: 设置-通用-描述文件与设备管理
这个时候再打开 App,就可以正常操作运行了
3.2 环境配置
上面介绍了这里是选中 Appium 作为移动测试框架,因此 Appium 相关环境的安装必不可少,具体安装细节可参考另一篇文章:Windows(Win10)、Mac下安装 Appium
另外还需要几个辅助测试工具和命令,依赖工具包安装:
brew install --HEAD ideviceinstaller
brew install --HEAD libimobiledevice
查看模拟器列表:instruments -s devices
运行结果如下,可以看到最前面两行显示的其实是本机的 Mac 和连接的 iPhone 真机,剩下的是模拟器。
chenshifengdeMacBook-Pro:others chenshifeng$ instruments -s devices
`instruments` is now deprecated in favor of 'xcrun xctrace