开发者社区> ghost丶桃子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

ios monkey

简介:
+关注继续查看

一、简介        

      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越来越少~~



转载自:http://myeyeofjava.iteye.com/blog/2287822

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
iOS NSInvocation应用与理解
iOS NSInvocation应用与理解
55 0
iOS7应用开发3、Objective-C
【跟随教授的讲解和演示,并重做了课上的demo之后,惊奇地发现自己写的程序有bug,界面上12张卡牌出现后,点击任何一个,其他所有卡牌都会变成一块白板……在经历了长时间的调试之后悲催地发现,在最后的updateUI这个函数中改变背景的函数写错了,setBackgroundImage:写成了setImage:,被这一无脑的失误纠结了这么久,丢人啊……各种bug改完后,前几次课的代码都已经传到博客的资源中了,可到我的资源页下载。
756 0
iOS获取通讯录联系人信息(一)
iOS获取通讯录联系人信息
70 0
1955
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载