iOS 稳定性测试业界做的比较少,因为 iOS 没有提供类似 google 的那种 Monkey 工具,在实际的项目中也需要对 iOS 进行稳定性测试,所以进行了一番调研.先后使用了一些工具到自己开发的工具,从中也学到了不少知识.本文就介绍下,使用 iOSMonkey 的一些心得.
Fastmonkey
Fastmonkey 由 zhangzhao4444 大神开发,基于 Swift 开发,支持非插桩 monkey 点击事件、app 后台或退出检测等操作,前期使用 Fastmonkey 大概 4 个月左右,但是后来运行的电脑 xcode 升级到了 9.4,就再也跑不起来了,进行了一番折腾最终也没找到解决方案,
所以后来就放弃使用了.但是不得不说这个工具点击速度还是很快的而且使用简单,可惜作者使用的 Swift 语言开发,对于二次开发有些难度.
git 地址和学习帖
https://github.com/zhangzhao4444/Fastmonkey
https://testerhome.com/topics/9524
macaca 版本的 Monkey
通过同事介绍学习了 macaca 版本的 iosMonkey,运行速度较快,可以模拟点击时事件、滑动、输入等操作.
但是使用过程中发现,最新版本的 macaca 底层使用的 xctestwd,并发多设备的时候,只能运行一个设备,google 了一番 xctestwd 对多设备兼容不好.不过开过了作者的源码,对我后来使用 appium 开发 monkey 有很大的帮助.
git 地址和学习帖
https://github.com/baozhida/iosMonkey
https://testerhome.com/topics/8025
可模拟多种操作
需要支持滑动、点击操作、输入、后退等操作,来模拟大量随机操作,这块的代码是翻译的 macaca 版本的 Monkey.
多设备并发
通过配置不同 wda 端口和 appium 端口来实现多设备并发
可查看操作轨迹
每步骤截图一张并标记坐标,最终把所有截图合并成一张 gif 图.
可查询崩溃
Monkey 的主要功能还是发现 crash,所以在结束后查询是否存在崩溃并发送邮件.
支持自定义用例
在执行 monekey 前,通过配置自定义用例,来先进行登录.
支持生成性能文件
可生成运行期间的性能文件.
config文件中配置数据:
UDID: "606EC265-1ED8-454D-AF80-BEB78A417B55" #设备udid
BUNDLEID: "com.iOS.Demo" #app的bundle id
TIMING: "1" #运行时间,单位分钟
PORT: "3460" #appium端口
PROXYPORT: "5680" #WDA端口
NeedScreenshot: "true" #是否截图, true是截图
ScreenshotFolder: "~/iOSMonkey" #截图目录
VERBOSE: "true" # 打印日志
TRACEPATH: "~/iOSMonkey" # 性能文件路径
AppiumLogFolder: "~/iOSMonkey" # appiumlog文件路径
TestCase: "/Users/xinxi/Desktop/iOSMonkey/testcase.yaml" # 测试用例文件,可选项
因为有些 app 是启动以后必须登录,可以通过自定义用例,先进行登录操作再执行 monkey 操作.
需要在 config 配置文件中配置用例地址
TestCase: "/Users/xinxi/Desktop/iOSMonkey/testcase.yaml"
用例配置如下
testcase:
casename: "case1"
steps:
- when: "name;Action Sheets"
by: "name;Action Sheets"
action: "click"
sleeptime: "500"
- when: "name;Other"
by: "name;Other"
action: "click"
sleeptime: "500"
在项目根目录执行mvn install,cd到target目录下.
config.yam文件是上面介绍的配置文件
执行java -jar iOSMonkey-1.0.jar -f ~/config.yam
测试 app 可以 clone 这个项目https://github.com/appium/ios-uicatalog,在本地编译.
生成 trace.zip 文件,解压该文件并且双击点击该文件,会生产 cpu 使用率走势图
把所有运行步骤截图合成一份 gif 图,方便出现 crash 定位复现步骤.
因为实际项目中使用的模拟器进行测试,所以代码中查崩溃日志是用的模拟器的崩溃文件地址,后续会兼容一下真机.使用上并没有其他差别.