美文网首页
2018-05-03 Monkey 测试方法

2018-05-03 Monkey 测试方法

作者: 程一川 | 来源:发表于2019-01-23 17:49 被阅读47次

    一、Monkey 测试实例

    1、常规的稳定性测试

    测试背景:
    被测程序是 Android 应用( App ),测试希望通过 Monkey 来模拟用户长时间的随机操作,检查被测应用
    是否会出现异常(应用崩溃或者无响应):

    adb shell monkey -p com.mysteel.android.steelphone --pct-touch 25 --pct-motion 20 --pct-appswitch 25 --pct-syskeys 20  --pct-flip 10   -s 13 --throttle 400 --ignore-crashes --ignore-timeouts -v 100000 >D:\test01.txt
    

    日志:


    图片.png

    以上代码中,主要是对一些操作事件做了限制,从而减少了 Monkey 伪随机化的无效操作:
    (1)使用 -p 参数来制定测试应用的包名( Package ):
    因为被测程序是一个特定的 Android 应用程序,需要指定被测程序的包名。指定包名后, Monkey 会根据包名找到对应的应用,并启动其 main activity ,然后执行 Monkey 测试。
    注:查找应用包名的方法

    • 在命令行窗口输入:
    >adb shell
    >pm list package
    

    此时将列出手机上所有的应用包名,在列表中找到要测试的应用包名即可。

    • 通过 adb logcat 抓取当前 Android 机运行的 App 的包名:
      1、打开APP;
      2、执行> adb logcat>D:/log.txt;
      3、乱的对APP做一些操作;
      4、Ctrl+c 结束adb命令;
      5、打开log.txt文件,搜索:Displayed :


      图片.png

    (2)使用 --pct-xxx 参数限制 Monkey 执行的事件类型和占比:

    • 触摸事件、手势事件、返回事件是用户最常见的操作,所以通过 --pct-touch 、--pct-motion 和--pct-syskeys将这两个事件的占比调整到 一定的百分比(如:25%、20%、20%);
    • 目标应用包含了多个 Activity ,为了能覆盖大部分的 Activity ,所以通过 --pct-appswitch 将 Activity 切换的事件占比调整到25%;
    • 键盘事件调整比例为10%;

    (3)使用 -s 参数来指定命令执行的 seed 值
    Monkey 会根据 seed 值来生成对应事件流,同一个 seed 生成的事件流是完全相同的。这里指定了 seed 值,是为了测试发现问题时,便于进行问题复现。

    (4)使用 --throttle 参数来控制 Monkey 每个操作之间的时间间隔
    指定操作之间的时间间隔,一方面是希望能更接近用户的操作场景,正常用户操作都会有一定的时间间隔;另一方面也是不希望因为过于频繁的操作而导致系统崩溃,尤其是在比较低端的手机上执行测试时。因此通过 --throttle 设置 Monkey 每个操作固定延迟 0.4秒。

    (5)使用 --ignore-crash 和 --ignore-timeouts 参数使 Monkey 遇到意外时能继续执行
    在执行 Monkey 测试时,会因为应用的崩溃或没有响应而意外终止,所以需要在命令中增加限制参数 --ignore-crash 和 --ignore-timeouts ,让 Monkey 在遇到崩溃或没有响应的时候,能在日志中记录相关信息,并继续执行后续的测试。

    (6)使用 -v 指定 log 的详细级别

    2、自定义脚本的稳定性测试

    常规 Monkey 测试执行的是随机的事件流,但如果只是想让 Monkey 测试某个特定场景(执行固定的事件流)呢?这时候就需要用到自定义脚本了, Monkey 支持执行用户自定义脚本的测试,用户只需要按照 Monkey 脚本的规范编写好脚本,存放到手机上,启动Monkey 通过 -f scriptfile 参数调用脚本即可,例如:
    应用宝 App ,测试的操作是打开应用宝,点击输入框,输入 “yyb” ,点击搜索,搜索完成后,点击返回键返回应用宝首页:

    # 启动测试
    type = user
    count = 49
    speed = 1.0
    start data >>
    # 启动应用宝
    LaunchActivity(com.tencent.android.qqdownloader,com.tencent.assistant.activity.SplashActivity)
    UserWait(2000)
    # 点击搜索框
    Tap(463,150,1000)
    UserWait(2000)
    # 输入字母“
    yyb ”
    DispatchString(yyb)
    UserWait(2000)
    # 点击搜索
    Tap(960,150,1000)
    UserWait(2000)
    # 点击返回键返回首页
    DispatchPress(KEYCODE_BACK)
    
    图片.png
    图片.png
    注:Monkey 脚本只能通过坐标的方式来定位点击和移动事件的屏幕位置,这里就需要提前获取坐标信息。获取坐标信息的方法很多,最简单的方法就是打开手机中的开发人员选项,打开 “ 显示指针位置 ” 。随后,在屏幕上的每次操作,在导航栏上都会显示坐标信息。

    完整例子:

    qidong.txt:

    #启动测试
    type = user
    count = 49
    speed = 1.0
    start data >>
    #启动我的钢铁手机版
    LaunchActivity(com.mysteel.android.steelphone,com.mysteel.android.steelphone.ui.activity.IntroActivity)
    UserWait(6000)
    #点击报告板块
    Tap(430,2500,1000)
    UserWait(2000)
    #退出手机版
    DispatchPress(KEYCODE_BACK)
    DispatchPress(KEYCODE_BACK)
    
    图片.png
    将文件 push 到手机或模拟器的 sdcard 中:
    D:\tomcat>adb push qidong06_boqi.txt /sdcard/
    图片.png
    执行脚本:
    adb shell monkey -f /sdcard/qidong06.txt  -v-v-v 10 >D:\test03.txt
    

    日志:


    图片.png

    如果需要重复执行某个脚本,只要在 Monkey 启动命令中修改执行次数即可。

    3、结合辅助命令,获取更多信息

    常规测试只要记录下 Monkey 日志,再分析 Monkey 日志检查是否有异常即可。但是,很多时候,测试除了想知道执行过程是否有异常,还需要能获取执行过程中的一些详细信息或性能数据,比如想知道 Monkey 执行过程中是否存在内存泄漏,需要获取内存信息。这时候就需要借助一些辅助的命令来获取更多信息了。下面列举了几种 Monkey 测试中常用的辅助命令,使用方法也非常简单,只要在执行 Monkey 的同时,另起一个 CMD 命令行窗口输入对应命令执行即可。

    1)获取 logcat 日志信息:
    adb shell logcat -v time>log.txt
    
    2)获取内存信息:
    adb shell dumpsys meminfo "包名"/进程ID
    例如:
    adb shell dumpsys meminfo "com.mysteel.android.steelphone"
    adb shell dumpsys meminfo 14640
    
    图片.png
    这里得到的信息非常多,重点关注如下几个字段:
    a、Native/Dalvik 的 Heap 信息:
    它分别给出的是JNI层和Java层的内存分配情况,如果发现这个值一直增长,则代表程序可能出现了内存泄漏。Dalvik Heap就是常说的堆内存,Dalvik Heap不能超过最大限制;超过单个程序内存的最大限制时,就可能出现OOM(内存溢出)。
    b、Total 的 PSS 信息:
    PSS- Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存),这个值就是你的应用真正占据的内存大小,通过这个信息,你可以轻松判别手机中哪些程序占内存比较大。
    延伸:
    (1)通过系统文件dumpsys来获取,可看到所有进程的内存信息,命令如下:
    adb shell dumpsys meminfo
    图片.png
    (2) 查看指定进程的内存信息,命令如下:
    adb shell dumpsys meminfo $pakagename or $Pid
    例如:
    adb shell dumpsys meminfo "com.mysteel.android.steelphone"
    adb shell dumpsys meminfo 14640
    

    (3) 查看内存最大限制命令:

    adb shell
    cd /system/
    cat build.prop | grep heapgrowthlimit
    
    图片.png

    如上:dalvik.vm.heapgrowthlimit=256m,即单个程序内存最大限制为256M。

    3)获取CPU消耗信息:
    adb shell top  –n 1 |find "进程名"
    
    图片.png
    注:如何获取被测应用的 UID?
    (1)步骤 1 :查看被测应用的进程 ID ( PID )
    adb shell ps | grep < 被测应用包名>
    

    (2)步骤 2 :查看被测应用的用户 ID ( UID )

    adb shell cat /proc/$pid/status
    

    延伸:
    (1)通过系统文件dumpsys来取值,可以看到所有进程的内存信息,命令如下:
    adb shell dumpsys cpuinfo

    图片.png
    如上:测试程序CPU占用率为33%,其中用户(user)占用23%,内核占用9.5%。

    (2)查看cpu详细信息,获取文件top信息
    如:查看前5个进程的cpu信息:
    adb shell top -m 5

    图片.png
    这主要关注CPU占比,如果比例很高的话则表示有异常.

    (3)查看指定程序的cpu信息:
    adb shell top -n 1 | findstr com.mysteel.android.steelphone

    图片.png

    4)获取电量信息:

    adb shell dumpsys battery
    
    图片.png
    AC powered: false
      USB powered: true
      Wireless powered: false
      status: 1            #电池状态:2:充电状态 ,其他数字为非充电状态           
      health: 2            #电池健康状态:只有数字2表示good
      present: true        #电池是否安装在机身
      level: 55            #电量: 百分比
      scale: 100
      voltage: 3977         #电池电压
      current now: -335232  #电流值,负数表示正在充电
      temperature: 335      #电池温度,单位是0.1摄氏度
      technology: Li-poly    #电池种类=
    

    5)获取 GPU 信息:

    adb shell dumpsys gfxinfo 进程名

    图片.png

    6) 获取流量信息:

    Android系统的目录文件/proc/uid_stat/uid/下一般会有两个文件tcp_snd和tcp_rcv。(注意:标红的uid是第二步中获得的Uid数值)。通过adb shell cat /proc/uid_stat/< 被测应用uid>/tcp_snd和adb shell cat /proc/uid_stat/< 被测应用uid>/tcp_rcv即可分别获得上行流量和下行流量:

    shell@p1:/ $ ls /proc/uid_stat/10150
    ls /proc/uid_stat/10150
    tcp_rcv
    tcp_snd
    shell@p1:/ $
    
    > adb shell cat /proc/uid_stat/10150/tcp_rcv
    >adb shell cat /proc/uid_stat/10150/tcp_snd
    
    图片.png

    注意:
    (1)这里的值的单位是Byte字节,并且是累积量;
    (2)有的应用是没有tcp_snd和tcp_rcv这两个文件的,比如某些系统应用;
    (3)某些没有流量交换的应用的可能也没有这两个文件,或者这两个文件里没有数据;

    4、Monkey内存、CPU测试

    (1)监测脚本
    内存监测脚本:

    内存.bat

    @echo off &color 0a&setlocal enabledelayedexpansion&title %~n0
    ::@mode con lines=18 cols=50
    
    set package1=com.mysteel.android.steelphone
    
    
    adb shell dumpsys meminfo %package1% | findstr "Pss" > ./info_1.txt
    
    :start
    adb shell dumpsys meminfo %package1% | findstr "TOTAL" >> ./info_1.txt
    
    
    echo.
    echo.
    ping -n 5 127.1>nul
    goto start
    

    CPU监测脚本:

    cpu.bat

    @echo off &color 0a&setlocal enabledelayedexpansion&title %~n0
    ::@mode con lines=18 cols=50
    
    set package1=com.mysteel.android.steelphone
    
    adb shell top -n 1 | findstr "PID" > ./cupInfo_1.txt
    
    :start
    adb shell top -n 1 | findstr %package1% >> ./cupInfo_1.txt
    
    
    echo.
    echo.
    ping -n 5 127.1>nul
    goto start
    

    (2)运行性能测试脚本

    (3)点击内存.batcpu.bat,生成日志文件info_1.txt、cpuinfo_1.txt

    图片.png

    info_1.txt


    图片.png

    cpuinfo_1.txt


    图片.png
    PID   进程id
    PR    优先级
    CPU%  当前瞬时CPU占用率
    S     进程状态:D=不可中断的睡眠状态, R=运行, S=睡眠, T=跟踪/停止, Z=僵尸进程
    #THR  程序当前所用的线程数
    VSS   Virtual Set Size  虚拟耗用内存(包含共享库占用的内存)
    RSS   Resident Set Size 实际使用物理内存(包含共享库占用的内存)
    PCY   调度策略优先级,SP_BACKGROUND/SP_FOREGROUND
    UID   进程所有者的用户id
    Name  进程的名称
    

    (4)生成Excel图表


    内存
    图片.png

    5、Andriod应用性能测试-流量、电量

    APP性能测试时除了需要监控CPU,内存数据,还需要获取该app的流量和电量数据,测试该数据是否在可接受的范围内,避免app出现过分消耗流量和电量的现象。
    电量、流量测试方法:
    (1)CPU空闲时,停留在主界面不退出,打开网络然后锁屏,12小时后查看电量、流量变化;
    (2)APP在操作运行时(此过程可借助使用monkey进行压力测试),1小时后查看电量、流量变化;
    (3)另一个第三方APP进行步骤1、2相同的场景测试;
    (4)对比两个APP的耗电量和耗流量;
    期望结果:APP在静止状态时无没有明显的耗电情况,在运行状态时耗电量在可接受范围内。

    1)电量、流量测试方法一:

    最简单的一种方式,有的手机设置菜单里面会有流量和电量统计类,只需在测试前后记录下流量和电量值,便可获取消耗的流量和电量数值


    流量
    电量
    2)电量、流量测试方法二:

    腾讯的WeTest平台(http://wetest.qq.com/),可下载WeTest助手到手机,选择需要测试的APP,测试完成后会自动发送测试结果到WeTest平台,主要数据包括cpu,内存,流量,FPS,还会自动关生成图表,很方便查看。

    图片.png
    3)电量、流量测试方法三:

    最推荐的方式:使用性能测试工具Emmagee,它是一款简单易用的Android性能检测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等很多性能状态的变化。

    参考:

    https://blog.csdn.net/qq_15158911/article/category/6554645
    https://www.cnblogs.com/botoo/archive/2017/12/01/7940998.html
    http://www.cnblogs.com/botoo/p/7943698.html
    https://blog.csdn.net/bailichun19901111/article/details/50542462
    https://blog.csdn.net/qq_15158911/article/details/53444764

    相关文章

      网友评论

          本文标题:2018-05-03 Monkey 测试方法

          本文链接:https://www.haomeiwen.com/subject/pbekrftx.html