一、简介

MonkeyTest 最早是Android自动化测试的一种手段,其原理非常简单,就是利用程序在一段时间内模拟产生一定数量的随机用户操作事件, 如点击、轻扫、长按、旋转屏幕等, 以及一些系统级别的事件,用毫无规律的指令或操作使用被测系统,观察系统的稳定性和容错性能,看我们的App多长时间会出异常。通常也称随机测试或者稳定性测试。iOS的Monkey测试是基于此的一个github开源项目:https://github.com/jonathanpenn/ui-auto-monkey。

二、Monkey开始之前

开始之前,以下几个步骤一定要确认是否正确,否则就是莫名的各种不顺啦。

  • 用来跑monkey的机器一定要Enable UI Automation(设置->开发者),如图:

  • 用来跑monkey的版本,必须为Debug证书编译的Debug版本;
  • 定义类似MONKEY_TEST的宏屏蔽你不想让monkey干的操作,比如:拨打电话、跳出App等;(Optional)

三、Monkey实现原理

我们首先用苹果提供的Instruments—>Automation(安装xcode后就自带了)模板来实现一个屏幕录制的实验;

1、用instruments建立一个Automation模板,如下图:
2、选中你要测试的APP(该APP必须是Debug版本),选中脚本录制,如下图:
3、选择Script,启动录制,这是你在App上的所有操作都会被用JavaScript脚本录制下来,如下图:
      当录制完毕后,在上面Script区域已经记录了一些js代码。这时候,我们点击下面的三角形回放按钮,可以惊奇的看到我们刚才的所有操作都被一模一样的重新演示了一遍。回过神来看看Script区域的代码,其实可以看到我们所有的动作都被js以某种action的方式记录下来,而这些js代码就可以作用于我们测试的机器,来模拟人的一些操作。说到这里我相信要实现上面提到monkey,思路就非常清晰了。

根据上面可知,instruments是提供我们根据javascript脚本来控制我们的App的。那monkey测试就简单啦,random一些我们想要测试的用户事件,这不就OK了么。当然这个事也不需要我们做了,github上的一个开源项目ui-auto-monkey已经帮我们写好啦(https://github.com/jonathanpenn/ui-auto-monkey)。我们直接导入运行,monkey测试就开始啦,如下图,运行完成后导出结果就可以留下痕迹了,而整个monkey测试流程就这样啦。
      
      当然这个是比较传统的了,顶多算是半自动化。用shell脚本调用instruments的shell命令,上诉整个过程就可以全自动化了。官方的monkey js多有的事件概率和执行方式都是可以定制的,下面是我针对我目前项目配置的js代码:

#import "UIAutoMonkey.js"
UIAutoMonkeyClientWillReleaseTheMonkey = true;monkey = new UIAutoMonkey();
monkey.config.minutesToRun = 4 * 60;       // monkey运行4小时
monkey.config.checkTimeEvery = 60;         // check the time every 60 events.
monkey.config.numberOfEvents = false;      // disable event count model;
monkey.config.delayBetweenEvents = 0.05;        // 每一分钟事件触发次数
//monkey.config.screenshotInterval = 5;         // 每间隔多少秒截屏一次
//
// 设置事件权重
monkey.config.eventWeights = {
            tap: 100,
            drag: 20,
            flick: 20,
            pinchOpen: 10,
            pinchClose: 10,
            orientation: 1,
            lock: 0,
            shake: 1,
            deactivate: 1,
            clickVolumeUp: 1,
            clickVolumeDown: 1,};
//
// 设置重复操作概率
monkey.config.touchProbability = {
            longPress: 0.05,
            multipleTaps: 0.05,
            multipleTouches: 0.05};monkey.RELEASE_THE_MONKEY();对应自动跑monkey的shell脚本如下:
#!/bin/bash

APP="xxxxxxxx"                                       # monkey 测试的app
#UDID="fb5995c1c839e0c2fc5942e99dc93076491c3c09"     # monkey 测试设备的UDIDcd "$(dirname "$0")"
mkdir monkey_result
cd monkey_result
for script in `ls ../上面定制的JS文件.js`
doinstruments -w ${UDID} -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate ${APP} -e UIASCRIPT ${script} > monkeyTest.loggrep "Pass" monkeyTest.log > /dev/nullif [ $? -eq 0 ]thenecho "${script} PASS"elseecho "${script} FAIL"../monkey_runfi
done
 

好了将上面官方的UIAutoMonkey.js和上面自己的两个脚本放在同一个文件夹下,运行shell脚本monkey就跑起来了。当然在github上还有很多更NB的工具,不仅全程自动化,还可以生成报表。
1、CrashMonkey: https://github.com/mokemokechicken/CrashMonkey(release安装的monkey版本比较老,crash统计貌似有点问题了);
2、CrashMonkey4IOS:https://github.com/ObornJung/CrashMonkey4IOS(基于CrashMonkey,还有可以直接把crashlog读取出来并符号化,但运行太慢了,实在不能忍受);

monkey大概就介绍这么多吧,希望我们的app crash越来越少~~

【转发】ios monkey相关推荐

  1. 苹果服务器消息转发,iOS 消息推送原理及简单实现

    先说推送的原理,不废话先上图: 875923-20160127202521379-327347831.png 从图中可以很清楚的看出来推送的原理主要分为以下几步: 1.由App向iOS设备发送一个注册 ...

  2. iOS 多态和多继承

    多态 多态 一直是面向对象编程的重要思想.也是OC编程绕不开的话题.自己写代码也经常对这些定义性的东西突然就恍然大明白的感觉.记录每次在在工作中对这些有着明确定义的特性的理解.进入正题. 所谓多态,顾 ...

  3. iOS 分析一次有意思的需求——HTML代码注入

    级别: ★★☆☆☆ 标签:「HTML代码注入」「WKScriptMessageHandler」「iOS与JS交互」 作者: chouheiwa 审校: QiShare团队 有个朋友问了我一个问题: 他 ...

  4. iOS监控-野指针定位

    点击上方"iOS开发",选择"置顶公众号" 关键时刻,第一时间送达! 野指针 当所指向的对象被释放或者收回,但是对该指针没有作任何的修改,以至于该指针仍旧指向已 ...

  5. Android与IOS的相爱相杀之客户端测试

    一.Android Android 是google公司主导的一个开放的手机操作系统,不过目前已经超过了手机的局限,而定位于移动设备的操作系统.目前用于手机,平板,智能电视,智能导航,智能手环,智能眼镜 ...

  6. 奔跑吧!智能Monkey之Fastbot跨平台

    1. 背景 近年来 AI+Test 相关的智能化测试技术,已经逐步成为国内·国际大型互联网公司和各大测试服务提供商的基础能力.其智能化包含测试代码的自动生成.大规模测试结果分析.自动化探索性测试.缺陷 ...

  7. iOS-笔试面试总结

    面试题目涉及: (1) block的本质 2017年5月iOS招人心得(附面试题) 2018年 iOS 面试心得 出一套 iOS 高级面试题 iOS 高级面试题–答案 iOS----BAT网易笔试&a ...

  8. 《大话移动 APP 测试》

    <大话移动 APP 测试> wiki: Software testing 第5章 常用工具介绍和实践 Android.iOS Monkey Android SDK 提供的一个工具:发送伪随 ...

  9. iOS-学习资源看我就够了

    iOS学习视频及资料 懒人demo大全更新至4.0版 (oc + swift) 史上最全iOS 开发工具集合 笔试面试 iOS-笔试面试总结 网络通信 <iOS 对 HTTPS 证书链的验证&g ...

最新文章

  1. Ubuntu16.04 永久修改主机名 hostname
  2. fedora,linux mint 命令行(终端)打开目录
  3. (JavaWeb)Filter过滤器
  4. VTK:隐式选择循环用法实战
  5. Kubernentes
  6. ES6新特性_Symbol的内置属性---JavaScript_ECMAScript_ES6-ES11新特性工作笔记017
  7. 占空比50%的5分频 记事续 20110920
  8. Java事务处理全解析(三)——丑陋的案例
  9. Unix/Linux环境C编程入门教程(20) 搭建基于Mac的 Xcode 与 QT 开发环境
  10. android studio 配置应用生成多个dex
  11. 微信小程序链接wifi
  12. 关于union联合查询
  13. Android开发-Handler引起的内存泄漏-实验、分析、总结。
  14. 【资源汇总】OpenGL
  15. c语言三个数从小到大排序/输出
  16. LAMP-Discuz
  17. 树莓派4B配置ubuntu18.04.5
  18. MYSQL查询大于创建时间一小时的数据
  19. android 初识Fresco
  20. verilog 按键控制LED的亮灭状态

热门文章

  1. 《tensorflow从基础到实战》03 RNN实现mnis图像分类、RNN小demo、RNN时间序列预测
  2. 2.Refused to display ‘http:...‘ in a frame because it set ‘X-Frame-Options‘ to ‘deny‘
  3. [TJOI2009] 猜数字
  4. python初学者的书籍推荐_推荐几本2020年初学者学习Python最佳书籍
  5. 网页游戏服务器应该如何挑选?
  6. POI word合并 设置页眉页脚的处理方案
  7. 新书介绍:iPhoneiPad企业移动应用开发秘籍
  8. c语言windows.h file not found,XCode里遇到 #include XXX.hfile not found的解决方案
  9. Android NDK 编译和 Crash 问题集合
  10. 用java实现微信支付,退款,部分退款服务端