IOS上的monkey测试探索(一)
应领导要求,需要我提供一个IOS端app稳定性测试的解决方案,于是我这个对IOS了解仅限于日常使用的小白开始了探索之路。
经过调研我的心拔凉拔凉的,使用Python加Android系统内置的monkey包再加ADB命令,很容易能写个用于Android端APP的稳定性测试的工具。但是IOS端没有这些便利条件,可能是苹果对于自家产品很自信,觉得不需要这些吧。但是领导安排的任务还是得想办法完成啊,于是开始逛各大社区。学习大佬的经验之后总结了以下几个可以(或者曾经可以)用于IOS端APP稳定性测试的方案。
1、基于 UIAutomation 的 monkey
Git:https://github.com/jonathanpenn/ui-auto-monkey
这个应该是最早用来做IOS端monkey测试的工具,使用JavaScript来驱动应用程序用户界面。但是随着iOS 和 Xcode 升级之后,UIAutomation 框架被砍掉了,只适用于Xcode7.x之前的版本,这个项目目前已弃用。
2、基于 XCUITesting 框架的 SwiftMonkey
Git:https://github.com/zalando/SwiftMonkey
基于XCTest测试框架,调用私有api XCEventGenerator,但是Xcode10.1以上XCTestFramework已经去掉了这个API,而且需要插装到源码中,所以需要进行二次开发才能正常使用。
3、FastMonkey
Git:https://github.com/zhangzhao4444/Fastmonkey
Fastmonkey是zhangzhao大神基于 XCTestWD和swiftmonkey 二次开发的用于IOSmonkey测试的工具,不需要插装,高效率,每秒可执行4-5个action!刚看到的时候很兴奋,这正是我想要的,但是后面发现只支持Xcode 8.x和9.x的版本,而且zhangzhao大神的GitHub已经一年没有动静了,等zhangzhao大神适配最新的Xcode版本也不太现实。
4、sjk_swiftmonkey
Git:https://github.com/lcyfly/sjk_swiftmonkey
sjk_swiftmonkey是lcyfiy前辈基于swiftmonkey二次开发的,不需要插装,且支持Xcode 11.X。
由于我们项目是在Xcode11.X的版本上开发的,所以选择了sjk_swiftmonkey。我自己简单试了下,在Xcode11.7版本运行正常,但是不知道是不是我配置的问题,感觉效率不太理想,一个action大概需要1-5秒。不过现在没有更好的选择,可以先用着,后续看能不能改进一下,或者使用WDA自己实现。
下面简单介绍下sjk_swiftmonkey搭建和配置
首先从https://github.com/lcyfly/sjk_swiftmonkey拉取代码,用Xcode打开。主要目录结构如下
Monkey: 是程序入口,主要是monkey构造,monkey运行等
MonkeyXCTest: 看注释的话本来是要扩展monkey使用公共的XCTest API来生成事件的,但是没写。。。
MonkeyXCTestPrivate:这块才是利用私有API生成各种事件的代码
MonkeyUIAutomation: 这块是利用UIautomation框架来执行各种事件的,但是只支持模拟器
Random: 这块是生成各种随机数的函数
参考https://www.cnblogs.com/dreamyu/p/11280030.html,这是lcyfiy前辈二次开发的介绍。
打开之后修改sjk_monkeyUITests文件第13行,com.yourbundleid改为你自己要测试的app的bundleid,
最下面可以修改需要执行的时间次数和事件间隔时间。
然后在Signing&Capabilities中修改自己的开发者账号:Team-->add,注意:红色圈住的三个文件都要改
Bundle Identifier随便改个唯一的字符串
改完之后点击Generic ios Device选择自己的设备,然后Product-->Test就可以运行了
Build之后执行测试的时候可能会报下面的错误,
Failure Reason: ZM iPhone has denied the launch request.
Internal launch error: process launch failed: The operation couldn’t be completed. Unable to launch com.sanjieke.sjk-monkeyUITests.xctrunner because it has an invalid code signature, inadequate entitlements or its profile has not been explicitly trusted by the user.
解决方式:打开被测设备的设置-->通用-->设备管理-->信任。
本文地址:https://blog.csdn.net/weixin_43843008/article/details/108620640
推荐阅读
-
知乎上的一个怎么面试iOS工程师的问题
-
一个iOS上的秒表小应用的实现方法分享
-
iOS尝试用测试驱动的方法开发一个列表模块【五】
-
IOS上的monkey测试探索(一)
-
[bug]android monkey命令在Android N和Android O上的一点差异发现
-
得瑟一下测试上的事。 UseCaseTest
-
知乎上的一个怎么面试iOS工程师的问题
-
iOS AddressPickerView地址选择器,支持省份,省市,省市区,也支持打开显示上一次选择的地址【回调参数包括选中的省(provinceId)、市ID(cityId)区ID(areaid】
-
一个iOS上的秒表小应用的实现方法分享
-
一个测试过往PHP版本在新的PHP 5.3上是否兼容的工具