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 源码,整体项目结构如图

Ios-monkey测试

 

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

MonkeyXCTest: 看注释的话本来是要扩展monkey使用公共的XCTest API来生成事件的,但是没写。。。

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

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

Random: 这块是生成各种随机数的函数

 

Ios-monkey测试
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( ) 是固定间隔执行事件,可以在这里面增加事件,特定的功能逻辑事件
 
 
参考:https://www.cnblogs.com/dreamyu/p/11280030.html(swiftmonkey 源码剖析及二次开发思路
 

Ios-monkey测试

上一篇:什么叫 CC 攻击?什么叫 DDOS 攻击?


下一篇:centos7下安装mysql5.7