Ios-monkey测试

一,背景

需要在ios上进行monkey测试,通过对比发现以后几个monkey的工具后,采用sjk_swiftmonkey

1.swiftmonkey
       https://github.com/zalando/SwiftMonkey
       直接使用了 苹果的私有 api 如 XCEventGenerator.tapAtTouchLocations 执行速度极快。

      同时也用类似 android monkey 的事件生成机制,自身源源不断的产生如 tap,swipe,pinchIn 等事件使其对被测 app 产生了极大的压力
       缺点:需要插桩

2.XCTestWD
       https://github.com/macacajs/XCTestWD
       在 xcode 中执行 xcuitest 时启动一个监听 server,可通过外部发送命令来创建待测 app 对应 session 并启动 app,

      依据 xpath,id 等来定位某个控件并操作这些控件

3.Fastmonkey
       https://github.com/zhangzhao4444/Fastmonkey
       结合两者优点并改造两者,在 XCTestWD 基础上实现一个 server 路由,外部命令时可引导启动 app 并执行 monkey

缺点:支持xcode8.x,xcode9.x ,xcode10.x,需要更改相应的文件及配置,环境搭建较为复杂

4.sjk_swiftmonkey

https://github.com/lcyfly/sjk_swiftmonkey

二次开发 swiftmonkey,把不支持 10.1 以上的 XCEventGenerator 换成 xctest 的 API,只需修改bundleIdentifier,即可运行,较为方便快捷

二,搭建sjk_swiftmonkey

clone 源码,整体项目结构如图

Monkey: 是程序入口,主要是monkey构造,monkey运行等

MonkeyXCTest: 扩展monkey使用公共的XCTest API来生成事件

MonkeyXCTestPrivate:利用私有API生成各种事件的代码

MonkeyUIAutomation: 利用UIautomation框架来执行各种事件的,但是只支持模拟器

Random: 生成各种随机数的函数


1. 在Signing&Capabilities中修改自己的开发者账号,Bundle Identifier随便改个唯一的字符串

2.jk-monkeyuiTests 里面
let application = XCUIApplication.init(bundleIdentifier: "com.XXX.xxx")

3.点击选择自己的设备,然后Product-->Test就可以运行了

三,Event

在使用monkey的时候,需要添加随机事件。下面介绍几种随机事件,及其在monkey中的占比(权重)

TapAction:点击

LongPressAction:长按

DragAction:拖拽

PinchCloseAction:缩小手势

PinchOpenAction:放大手势

RotateAction:旋转手势

例如:
publicfuncaddDefaultXCTestPrivateActions() {
        addXCTestTapAction(weight: 25)
        addXCTestLongPressAction(weight: 1)
        addXCTestDragAction(weight: 0)
        addXCTestPinchCloseAction(weight: 0)
        addXCTestPinchOpenAction(weight: 0)
        addXCTestRotateAction(weight: 0)
        addXCTestOrientationAction(weight: 1) 
}
 
 
所以monkey的执行过程如下:
 初始化monkey,添加随机事件,设置权重,执行monkey
 

四,插入业务逻辑代码

1.  每次执行event前判断是否增加业务功能代码,直接执行功能代码

2. 插入定时循环事件来执行功能代码,swiftmonkey有两种执行事件的方式,

actRandomly( )  是将添加的随机事件执行
actRegular( ) 是固定间隔执行事件,可以在这里面增加事件,特定的功能逻辑事件
 
 
 

五,导出crash日志

1、第一步将手机连接xcode

2、选择 Device and Simulators

3、选择View Device Logs

4、如果想全部导出 command+A全选之后右键鼠标选择Export Logs

5、如果想删除所有的崩溃日志 同上 鼠标右键 选择Delete Logs

 
参考:https://www.cnblogs.com/dreamyu/p/11280030.html(swiftmonkey 源码剖析及二次开发思路
原文地址:https://www.cnblogs.com/muxs/p/15209366.html