压力测试简介

压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。要减少用于测试的资源,可运行一个称为压力器 (stressor) 的工具。

Monkey简介

  • 什么是Monkey test?
    如其名,像猴子一样,虽然什么都不懂,但是可以乱点一通,可以理解为压力测试。在规定的时间或次数范围内做任何随机的操作,随即操作包括点击、滑动……
  • Monkey测试目标:通过模拟用户随机操作时间,暴露应用内Crash,降低Crash率
  • Monkey Test范围预期:除了一些系统设置,我们希望范围维持在待测试应用内,另外可以补充一些中断测试
  • 只能发现Crash,单复现和解决Crash还是需要靠开发人员
  • 暴露所有的Crash不太现实,只能在一定程度上降低Crash

Monkey是Android SDK提供的一个命令行工具(Android平台下一个命令行自动化测试工具),可以运行在模拟器里或实际设备中。 它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:

  • 基本配置选项,如设置尝试的事件数量
  • 运行约束选项,如设置只对单独的一个包进行测试
  • 事件类型和频率
  • 调试选项

在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理(自动停止):

  • 如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。
  • 如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错。
  • 如果应用程序产生了应用程序不响应(ANR:application not responding)的错误,Monkey将会停止并报错。

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件 。

  1. Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar
  2. Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;

这样就可以通过在CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试了

ADB简介

adb的全称为Android Debug Bridge,就是起到调试桥的作用。说白了就是debug工具。

adb是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的android设备(如G1手机).  它的主要功能有:

  • 运行设备的shell(命令行)
  • 管理模拟器或设备的端口映射
  • 计算机和设备之间上传/下载文件
  • 将本地apk软件安装至模拟器或android设备

ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.

异常测试结果

压力测试结果
1.CRASH:崩溃,应用程序在使用过程中,非正常退出
2.ANR(Application Not Responding):等待时间过长

配置ADB环境变量

进入SDK所在的目录,找到SDK,将…\sdk\platform-tools;…\sdk\tools添加到变量值中,再把变量加入path中,这样就可以使用ADB命令了。

压力测试实践

Step 1: 在手机开发者选项中,将USB调试连上
Step 2: 确认手机和电脑已经成功连接 adb devices
Step 3: 安装测试APP adb install package.apk
Step 4: 发送压力测试指令 adb shell monkey 1000(具体事件数)
Step 5: 获取APP包名 adb logcat | findstr start
Step 6: adb shell monkey-p package(包名) 1000(具体事件数)

Monkey高级参数的应用

1) 参数: -p
参数-p用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,Monkey将只允许系统启动指定的APP。如果不指定包,Monkey将允许系统启动设备中的所有APP。

  • 指定一个包: adb shell monkey -p com.ht.weather 100
    说明:com.ht.weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)。
  • 指定多个包:adb shell monkey -p com.ht.weather –p com.ht.pdfreader -p com.ht.photo.widgets 100
  • 不指定包:adb shell monkey 100 说明:Monkey随机启动APP并发送100个随机事件。
  • 要查看设备中所有的包,在CMD窗口中执行以下命令:
adb shellcd data/datals

2) 参数: –throttle <毫秒>
用于指定用户操作(即事件)间的时延,单位是毫秒;

示例:adb shell monkey -p com.ht.weather –throttle 3000 100

3)参数: -s
用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同。

示例: Monkey 测试1:adb shell monkey -p com.ht.weather –s 10 100  Monkey 测试2:adb shell monkey -p com.ht.weather –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的。

4)事件: –pct- + 事件类别 + 事件类别百分比
用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)

–pct-touch +百分比

调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)

adb shell monkey -p com.ht.weather --pct-touch 10 1000

–pct-motion + 百分比

调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)

adb shell monkey -p com.ht.weather --pct-motion 20 1000

–pct-trackball + 百分比

调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)

adb shell monkey -p com.ht.weather --pct-trackball 30 1000

–pct-nav + 百分比

调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

adb shell monkey -p com.ht.weather --pct-nav 40 1000

–pct-majornav + 百分比

调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

adb shell monkey -p com.ht.weather --pct-majornav 50 1000

–pct-syskeys +百分比

调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)

adb shell monkey -p com.ht.weather --pct-syskeys 60 1000

–pct-appswitch + 百分比

调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法

adb shell monkey -p com.ht.weather --pct-appswitch 70 1000

–pct-anyevent + 百分比

调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等

adb shell monkey -p com.ht.weather --pct-anyevent 100 1000

指定多个类型事件的百分比:

adb shell monkey -p com.ht.weather --pct-anyevent 50 --pct-appswitch 50 1000

5) 参数: –ignore-crashes
用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。

示例1:adb shell monkey -p com.ht.weather --ignore-crashes 1000

测试过程中即使Weather程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止;

示例2:adb shell monkey -p com.ht.eather 1000

测试过程中,如果Weather程序崩溃,Monkey将会停止运行。

6) 参数: –ignore-timeouts
用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

Monkey Script

adb shell monkey -f <Scriptfile> <event-count>

ScriptFile是编写的脚本文件。Event-Count是脚本执行的次数。
1、轨迹球事件。

DispatchTrackball(long downtime, long eventide, int action, float x, float y, float pressure, float size, int metastate, float xprecision, float yprecision, int device, int edgeflags)
  • long downtime 是按下的时间。
  • long eventide 是发生的时间。
  • int action 具体的操作动作是“0按下”或是“1弹起”。
  • float x,float y 是触摸的x和y的坐标点。
  • float pressure 是压力事件、大小,范围0-1。
  • float size 是触摸值,范围0-1。
  • int metastate 是当前按下的标识。
  • float xprecision 是x坐标的精确值。
  • float yprecision 是y坐标的精确值。
  • int device 是事件的来源,范围0-x。
  • int edgeflags 是超出屏幕的范围。

2.点击事件

DispatchPointer(long downtime, long eventide, int action, float x, float y, float pressure, float size, int metastate, float xprecision, float yprecision, int device, int edgeflags)

3.输入字符串事件

DispatchString(String text)

4.启动应用

LaunchActivity(package, Activity)

5.等待事件

UserWait(1000)

6.按键事件

DispatchPress(int keycode) #keycode 66 回车键

Monkey Script测试案例

  1. 启动UCAPP
  2. 点击百度
  3. 点击输入框
  4. 输入查询值
  5. 点击键盘的回车
  6. 点击搜索按钮
  7. 等待结果的出现
typ=usercount=10speed=1.0start data >>LaunchActivity(com.UCMobile,com.UCMobile.MainActivity)UserWait(2000)DispatchPointer(10,10,0,280,740,1,1,-1,1,1,0,0)DispatchPointer(10,10,1,280,740,1,1,-1,1,1,0,0)UserWait(2000)DispatchPointer(10,10,0,280,700,1,1,-1,1,1,0,0)DispatchPointer(10,10,1,280,700,1,1,-1,1,1,0,0)DispatchString(test)UserWait(1000)DispatchPress(66)UserWait(1000)DispatchPointer(10,10,0,880,600,1,1,-1,1,1,0,0)DispatchPointer(10,10,1,880,600,1,1,-1,1,1,0,0)UserWait(6000)

在SDK目录下的tools有工具uiautomatorviewer.bat可以查看手机页面的分布情况。UI Automator Viewer。在手机启动app需在Androidmanifest.xml中设置exported=”true”。可被外界启动。

adb shellcd ../../monkey -f xx.script 
adb shell monkey -f ../../xx.script count>

两种都可执行.script文件

ADB命令大全

1.查看设备

adb devices

这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示。

2.安装软件

adb install <apk文件路径>

这个命令将指定的apk文件安装到设备上。

3.卸载软件

adb uninstall <软件名>adb uninstall -k <软件名>

如果加 -k 参数,为卸载软件但是保留配置和缓存文件。

4.登录设备shell

adb shelladb shell <command命令>

这个命令将登录设备的shell.
后面加command命令将是直接运行设备命令, 相当于执行远程命令。

5.从电脑上发送文件到设备

 adb push <本地路径> <远程路径>

用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)。

6.从设备上下载文件到电脑

adb pull <远程路径> <本地路径>

用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑。

7.显示帮助信息

adb help

这个命令将显示帮助信息。

8.在命令行中查看LOG信息

adb logcat -s 标签名

9.启动Activity

adb shell am start -n 包名/包名 + 类名

10.列出手机装的所有app的包名

adb shell pm list packages

11.列出系统应用的所有包名

adb shell pm list packages -s

12.列出除了系统应用的第三方应用包名

adb shell pm list packages -3

13.使用 findstr 来过滤

adb shell pm list packages | findstr qq

14.清除应用数据与缓存

有些时候我们测试需要清除数据与缓存,则需要用到如下命令:

adb shell pm clear 

15.强制停止应用

adb shell am force-stop <packagename>

16.查看日志

adb logcat

17.重启

adb reboot

18.获取序列号

adb get-serialno

19.获取 MAC 地址

adb shell  cat /sys/class/net/wlan0/address

20.查看设备型号

adb shell getprop ro.product.model

21.查看 Android 系统版本

adb shell getprop ro.build.version.release

22.查看屏幕分辨率

adb shell wm size

23.查看屏幕密度

adb shell wm density

结束语:本文仅用来学习记录,参考查阅。

更多相关文章

  1. Android事件处理模型一(基于回调机制的事件处理)
  2. Android图解浅析事件拦截机制
  3. Android(安卓)RxJava实际应用案例讲解:使用RxJava的最佳开发场景
  4. Android之判断设备网络连接状态,并判断连接方式
  5. AndroidUI学习
  6. 获取Android设备唯一标识码以及其他信息
  7. Android(安卓)Q Beta 6 终极测试版发布!
  8. NFC钥匙扣对于iPhone和Android设备从中国RFID
  9. 为日渐成熟的Android设计App

随机推荐

  1. 浅谈Android四大组件之ContentProvider
  2. Android(安卓)不规则封闭区域填充 手指秒
  3. Android(安卓)2D游戏引擎AndEngine配置环
  4. Android(安卓)TV HDMI开发
  5. Android实现拍照及图片显示效果
  6. 安卓广播的静态注册和动态注册
  7. android里的Cursor类介绍
  8. Android(安卓)9.0 Phone对象解析
  9. mobAndroid免费验证短信
  10. 关于Android实现滑动返回的几种方法总结