ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

app健壮性测试

2021-12-16 14:30:55  阅读:259  来源: 互联网

标签:monkey 健壮性 -- app pct adb 事件 测试 日志


目录

目录 

1. 引言 

2. monkey简介 

3. 环境安装 

3.1. 安装java 

3.2. 安装Android Studio 

3.3. 安装模拟器 

3.4. 连接设备 

4. 使用monkey 

4.1. 查看帮助文档 

4.2. 启动命令 

4.3. 指定app包名 

4.4. 操作日志记录 

4.5. 问题复现 

4.6. 固定延迟 

4.7. 忽略异常 

4.8. 设置事件百分比 

4.9. 自定义脚本 

4.10. 获取元素坐标位置 

4.11. monkey脚本常用API 

4.12. monkey脚本格式 

4.13. 执行脚本 

4.14. 结束monkey 

5. monkey日志分析 

5.1. 日志组成 

5.2. 报错关键字 

5.3. ANR日志 

5.4. bugreport日志 

5.5. logcat日志 

6. 常见问题 

6.1. 如何获取app包名 

 
  1. 引言

健壮性测试用于测试系统在出现故障时,是否能够自动恢复或者忽视故障继续运行。

  1. monkey简介

monkey是Android SDK自带的一个命令行工具,可以运行在模拟器或真机中,它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),monkey是一种测试软件的稳定性、健壮性的快速有效的方法。

monkey一般在功能测试通过、产品稳定以后进行,测试应用是否会出现闪退、崩溃等。

由于monkey是Android SDK自带的,所以它只支持在android系统下运行。

  1. 环境安装
  1. 安装java

Android SDK需要java环境,所以需要先安装java。

在命令行界面输入java -version,出现如下界面,说明安装成功

 

  1. 安装Android Studio

这里通过安装 Android Studio,来安装Android SDK。

安装后,启动 Android Studio,下载 SDK(需要一定的时间)。

SDK下载完成后,在环境变量Path中添加adb命令路径。C:\Users\***\AppData\Local\Android\Sdk\platform-tools

在命令行界面输入adb version出现如下界面,说明adb配置成功

  1. 安装模拟器

除了android自带的模拟器,还可以选择第三方模拟器,如mumu模拟器、夜神模拟器,这里以mumu模拟器为例。

安装完成后,在命令行界面输入adb connect 127.0.0.1:7555、adb devices,出现如下界面,说明模拟器连接成功 

  1. 连接设备

连接设备的时候,可以选择android自带模拟器、mumu模拟器、真机。

这里以真机为例:

  1. 用USB数据线连接真机与电脑
  2. 打开真机的开发者选项(版本号连续点击7或5次开启)
  3. 打开USB调试开关
  4. 打开命令行界面,输入adb devices,出现真机设备编号,表示设备连接成功

  1. 使用monkey
    1. 查看帮助文档

adb shell monkey -help

 

    1. 启动命令

启动手机里面所有的 App ,随机操作 1000 次,1000表示事件数

adb shell monkey 1000

    1. 指定app包名

使用-p参数,后面接包名

adb shell monkey -p com.tencent.mm 20

可以指定多个包名,在后面加上多个-p即可

    1. 操作日志记录

monkey日志有三种级别,v的个数越多日志级别越高,日志内容越详细:

  1. -v:0级 除启动提示、测试完成和最终结果之外,提供较少信息。
  2. -v -v :1级 提供较为详细的测试信息,如逐个发送到Activity的事件。
  3. -v -v -v :2级 提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。

adb shell monkey -p com.tencent.mm 20 -v -v -v

将日志信息输出到文件中:

adb shell monkey -p com.tencent.mm 20 -v -v -v>d:\monkey.log

    1. 问题复现

使用-s参数,用于指定伪随机生成器的seed值,如果用相同的seed值再次运行monkey,将生成相同的事件序列,用于问题复现

adb shell monkey -p com.tencent.mm -s 666 20

    1. 固定延迟

使用--throttle参数,后面接时间,单位为ms,表示事件之间的固定延迟(即执行每一个指令间隔的时间),如果不接该项,monkey将不会延迟

adb shell monkey -p com.tencent.mm --throttle 500 20

    1. 忽略异常

通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

--ignore-crashes 忽略应用崩溃

--ignore-timeouts 忽略ANR 也就是应用未响应

--ignore-security-exceptions 忽略安全权限异常

--ignore-native-crashes 忽略系统崩溃

adb shell monkey -p com.tencent.mm --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes 20

    1. 设置事件百分比

使用--pct-**参数,后面接百分比,如让触摸事件占比40%

adb shell monkey -p com.tencent.mm --pct-touch 40 20

注意:各类事件类型的百分比总数不能超过100%

事件类型包括:

--pct-touch 触摸事件(屏幕按下、弹起的操作)

--pct-motion 手势事件(直线滑动操作)

--pct-trackball 轨迹球事件

--pct-syskeys 系统导航事件,硬件设备的Home键,返回键和拨号键和音量键

--pct-nav 基本导航事件,设备的上下左右四个方向的导航

--pct-majornav 主要导航事件,app的中间键,返回键,菜单按键

--pct-appswitch 切换Activity事件,app里有多个Activity,切换到不同Activity

--pct-flip 键盘轻弹,点击文本框,键盘弹起

--pct-anyevent 其他事件

--pct-pinchzoom 二指缩放事件

--pct-permission 获取危险权限事件

    1. 自定义脚本

常规monkey测试执行的是随机的事件流,如果想让monkey测试某个特定场景就需要用到自定义脚本,monkey支持执行用户自定义脚本的测试,用户只需要按照monkey脚本的规范编写好脚本,存放到手机上,启动monkey通过-f 参数调用脚本即可。

    1. 获取元素坐标位置

monkey脚本只能通过坐标的方式来定位点击和移动事件的屏幕位置,这里就需要提前获取坐标信息。获取坐标信息的方法很多,最简单的方法就是打开手机中的开发人员选项,打开“显示指针位置”。随后,在屏幕上的每次操作,在导航栏上都会显示坐标信息。

这里也体现了monkey的缺点,只能通过坐标来定位元素,意味着更换设备后,坐标可能会失效。

    1. monkey脚本常用API

LaunchActivity(pkg_name, cl_name):启动应用的Activity。参数:包名和启动的Activity

Tap(x, y, tapDuration): 模拟一次手指单击事件。参数:x,y为控件坐标,tapDuration为点击的持续时间,此参数可省略。

UserWait(sleepTime): 休眠一段时间

DispatchPress(keyName): 按键。注:keyName值可以百度android keycode列表获取

DispatchString(input): 输入字符串

DispatchFlip(true/false): 打开或者关闭软键盘

PressAndHold(x, y, pressDuration): 模拟长按事件

RotateScreen(rotationDegree, persist): 旋转屏幕。 参数:rotationDegree为旋转角度,例如: 1代表90度;persist表示旋转之后是否固定,0表示旋转后恢复,非0则表示固定不变

    1. monkey脚本格式

以微信app为例,前面是头文件信息,start data >>开始是具体的monkey命令

#类型

type = raw events

#执行次数

count = 1  

#执行速率

speed = 1.0  

#启动测试

start data >>

#启动app 参数为包名和要启动的activity

LaunchActivity(com.tencent.mm,com.tencent.mm.ui.LauncherUI)

#等待时间

UserWait(10000)

#点击

Tap(358,739,1000) #点击我知道了

UserWait(5000)

Tap(360,1231,1000) #点击工作台

UserWait(5000)

Tap(100,576,1000) #点击驾驶任务

    1. 执行脚本

将脚本上传到设备

adb push d:\monkey.txt sdcard/monkey.txt

执行1次脚本

adb shell monkey -f sdcard/monkey.txt -v -v 1

执行结果

    1. 结束monkey

monkey在执行完预设的事件次数后会自动停止,如果在没有执行完预设的事件次数,又想要停止monkey,就要采用手动杀掉进程的方法

查看进程号

adb shell ps|findstr monkey

杀掉进程

adb shell kill 进程号

  1. monkey日志分析

查看monkey日志的时候,重点就是搜索一下有没有问题:crash(崩溃)、exception、error、failed、timedWaiting(ANR application not responded 应用无响应)、at(通常是在异常后面会出现at,来说明报错代码的位置)

    1. 日志组成

第一部分:包含 seed值、执行次数、包名

 

第二部分:被测设备上的所有应用包名,本次测试使用到哪些包,未使用哪些包

 

第三部分:各个事件所占百分比

 

0:触摸事件百分比,即参数–pct-touch

1:滑动事件百分比,即参数–pct-motion

2:缩放事件百分比,即参数–pct-pinchzoom

3:轨迹球事件百分比,即参数–pct-trackball

4:屏幕旋转事件百分比,即参数–pct-rotation

5:获取危险权限事件百分比,即参数–pct-permission//低版本没有

6:基本导航事件百分比,即参数–pct-nav

7:主要导航事件百分比,即参数–pct-majornav

8:系统事件百分比,即参数–pct-syskeys

9:Activity启动事件百分比,即参数–pct-appswitch

10:键盘翻转事件百分比,即参数–pct-flip

11:其他事件百分比,即参数–pct-anyevent

第四部分:具体事件

Sleeping for 400 milliseconds这句log是执行monkey时,--throttle设定的间隔时间,每出现一次,就代表一个事件

 

第五部分:log 完成

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

// Monkey finished代表执行完成

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

Monkey执行完成的log具体如下:

 

    1. 报错关键字
  1. 搜索报告中的关键字“ANR”,看有无应用无响应的事件(Application Not Responding)
  2. 搜索报告中的关键字“crash”,看有无崩溃的事件
  3. 搜索报告中的关键字“exception”,看有无其他异常事件。(如果出现空指针, NullPointerException,需格外重视)

下面的属于monkey自己的问题,不用管。

 

  1. 内存泄露问题搜索"GC"(需进一步分析)
    1. ANR日志

出现ANR(application no response),一般是主线程的响应超过5秒,或者BroadcastReceiver没有在10秒内作出响应

将ANR日志下载到本地

adb pull /data/anr/traces.txt

    1. bugreport日志

将bugreport下载到本地

adb bugreport>d:\bugreport.log

    1. logcat日志

使用命令

adb logcat -v time>d:\logcat.log

使用前最好清除之前的日志信息,再触发事件,然后查看最近的日志信息

adb logcat -c

  1. 常见问题
    1. 如何获取app包名

先启动app,然后输入adb命令:

adb shell dumpsys window|findstr mCurrentFocus

标签:monkey,健壮性,--,app,pct,adb,事件,测试,日志
来源: https://blog.csdn.net/tcc374254426/article/details/121931732

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有