iOS monkeys

简记iOS monkey调研结果。

众所周知,iOS从9.3更换UIAutomation为XCUITest之后,原来那些基于UIAutomation的iOS monkey都不能用了。

macaca monkey

baozhida/iosMonkey
xiaoluosun/iosMonkey

尝试了这两款基于Macaca的monkey,还是有些小问题,执行效率也不够高。

appium monkey

happymff/iosMonkeyAppium

看起来也是从macaca monkey改的。同样效率不高,有小问题。

fastmonkey 【推荐】

(已开源) 基于 XCTestWD,swiftmonkey 二次开发,实现无需插桩的 iOS monkey 自动化工具 fastmonkey
安装使用说明
升级Xcode9、iOS11后的问题
看这三个帖子就够了,会遇到一些问题,帖子中(包括回复)基本能找到答案。

  • 运行说明:

    • build 配置 类似wda
    • 启动server前 执行 iproxy 8001 8001 做手机与mac的端口映射
    • 在xcode中的XCTestWDUITests target 里执行 run the test case 启动server,开始监听8001端口
    • 执行 ‘curl -X POST -H “xx” -d “xx” http ://127.0.0.1:8001/wd/hub/monkey’ ,开始执行monkey
1
2
3
4
5
6
7
XCTestWDMonkeyController.swift 
let monkey = Monkey(frame: app.frame)
monkey.addDefaultXCTestPrivateActions()
monkey.addXCTestTapAlertAction(interval: 100, application: app)
monkey.addXCTestCheckCurrentApp(interval: 10, application: app) # app后台或退出检测
//monkey.addXCTestAppLogin(interval: 50, application: app) # 登陆业务逻辑 50次事件加入1次业务关键点检查,无登陆逻辑可注释
monkey.monkeyAround()
1
2
3
4
5
6
7
8
9
10
MonkeyXCTestPrivate.swift 
public func addDefaultXCTestPrivateActions() {
addXCTestTapAction(weight: 35) #随机点击事件 100-200ms/action
//addXCTestElementTapAction(weight: 10) #基于控件的点击事件 执行概率: 10/(35+10+5) 300-400ms/action
addXCTestLongPressAction(weight: 1)
addXCTestDragAction(weight: 1)
addXCTestPinchCloseAction(weight: 1)
addXCTestPinchOpenAction(weight: 1)
addXCTestRotateAction(weight: 1)
}
  • 总运行时间,总点击次数。action固定间隔,action随机间隔
    Monkey.swift
1
2
3
4
let elapsedTime = n   //设定跑monkey n秒后退出
let actionMax = n //设定跑monkey n个action后退出 (elapsedtime 与actionmax 二选一)
let throttle = n * 1000 // randomize_throttle=false,则每个action之间 sleep throttle( n个毫秒)
let randomize_throttle = false // randomize_throttle=true,则每个action之间 sleep ramdom(throttle) 个毫秒