App稳定性测试与小程序测试(下篇)

App稳定性测试与小程序测试(下篇)2 Monkey稳定性测试2.1什么是稳定性测试?通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行。2.2Monkey是什么?

大家好,欢迎来到IT知识分享网。

2 Monkey稳定性测试

2.1什么是稳定性测试?

通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行。

2.2Monkey是什么?

Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行测试,检测程序多久的时间会发生异常。和MonkeyRunner几乎是完全不同的,MonkeyRunner相当于是搞自动化测试的了

官方介绍:

https://developer.android.com/studio/test/monkey.html

2.3Monkey介绍

Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar

Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

Monkey 命令启动方式

①可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试

②在PC上adb shell 进入Android系统,通过执行monkey {+命令参数} 来进行Monkey 测试

③在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

④查看被测app包名:adb shell pm list packages

App稳定性测试与小程序测试(下篇)

2.4Monkey架构

App稳定性测试与小程序测试(下篇)

2.5Monkey弱点

Monkey虽然可以根据一个指定的命令脚本发送按键消息,但不支持条件判断,不支持读取待测界面的信息来执行验证操作。

2.6Monkey压力测试参数

App稳定性测试与小程序测试(下篇)

那么这个option通常又分为4大类:常用选项,事件选项,约束选项,调试选项

①常用选项的参数通常有:

-v 用于反馈信息级别(一个-v表示一个层级,两个-v表示两个层级,通常最多三个-v)

示例Level0:

adb shell monkey -p com.swartz.cicada –v 100

说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息 相应源代码如图所示了,这十分有利于调试了

示例Level1:

adb shell monkey -p com.swartz.cicada -v-v 100

说明

提供较为详细的日志,包括每个发送到Activity的事件信息

示例Level2:

adb shell monkey -p com.swartz.cicada -v-v-v 100

说明

最详细的日志,包括了测试中选中/未选中的Activity信息

②时间选项的参数通常有:

-s 表示伪随机数生成的seed值,如果seed值相同,则两次monkey所产生的事件序列也是一样的

示例:

Monkey测试1:adb shell monkey -p com.swartz.cicada –s 10 100

Monkey 测试2:adb shell monkey -p com.swartz.cicada –s 10 100

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

–throttle:每个事件结束后的间隔时间

③约束选项的参数通常有:

-p 指定文件名

count 指定要发送的事件数

-c 用此参数指定一个或几个类别,activity必须指定一个category,才能被启动,否则将会启动不了

④调试选项的参数通常有:

–dbg-no-events:初始化启动的activity,但是不产生任何事件。

–hprof:指定该项后在事件序列发送前后会立即生成分析报告

–ignore-crashes:忽略崩溃

–ignore-timeouts:忽略超时

–ignore-security-exceptions:忽略安全异常

–kill-process-after-error:发生错误后直接杀掉进程

–monitor-native-crashes:跟踪本地方法的崩溃问题

工作中为了保证测试数量的完整进行,我们一般不会在发生错误时立刻退出压力测试。monkey 测试命令如下:

adb shell monkey -p com.swartz.cicada -s 500 –ignore-crashes –ignore-timeouts –monitor-native-crashes -v -v 10000 > E:\monkey_log\20170831.txt

kill此参数用来杀掉进程:kill pid 先执行adb shell 再ps |grep monkey 查询结果如下图中15248 即为PID 在kill pid(15248)即可

App稳定性测试与小程序测试(下篇)

例子:

adb shell monkey -p com.tpnet.hlquery –throttle 100 –pct-touch 50 –pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt

测试com.tpnet.hlquery这个app,间隔100毫秒,50%的触摸事件,50%

的滑动事件,三个-v输出详细的日志,执行1000个事件,日志输出到c:\monkeytest.txt

ps: 命令运行前手机先解锁,win8 以上要用管理员身份打开cmd。

2.7Monkey结果分析

①初步分析方法:

Monkey: seed=20 count=100 –随机种子和运行次数

:AllowPackage: com.swartz.cicada –指定的测试包

:IncludeCategory: android.intent.category.LAUNCHER –Category包含LAUNCHER

:IncludeCategory: android.intent.category.MONKEY –Category包含MONKEY

// Selecting main activities from category android.intent.category.LAUNCHER

// + Using main activity com.swartz.cicada.LauncherActivity (from package com.swartz.cicada)

// Selecting main activities from category android.intent.category.MONKEY –查询结果列表

// Seeded: 20 –随机种子

// Event percentages:

// 0: 15.0% –事件0 为touch事件,就是相当于按下之后弹起来的一个动作

// 1: 10.0% –事件1 为motion,相当于说从起始点到终点有移动了多少步,就是步骤数量

// 2: 2.0% –事件2 为pinchzoom,为两个手指有同时按下去后,都向中间移动后up起来,相当于一个缩放的动作。

// 3: 15.0% –事件3 为trackball,为轨迹球事件

// 4: -0.0% –事件4 为rotation 为屏幕旋转百分比隐藏事件

// 5: 25.0% –事件5 为nav导航事件,就是上下左右

// 6: 15.0% –事件6 为majornav主导航事件,会产生一些窗口的事件

// 7: 2.0% –事件7 为系统按键

// 8: 2.0% –事件8,app应用的打开就是用的这个事件

// 9: 1.0% –事件9,键盘的开,关

// 10: 13.0% –事件10,按键按下再弹起等动作

日志结尾:

如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;Monkey

finished代表执行完成。

(如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。)

测试结果初步判断

  • monkey执行时未加–ignore-crashes参数,就先浏览日志中Events injected: 值,查看当前已执行的次数,就知道有无bug
  • 程序无响应的问题:在日志中搜索 “ANR”
  • 崩溃问题:在日志中搜索 “Exception” ,在这里顺便提一下常见的Java异常:
    • 算术异常类:ArithmeticExecption
    • 空指针异常类:NullPointerException
    • 类型强制转换异常:ClassCastException
    • 数组负下标异常:NegativeArrayException
    • 数组下标越界异常:ArrayIndexOutOfBoundsException
    • 违背安全原则异常:SecturityException
    • 文件已结束异常:EOFException
    • 文件未找到异常:FileNotFoundException
    • 字符串转换为数字异常:NumberFormatException
    • 操作数据库异常:SQLException
    • 违法访问错误:IllegalAccessError
    • 堆栈溢出错误:StackOverflowError
    • 内存不足错误:OutOfMemoryError
    • 违法访问错误:IllegalAccessError

2.8Monkey测试怎样确定内存泄露

①内存泄漏弹出out of memory对话框

②对于有内存泄漏但是没有单出out of memory对话框的情况,可以通过logcat文件GC出信息,(GC:java的垃圾回收机制) GC_FOR_ALLOC: 因为在分配内存时候内存不够引起的 GC_EXPLICIT 表明GC被显式请求触发的,如System.gc调用, GC_CONCCURRENT: 表明GC在内存使用率达到一定的警戒值时候,自动触发 GC_BEFORE_OOM 表明在虚拟机抛出内存不够异常oom之前,执行最后一次回收内存垃圾

最后,关于软件测试学习,offer选择等等,都可以通过后台私信交流。需要学习资料或者帮忙修改简历也可以私信!!也可百度搜索“特斯汀软件测试腾讯课堂”或关注公众号“特斯汀软件测试”,里面涵盖很多精彩免费视频或干货知识

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/46349.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信