一、简介
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 测试设备的UDID
cd "$(dirname "$0")"
mkdir monkey_result
cd monkey_result
for script in `ls ../上面定制的JS文件.js`
do
instruments -w ${UDID} -t /Applications/Xcode.app/Contents/Applications/Instruments.app/Contents/PlugIns/AutomationInstrument.xrplugin/Contents/Resources/Automation.tracetemplate ${APP} -e UIASCRIPT ${script} > monkeyTest.log
grep "Pass" monkeyTest.log > /dev/null
if [ $? -eq 0 ]
then
echo "${script} PASS"
else
echo "${script} FAIL"
../monkey_run
fi
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越来越少~~
相关推荐
【iosMonkey】是一个开源项目,主要针对iOS平台,它的设计灵感来源于Android的Monkey测试工具,旨在帮助开发者进行自动化UI测试。Monkey测试是一种随机的黑盒测试方法,它模拟用户在设备上快速、随机地进行操作,...
`ios_monkey`是一个专为iOS设计的自动化测试工具,它简化了编写和执行逻辑自动化测试的过程。本篇文章将深入探讨`ios_monkey`的功能、使用方法以及它如何助力iOS应用的测试。 `ios_monkey`的主要功能是模拟用户在...
MonkeyTest 是一种自动化测试方法,尤其在iOS应用开发中被广泛应用。它主要通过模拟用户随机、无序的操作来检测应用程序的稳定性和健壮性。在Python开发中,我们可以利用Python的强大功能来构建iOS的MonkeyTest工具...
传统的Monkey测试通常会遍历UI元素并随机触发事件,但“非插桩iOS Monkey”更进一步,它能够支持控件级别的事件模拟,这意味着它可以精确地模拟用户与界面元素的交互,如点击按钮、滑动列表等。 Monkey测试的核心...
【iOS Monkey 自动化工具 FastMonkey】是一种基于 Xcode 的测试框架 XCTestWD 进行二次开发的自动化测试工具。在 iOS 应用测试领域,Monkey 测试是一种常用的随机输入法,用于模拟用户的各种随机操作,以此来检测...
iosMonkey 现在客户端是使用同步的方式处理发送的事件,效率稍低 经实测: iPhone 6plus 10.2.1,每分钟可以执行大约40次事件; iPhone 7 10.2,每分钟可执行大约60次事件; 通过修改代码实现了异步http请求,发送...
iOS Monkey Tool,也被称为CrashMonkey4iOS,是一种针对iOS设备的压力测试工具,类似于Android的Monkey测试工具。这种工具能够自动模拟用户的各种随机操作,帮助开发者发现应用在高强度使用下的潜在问题和稳定性问题...
CrashMonkey4IOSiOS Monkey Test Tool.###简要说明:支持真机测试、模拟器测试支持收集系统日志(Systemlog)、崩溃日志(Crashlog)、instrument行为日志支持测试报告截图,绘制行为轨迹支持测试设备信息收集使用最新版...
2.运行2.1 xcode手机连接Mac,打开XCTestWD.xcodeproj,xcode中选择刚刚连接的手机,然后在产品->方案中选择XCTestWDUITests,产品->测试就可以运行Monkey测试了 2.2命令行首先,打开一个终端窗口,执行 iproxy 8001...
本资料包“基于appium框架开发的iOS端Money工具.zip”显然是针对iOS应用的自动化测试,特别是财务类应用的测试工具,其核心内容是名为"IOSMonkey-master"的项目。 "iOSMonkey"通常是指一个基于Appium的随机事件生成...
iOS的消息转发机制是Objective-C(OC)语言中一个至关重要的特性,它允许对象在接收到无法响应的消息时有机会处理或转发这些消息。这一机制对于理解OC的动态性以及解决一些特定问题,如方法的动态绑定、类的扩展等,...
在iOS开发中,消息转发(Message Forwarding)是Objective-C中的一个重要机制,它允许对象处理那些它不直接响应的消息。这个机制使得类可以捕获并处理未知的消息,从而增加了程序的灵活性和健壮性。本篇文章将深入...
本文将深入探讨“ios runtime消息转发机制”,理解这个机制对于优化代码、解决潜在问题以及实现高级功能至关重要。 消息转发是Objective-C运行时系统的一个关键组成部分,它在对象接收到无法识别的消息时提供了一种...
好在大神Nikias Bassen(即@pimskeks5)写了一个可以把本地OSX/Windows端口转发到远程iOS端口的工具usbmuxd16,使我们能够通过USB连接线ssh到iOS中,大大增加了ssh连接的速度,也方便了那些没有WiFi的朋友。...
iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (类,对象,方法,消息传递,消息转发).zip,iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (类,对象,方法,消息传递,消息转发)
iOS的消息转发机制是Objective-C运行时系统中一个关键特性,它允许对象在接收到未实现的方法调用时,有机会去处理或转发这个消息,从而防止程序因无法识别选择子(selector)而崩溃。这一机制主要包含三个步骤: 1....
在iOS开发中,消息转发机制是Objective-C运行时(Runtime)系统的一个重要特性,它使得对象在接收到无法响应的消息时,有机会进行处理,而不是直接抛出“未定义选择子”(Undefined selector)的错误。这个机制提高...
本文将详细探讨“iOS runtimeIMP指针和消息转发机制Demo”中的核心概念,包括Runtime、IMP指针以及消息转发机制,并通过一个名为`MethodSwizzlingIMPdemo`的示例来阐述它们的实际应用。 1. **Runtime(运行时)**:...
这是iOS应用的monkey test(随机操作测试)工具。 请观看。 CrashMonkey 使用 UIAutomation 和修改后的来操作 iPhone 模拟器。 环境 仅在以下环境中确认。 最大 OS X 10.8.4 Xcode 4.6.3(构建版本 4H1503) Ruby...
iOS monkey自动化测试脚本