简介
本篇分析了近期试用的几款iOS自动化测试工具
背景
- 市场背景
- 苹果官方只提供底层库XCUITest,需要开发
- iOS平台自动测试工具少,各大云市场上自动遍历功能都多有限制企业无法自由定制.
- 测试常见问题:
- UI自动化只能覆盖核心业务逻辑,新功能来不及上自动化
- 产品业务测试量较大,新版发布后,老功能来不及全面回归,容易漏测
- 时间长,强度大的工作后,人容易产生疲乏,对数字的位数,文字的显示等错误信息的敏感度下降
- 产品的界面深度很深,且包含大量的展示信息功能
- 专项测试回归难度大:内存泄漏、健壮性测试、弱网等测试太多
这个时候我们需要一种手段,可以达到两方面的目的:
- code less: UI自动化用例维护成本降到最低
- automate: 尽可能的自动化覆盖回归业务
工具对比
SwiftMonkey
SwiftMonkey是一款基于苹果XCTest框架为基础的随机生成操作Action的测试框架,只支持iOS端。
参考链接:SwiftMonkey Github
工作原理介绍
通过代码随机生成操作事件,使用苹果官方XCTest框架执行操作,在Xcode10.1之前使用苹果的私有api 如XCEventGenerator.tapAtTouchLocations 故执行速度极快,在Xcode10.1之后只能使用public API,速度在1秒3-5个操作。
总结
- 优点:
由于monkey在测试过程中的“随机”性,且执行速度快,可以用来做App压力测试 - 缺点:
不满足我们的两个自动遍历需求:可控性和可定制
因为短板明显,用于自动遍历上效果不佳,但是做为压力测试和崩溃检测工具还是不错的。
NoSmoke 2.0
NoSmoke 是一款基于source-XML-tree/OCR 为基础的多端UI自动化测试框架,支持Android iOS。
参考链接:NoSmoke 2.0
工作原理介绍
爬虫程序通过OCR 扫描客户端App 窗口图片对可操作点进行分析,规避了大量的xml 计算成本,从而提升效率.
总结
- 优点:
- 自动遍历App进行UI测试,并提供测试报告
- 可控制,提供拦截钩子,针对特殊的情景自定义操作事件
- 支持多端运行: iOS, Android
- 缺点:
- 使用OCR的扫描方式过于依赖扫描的精准度,且目前使用的工具对中文识别的友好度低,会出现扫描出错,一个句子被截断为数段等情况
由于NoSmoke2.0使用的OCR tesseract对于中文的识别效果不佳导致各种异常,所以目前对于中文app的支持不佳,难以使用。
AppCrawler
一个基于Appium框架的自动遍历app爬虫工具. 支持android和iOS, 支持真机和模拟器. 最大的特点是灵活性. 可通过配置来设定遍历的规则.
参考链接:AppCrawler Github,Appium 介绍
工作原理介绍
框架结构
- appcrawler底层引擎
- appium
- WebDriverAgent
- iOS 9.3 及以上 XCUITest
- iOS 9.3 及以下 UIAutomation
- WebDriverAgent
- appium
appcrawler流程
总结
- 优点:
- 跨平台性:AppCrawler是基于appium开发的,所以支持Android和IOS
- 可控性:对测试的页面,控件类型的选择,测试的深度等都可自由控制
- 可定制:可自定义操作,如输入,滑动等
- 缺点:
- 运行速度较慢:AppCrawler是基于appium开发具备了跨平台的优点,但是也因为这层封装造成了运行速度相对较慢
- 使用门槛高:正因为使用灵活性的问题,也造成了使用门槛的提高,主要基于yaml文件中使用appium的相关技术知识进行配置,这就对使用者有了一定的技术要求