您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
monkey工具详解
 
作者:叫我小菲菲
   次浏览      
2020-4-26
 
编辑推荐:
本文主要介绍什么是monkey,monkey在哪里以及如何准备测试环境最终分析实践结果,希望能对您有所帮助。
本文来自于CSDN,由火龙果软件Alice编辑、推荐。

第一部分:背景

1.为什么要开展压力测试?

提高产品的稳定性

提高产品的留存率

2.什么时候开始压力测试?

首轮功能测试通过后

下班后的夜间进行

第二部分:理论

1.什么是monkey?

Monkey是发送伪随机用户事件的工具;

2.monkey在那里?

在手机系统里,为了跟monkey进行通信,要借用adb

3.什么是adb?

Android debgu bridge

monkeyScript

4.什么是MonkeyScript?

monkeyScript是一组可以被monkey识别的命令集合

Monkeyscript可以完成重复固定的操作;

monkeyRunner

5.什么是monkeyRunner

monkeyRunner提供了一系列的API

monkeyRunner可以完成模拟事件及截图操作

6.monkey和monkeyRunner的区别

Monkey:在adb shell中,生成用户或系统的伪随机事件;

monkeyRunner:通过API定义特定命令和事件控制设备;

7.monkeyRunner APIs

monkeyRunner:用来连接设备或模拟器

monkeyDevice:提供安装、卸载应用,发送模拟事件;

monkeyImage:完成图像保存,以及对比的操作;

8.monkeyrunner的 测试类型

多设备控制 功能测试 回归测试

9.压力测试结果

1)crash:崩溃,应用程序在使用中非正常退出;

2)Anr:application not responding无响应

第三部分:实践

1.准备测试环境

准备Android sdk环境

http://www.android-studio.org/

准备Python环境

https://www.python.org/downloads/2.7

2.一个app的压测实践

压测过程step1

在手机开发者选项中,将usb调试选上

压测过程Step2

确认手机和电脑已经成功连接 使用命令adb devices 进行确认

压测过程Step3

安装测试app,使用命令adb install package.apk

压测过程Step4

发送压测指令,使用adb shell monkey 1000

1000告诉monkey帮助完成1000个指令,包括home键,滑屏减等等;

压测过程Step5

获取app包名,使用命令adb logcat|grep START

|在Linux下代表把上一个命令的输出作为下一个命令的输入

Grep start表示抓取日志中包含有start标签的输出

###查找包名和activity

A. Windows上使用adb logcat | find /I "START" 查找

B.清除logcat内容,使用命令adb logcat -c

启动logcat,使用命令adb logcat AcitivityManager:I*:s

启动查看程序

C. Adb logcat >d:/111.log

D:adb -s LE67A06140256238 shell pm list packages | find /I "LETV"

压测过程Step6

给指定包打压力

Adb shell monkey -p package 1000

3.monkey高级参数的应用

1)throttle参数

指定事件之间的间隔(毫秒)

Adb shell monkey --throttle <milliseconds>

2)seed参数

指定随机生成数的seed值,如果两次seed值一样那操作结果也是一样的

Adb shell monkey -s <seed> <event-count>

Adb shell monkey -s 100 50 seed值为100,执行50个事件

3)触摸事件(只要求monkey完成点击事件,滑动,音量键,主导行键)

设定触摸事件百分百

Adb shell monkey --pct-touch <percent>

再此基础上添加-v参数会把做的事件都列出来

Adb shell monkey -v -p 包名 --pct-touch 100 99 占百分百的点击事件,完成99事件

事件都是成对出现的

4)动作事件

设定动作事件百分比(这里的百分比和其他事件的百分比之和要等于100,如果不等于100就会把剩余部分的比例进行随机操作)

Adb shell monkey --pct-motion<percent>

Adb shell monkey -v -p 包名 --pct-touch 50 --pct-motion 30 100 touch事件50%,motion事件30%,执行100个事件

Adb shell monkey -v -p 包名 --pct-touch 50 --pct-motion 50 100

5)轨迹球事件

设定轨迹球事件百分比

Adb shell monkey --pct-trackball <percent>

6)基本导航事件

设定基本导航事件百分比,输入设备的上下左右

Adb shell monkey --pct-nav <percent>

7)主要导航事件(软件盘上的导航键)

设定主要导航事件百分比,兼容中间键,返回键,菜单按键

Adb shell monkey --pct-majornav <percent>

8)系统导航事件(跟硬件相关)

设定系统导航事件百分比,home,back,拨号,音量键

9)启动activity事件

设定启动activity的事件百分比

Adb shell monkey --pct-appswitch <percent>

10)不常用事件

设定不常用事件的百分比

Adb shell monkey --pct-anyevent <percent>

11)崩溃事件

忽略崩溃和异常

Adb shell monkey --ignore-crashes <event-count>

12)超时事件anr

忽略超时事件,知道完成指定的事件数

Adb shell monkey --ignore-timeouts <event-count>

Adb shell monkey -v -p 包名 --pct-touch 50 --pct-motion 50 --ignore-crashes

--ignore-timeouts 100 如果出现anr和crash继续完成知道完成100个事件

4.crash结果分析

实践过程:

Step1:安装可以引起crash的app

Adb install apk.apk

Step2:执行压力命令

adb logcat | grep START 点下要测试的app会输出包名

Adb shell monkey -p包名 1000

Step3:分析crash的exception信息

把这些crash信息发给研发;

重现问题使用seed值:Adb shell monkey -p包名 -s 1468814836964 1000

如果使用忽略anr和crash时没有seed值;

5.anr结果分析

实践过程

Step1:安装可以引起anr的app

Step2:执行压力命令

Step3:分析anr的exception信息

手动找到anrlog的信息

Adb shell 进入手机

Cd /data/anr/ 有一个traces.txt

如果出现anr了会抛出一条信息,这条信息会在traces.TXT的最上面部分

重要:

1.adb无法使用,提示error:unknown host service的解决办法,需要辨别电脑的5037端口被哪个应用程序占用的方法:(使用adb时需要5037端口是空闲的)

1)打开命令行,输入命令:netstat -ano |findstr "5037"

2)tasklist /fi "pid eq 6728"

3)taskkill /pid 6728 /f 可停止占用的进程

 
   
次浏览       
相关文章

深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
相关文档

重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
相关课程

基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]
 
最新文章
Flutter-你还在滥用StatefulWidget吗
移动APP安全测试要点
深入浅出 Kotlin 协程
iOS 组件化 —— 路由设计思路分析
移动端跨平台开发的深度解析
最新课程
Android高级移动应用程序开发
Android应用开发
Android系统开发
Android应用高级开发
移动互联网应用开发(iOS,Android,HTML5)
更多...   
成功案例
北京 iOS开发技术深入研究
某企业 Android高级移动应用程序开发
中体彩 Android产品级测试
移动通信 移动互联网应用开发原理
某电力行 android开发平台最佳
更多...