`
MyEyeOfJava
  • 浏览: 1124589 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7af2d6ca-4fe1-3e9a-be85-3f65f7120bd0
测试开发
浏览量:70161
533896eb-dd7b-3cde-b4d3-cc1ce02c1c14
晨记
浏览量:0
社区版块
存档分类
最新评论

【转发】ios monkey

    博客分类:
  • ios
阅读更多

一、简介        

      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,.zip

    一、猕猴 iosMonkey,.zip

    Python-iOS下的MonkeyTest

    iOS下的MonkeyTest

    iOS monkey 自动化工具 fastmonkey

    基于 XCTestWD,swiftmonkey 二次开发,实现无需插桩的 iOS monkey 自动化工具 fastmonkey

    iOS自动化测试工具ios_monkey

    ios_monkey,非常简单好用,可以写逻辑自动化测试,ios_monkey,非常简单好用,可以写逻辑自动化测试

    swift-非插桩iOSMonkey支持控件每秒4-5action事件

    非插桩 iOS Monkey, 支持控件,每秒4-5 action事件

    Android代码-iosMonkey

    iosMonkey 现在客户端是使用同步的方式处理发送的事件,效率稍低 经实测: iPhone 6plus 10.2.1,每分钟可以执行大约40次事件; iPhone 7 10.2,每分钟可执行大约60次事件; 通过修改代码实现了异步http请求,发送...

    monkey4ios:monkey ios测试工具

    CrashMonkey4IOSiOS Monkey Test Tool.###简要说明:支持真机测试、模拟器测试支持收集系统日志(Systemlog)、崩溃日志(Crashlog)、instrument行为日志支持测试报告截图,绘制行为轨迹支持测试设备信息收集使用最新版...

    iOSMonkey:iPhone应用非插装式猴子

    2.运行2.1 xcode手机连接Mac,打开XCTestWD.xcodeproj,xcode中选择刚刚连接的手机,然后在产品->方案中选择XCTestWDUITests,产品->测试就可以运行Monkey测试了 2.2命令行首先,打开一个终端窗口,执行 iproxy 8001...

    iOS Monkey Tool

    大家都知道Android拥有自己的monkey压力测试工具,给我们带来了极大的方便。平时大家一直都在问iOS有没有类似的工具,其实是有的,就会CrashMonkey4iOS。文档详细介绍了环境搭建的方法,以及其过程中遇到的问题。

    IOS消息转发

    ios 消息转发示例 介绍如何使用 转发 和作用等相关信息 并且可以扩展NSObject类别进行异常接收信息

    iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (类,对象,方法,消息传递,消息转发).zip

    iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (类,对象,方法,消息传递,消息转发).zip,iOS开发·runtime原理与实践: 消息转发篇(Message Forwarding) (类,对象,方法,消息传递,消息转发)

    ios runtime消息转发机制

    ios runtime 消息转发机制。主要描述runtime消息发送的三次补救机会。

    iOS消息转发机制在项目中的应用

    深入了解oc中的消息转发机制是很有必要的,希望对你有所帮助

    location驱动ios12.4 ios12.3 ios12.2 ios12.1 ios12.0 ios11.0 ios11.4

    location驱动ios12.4 ios12.3 ios12.2 ios12.1 ios12.0 ios11.0 ios11.4

    iosmonkey:https

    这是iOS应用的monkey test(随机操作测试)工具。 请观看。 CrashMonkey 使用 UIAutomation 和修改后的来操作 iPhone 模拟器。 环境 仅在以下环境中确认。 最大 OS X 10.8.4 Xcode 4.6.3(构建版本 4H1503) Ruby...

    iOS消息转发机制及避免崩溃的解决方案.pdf

    最近研究了一下iOS的消息转发机制,特此做记录,用一个真实的例子让自己理解的更深刻。这个例子会列举方法没有实现而导致崩溃的避免措施,。息的转发分为三步,通过这个例子看一下在每一步的转发中如何避免因为方法...

    iOS moneky

    iOS monkey自动化测试脚本

    iPhone转发工具usbmuxd

    好在大神Nikias Bassen(即@pimskeks5)写了一个可以把本地OSX/Windows端口转发到远程iOS端口的工具usbmuxd16,使我们能够通过USB连接线ssh到iOS中,大大增加了ssh连接的速度,也方便了那些没有WiFi的朋友。...

    ios旧版抓包工具ios旧版抓包工具

    ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧版抓包工具ios旧...

    ios消息转发机制

    ios消息转发机制,用来实现将一个类不能够实现的方法转发出去。

Global site tag (gtag.js) - Google Analytics