51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2419|回复: 0
打印 上一主题 下一主题

性能测试-Android自动化测试之Monkey使用及monkey脚本编写

[复制链接]
  • TA的每日心情
    奋斗
    2021-8-16 14:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]测试小兵

    跳转到指定楼层
    1#
    发表于 2019-3-20 15:43:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    如果开发完app,开发人员没有充分的自测,然后等到测试人员反馈bug的时候已经晚了,所以作为一个合格的程序猿,很有必要掌握测试技术,也就是自动化测试了,将bug摁死在开发阶段;我们总不能花一天在那用手点点点吧,不现实,想想你晚上下班,把自动化测试一开,放在办公室跑一晚上,第二天过来直接看结果,多嗨。

    在说自动化测试之前,其实现在市面上有很多自动化测试平台,做的都很全面了,而且还提供了很多机型供你选择,比如:

    * 腾讯优测云测试平台

    * 华为开发者联盟

    * Testin 云测

    唯一一个缺点就是【收费】,本着为公司着想,还是我们自己动手吧。
    现在通用的一些测试工具如下:



    Monkey:Android SDK自带的一个命令行工具,使用adb来运行它,向系统发送伪随机的用户事件流,如按键、触屏、输入等;实现对正在开发的应用程序进行压力测试,伴随着日志输出。实际上该工具只能做程序做一些压力测试,由于测试事件和数据都是随机的,不能自定义,所以有很大的局限性。
    MonkeyRunner:Android SDK提供的测试工具,位于tools目录下,比Monkey强大,可以编写脚本来自定义数据,事件;但是脚本是采用python语言编写的,其实就是对python进行了封装,对测试人员要求较高。
    Instrumentation:这个是Google早期提供的测试自动化测试工具类,可以看成是Android的一个组件,可以模拟用户众多事件,通常用来单元测试,对测试人员要求较高,需要了解Android的api。
    UiAutomator:Android提供的自动化测试框架,也是前两年最佳的UI测试框架,基本上支持所有的用户事件,可以抓取APP页面控件属性,测试代码结构简单,编写容易,能跨APP测试,但是要求设备在Android4.1以上,不支持Hybird APP,WebApp。
    Appium:这应该是最近很火的一个测试框架,支持Native APP,Hybird APP,Web APP;可以跨平台在Windows,Mac,Linux使用,支持Android,ios;支持java,js,php,Python等语言编写测试脚本。
    Monkey命令介绍

    我们在cmd中先进入adb所在目录,然后输入命令 adb shell monkey -help 可以查看到monkey相关的命令



    p 用于约束限制,用此参数指定一个包,指定包后Monkey将被允许启动指定应用;如果不指定包,  Monkey将被允许启动设备中的所有应用(主Activity有android.intent.category.LAUNCHER 或android.intent.category.MONKEY类别 )。比如 adb shell monkey -p xxx.xxx.xxx 1  ; xxx.xxx.xxx 表示应用包名,1 表示monkey模拟用户随机事件参数,最低1,这样就能把应用启动起来
    -v 用于指定反馈信息级别,也就是日志的详细程度,分三个;-v 默认值,仅提供启动提示,操作结果等少量信息 比如adb shell monkey -p  xxx.xxx.xxx -v 1 ;-v -v 提供比较详细信息,比如启动的每个activity信息 ,比如adb shell monkey -p xxx.xxx.xxx -v -v 1 ;-v -v -v 提供最详细的信息 ,比如adb shell monkey -p xxx.xxx.xxx -v -v -v 1

    • -s 伪随机数生成器的种子值,如果我们两次monkey测试事件使用相同的种子值,会产生相同的事件序列;如果不指定种子值,系统会产生一个随机值。种子值对我们复现bug很重要。使用如下adb shell monkey -p xxx.xxx.xxx -s 11111 10
    • --ignore-crashes 忽略异常崩溃,如果不指定,那么在monkey测试的时候,应用发生崩溃时就会停止运行;如果加上了这个参数,monkey就会运行到指定事件数才停止。比如adb shell monkey -p xxx.xxx.xxx -v -v -v  --ignore-crashes 10
    • --ignore-timeouts 忽略ANR,情况与4类似,当发送ANR时候,让monkey继续运行。比如adb shell monkey -p xxx.xxx.xxx -v -v -v  --ignore-timeouts 10
    • --ignore-native-crashes 忽略native层代码的崩溃,情况与4类似,比如adb shell monkey -p xxx.xxx.xxx -v -v -v  --ignore-native-crashes 10
    • --ignore-security-exceptions 忽略一些许可错误,比如证书许可,网络许可,adb shell monkey -p xxx.xxx.xxx -v -v -v  --ignore-security-exceptions 10
    • --monitor-native-crashes 是否监视并报告native层发送的崩溃代码,adb shell monkey -p xxx.xxx.xxx -v -v -v  --monitor-native-crashes 10
    • --kill-procress-after-error 用于在发送错误后杀死进程
    • --hprof  设置后,在Monkey事件序列之前和之后立即生产分析报告,保存于data/mic目录,不过将会生成大量几兆文件,谨慎使用
    • --throttle 设置每个事件结束后延迟多少时间再继续下一个事件,降低cpu压力;如果不设置,事件与事件之间将不会延迟,事件将会尽快生成;一般设置300ms,因为人最快300ms左右一个动作,比如 adb shell monkey -p xxx.xxx.xxx -v -v -v  --throttle 300 10
    • --pct-touch 设置触摸事件的百分比,即手指对屏幕进行点击抬起(down-up)的动作;不做设置情况下系统将随机分配各种事件的百分比。比如adb shell monkey -p xxx.xxxx.xxx --pct-touch 50 -v -v 100 ,这就表示100次事件里有50%事件是触摸事件
    • --pct-motion 设置运动事件百分比,这种事件类型是由屏幕上某处的一个down事件-一系列伪随机的移动事件-一个up事件,即点击屏幕,然后直线运动,最后抬起这种运动。
    • --pct-trackball 设置轨迹球事件百分比,这种事件类型是一个或者多个随机移动,包含点击事件;这里可以是曲线运动
    • --pct-syskeys 设置系统按键事件百分比,比如home键,音量键,返回键,拨打电话等
    • --pct-nav 设置基本的导航按键事件百分比,比如输入设备上的上下左右四个方向键
    • --pct-appswitch 设置activity跳转事件的百分比
    • --ptc-anyevent 设置其它事件百分比
    • --ptc-majornav 设置主导航事件的百分比


    保存dos窗口打印的monkey信息,在monkey命令后面补上输出地址,如adb shell monkey -p xxx.xxxx.xxx  -v -v 100 > D:\monkey.txt;这样monkey测试结束后,所有打印的信息都会输出到这个文件里

    通过adb bugreport 命令可以获取整个android系统在运行过程中所有app的内存使用情况,cpu使用情况,activity运行信息等,包括出现异常等信息。使用方法 adb bugreport > bugreport.txt ;这样在当前目录就会产生一个txt文件和一个压缩包,具体信息可在压缩包查看,txt文件只会记录压缩包的生成过程信息

    -f 加载monkey脚本文件进行测试,比如 adb shell monkey -f sdcard/monkey.txt -v -v 500
    Monkey使用

    1.进入adb目录

    2.通过adb install apk名字

    3.输入adb shell monkey -p xxx.xxxx.xxx  -s 123123 --throttle 300 -v -v 20 > d:\monkey.txt,这里指定了seed值,每个事件之间休息300ms,执行了20个事件,然后将日志信息保存在了monkey.txt文件中

    4.打开文件,查看信息如下:
    1. Monkey: seed=123123 count=20 //seed值是指定的123123,方便出现bug后再复现 事件次数是20
    2. :AllowPackage: com.android.mangodialog // 应用包名
    3. :IncludeCategory: android.intent.category.LAUNCHER //启动的主activity的类别,两种只要有一种就行
    4. :IncludeCategory: android.intent.category.MONKEY
    5. // Selecting main activities from category android.intent.category.LAUNCHER
    6. //   + Using main activity com.android.mangodialog.MainActivity (from package com.android.mangodialog) //该应用符合这种类别的activity
    7. // Selecting main activities from category android.intent.category.MONKEY
    8. // Seeded: 123123
    9. // Event percentages://各种事件的百分比
    10. //   0: 15.0%  //可通过--pct-touch 参数设置的事件的百分比 常用
    11. //   1: 10.0%  //可通过--pct-motion 参数设置的事件的百分比 常用
    12. //   2: 2.0%   //可通过--pct-pinchzoom 参数设置的事件的百分比
    13. //   3: 15.0%  //可通过--pct-trackball 参数设置的事件的百分比
    14. //   4: -0.0%  
    15. //   5: -0.0%  
    16. //   6: 25.0%  //可通过--pct-nav 参数设置的事件的百分比
    17. //   7: 15.0%  //可通过--pct-majornav 参数设置的事件的百分比
    18. //   8: 2.0%   //可通过--pct-syskeys 参数设置的事件的百分比 常用
    19. //   9: 2.0%   //可通过--pct-appswitch 参数设置的事件的百分比 常用
    20. //   10: 1.0%  //可通过--pct-flip 参数设置的事件的百分比
    21. //   11: 13.0% //可通过--pct-anyevent 参数设置的事件的百分比
    22. //启动的activity
    23. :Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.android.mangodialog/.MainActivity;end
    24.     // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.mangodialog/.MainActivity } in package com.android.mangodialog
    25. Sleeping for 300 milliseconds //设置的事件之间间隔300ms 下面就是执行点击事件
    26. :Sending Key (ACTION_DOWN): 82    // KEYCODE_MENU
    27. :Sending Key (ACTION_UP): 82    // KEYCODE_MENU
    28. Sleeping for 300 milliseconds
    29. :Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER
    30. :Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER
    31. Sleeping for 300 milliseconds
    32.     // Allowing start of Intent { cmp=com.android.mangodialog/.MainActivity2 } in package com.android.mangodialog
    33. :Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
    34. :Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
    35. Sleeping for 300 milliseconds
    36. :Sending Key (ACTION_DOWN): 21    // KEYCODE_DPAD_LEFT
    37. :Sending Key (ACTION_UP): 21    // KEYCODE_DPAD_LEFT
    38. Sleeping for 300 milliseconds
    39. :Sending Touch (ACTION_DOWN): 0:(1017.0,280.0)
    40. :Sending Touch (ACTION_UP): 0:(1021.8751,281.12732)
    41. Sleeping for 300 milliseconds
    42. :Sending Touch (ACTION_DOWN): 0:(1005.0,1599.0)
    43. :Sending Touch (ACTION_UP): 0:(994.4962,1589.7715)
    44. Sleeping for 300 milliseconds
    45. :Sending Key (ACTION_DOWN): 2    // KEYCODE_SOFT_RIGHT
    46. :Sending Key (ACTION_UP): 2    // KEYCODE_SOFT_RIGHT
    47. Sleeping for 300 milliseconds
    48. :Sending Key (ACTION_DOWN): 20    // KEYCODE_DPAD_DOWN
    49. :Sending Key (ACTION_UP): 20    // KEYCODE_DPAD_DOWN
    50. Sleeping for 300 milliseconds
    51. :Sending Key (ACTION_DOWN): 22    // KEYCODE_DPAD_RIGHT
    52. :Sending Key (ACTION_UP): 22    // KEYCODE_DPAD_RIGHT
    53. Sleeping for 300 milliseconds //轨迹球运动
    54. :Sending Trackball (ACTION_MOVE): 0:(4.0,-5.0)//手机屏幕上的坐标
    55. Events injected: 20 //monkey共执行了20次事件
    56. :Sending rotation degree=0, persist=false
    57. :Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
    58. //测试过程中的网络状态,花费了3064ms连接,既没有连接上手机网络,也没有连接上wifi
    59. ## Network stats: elapsed time=3064ms (0ms mobile, 0ms wifi, 3064ms not connected)

    60. // Monkey finished //monkey测试结束
    复制代码
    5.平时会使用比较复杂的参数去测试,如下

    adb shell monkey -v -v -v -s 123123 --throttle 300 --pct-touch 40 --pct-motion 25 --pct-appswitch 25 --pct-syskeys 10 --pct-majornav 0 --pct-nav 0 --pct-trackball 0 --ignore-crashes --ignore-timeouts --ignore-native-crashes -p xxx.xxx.xxx 100000 > d:\monkey.txt



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-14 14:45 , Processed in 0.061339 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表