Monkey:自动化UI压力测试

QuibblerQuibbler 2021-02-07 约 12 分钟 1786 次阅读

Monkey:自动化UI压力测试

Monkey 是内置在Android系统中的Shell脚本工具,源码在目录/development/cmds/monkey中,用来生成伪随机用户事件(例如点击、轻触或手势)流以及很多系统级事件。测试团队使用 Monkey 对正开发中的应用进行压力测试。一般可以测出空指针异常、内存泄漏等问题,再结合Log、hprof文件进行分析。

更高级的UI自动化测试框架可以学习使用 MonkeyRunner 或者 Espresso。

1、可选参数

运行下面的命令 -h 查看Monkey支持的选项参数:

adb shell monkey
    #或者
    adb shell monkey -h

Monkey命令可选参数如下:

args: []
   usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
                 [-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
                 [--ignore-crashes] [--ignore-timeouts]
                 [--ignore-security-exceptions]
                 [--monitor-native-crashes] [--ignore-native-crashes]
                 [--kill-process-after-error] [--hprof]
                 [--match-description TEXT]
                 [--pct-touch PERCENT] [--pct-motion PERCENT]
                 [--pct-trackball PERCENT] [--pct-syskeys PERCENT]
                 [--pct-nav PERCENT] [--pct-majornav PERCENT]
                 [--pct-appswitch PERCENT] [--pct-flip PERCENT]
                 [--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
                 [--pct-permission PERCENT]
                 [--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
                 [--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
                 [--wait-dbg] [--dbg-no-events]
                 [--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
                 [--port port]
                 [-s SEED] [-v [-v] ...]
                 [--throttle MILLISEC] [--randomize-throttle]
                 [--profile-wait MILLISEC]
                 [--device-sleep-time MILLISEC]
                 [--randomize-script]
                 [--script-log]
                 [--bugreport]
                 [--periodic-bugreport]
                 [--permission-target-system]
                 COUNT

2、参数说明

AndroidStudio开发手册官网中对Monkey测试可选参数的说明如下:

类别选项说明
常规-h输出简单的使用指南,help帮助。
-v命令行上的每个 -v 都会增加详细程度级别。级别 0(默认值)只提供启动通知、测试完成和最终结果。级别 1 提供有关测试在运行时的更多详细信息,例如发送到您的 Activity 的各个事件。级别 2 提供更详细的设置信息,例如已选择或未选择用于测试的 Activity。
事件-s <seed>伪随机数生成器的种子值。如果您使用相同的种子值重新运行 Monkey,它将会生成相同的事件序列。
--throttle <milliseconds>在事件之间插入固定的延迟时间。您可以使用此选项减慢 Monkey 速度。如果未指定,则不延迟,系统会尽快地生成事件。
--pct-touch <percent>调整轻触事件所占百分比。(轻触事件是指屏幕上的单个位置上的按下/释放事件。)
--pct-motion <percent>调整动作事件所占百分比。(动作事件包括屏幕上某个位置的按下事件,一系列伪随机动作和一个释放事件。)
--pct-trackball <percent>调整轨迹球事件所占百分比。(轨迹球事件包括一个或多个随机动作,有时后跟点击。)
--pct-nav <percent>调整“基本”导航事件所占百分比。(导航事件包括向上/向下/向左/向右,作为方向输入设备的输入。)
--pct-majornav <percent>调整“主要”导航事件所占百分比。(这些导航事件通常会导致界面中的操作,例如 5 方向键的中间按钮、返回键或菜单键。)
--pct-syskeys <percent>调整“系统”按键事件所占百分比。(这些按键通常预留供系统使用,例如“主屏幕”、“返回”、“发起通话”、“结束通话”或“音量控件”。)
--pct-appswitch <percent>调整 Activity 启动次数所占百分比。Monkey 会以随机间隔发起 startActivity() 调用,以最大限度地覆盖软件包中的所有 Activity。
--pct-anyevent <percent>调整其他类型事件所占百分比。这包括所有其他类型的事件,例如按键、设备上的其他不太常用的按钮等等。
约束条件-p <allowed-package-name>如果您通过这种方式指定一个或多个软件包,Monkey 将仅允许系统访问这些软件包内的 Activity。如果应用需要访问其他软件包中的 Activity(例如选择联系人),您还需要指定这些软件包。如果未指定任何软件包,Monkey 将允许系统启动所有软件包中的 Activity。要指定多个软件包,请多次使用 -p 选项,每个软件包对应一个 -p 选项。
-c <main-category>如果您通过这种方式指定一个或多个类别,Monkey 将仅允许系统访问其中一个指定类别中所列的 Activity。如果没有指定任何类别,Monkey 会选择 Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 类别所列的 Activity。要指定多个类别,请多次使用 -c 选项,每个类别对应一个 -c 选项。
调试--dbg-no-events指定后,Monkey 将初始启动到测试 Activity,但不会生成任何其他事件。为了获得最佳结果,请结合使用 -v、一个或多个软件包约束条件以及非零限制,以使 Monkey 运行 30 秒或更长时间。这提供了一个环境,您可以在其中监控应用调用的软件包转换操作。
--hprof如果设置此选项,则会在 Monkey 事件序列之前和之后立即生成分析报告。这将在 data/misc 下生成大型(约为 5Mb)文件,因此请谨慎使用。如需了解如何分析性能剖析报告,请参阅剖析应用性能。
--ignore-crashes通常,当应用崩溃或遇到任何类型的未处理异常时,Monkey 将会停止。如果指定此选项,Monkey 会继续向系统发送事件,直到计数完成为止。
--ignore-timeouts通常,当应用遇到任何类型的超时错误(例如“应用无响应”对话框)时,Monkey 将会停止。如果指定此选项,Monkey 会继续向系统发送事件,直到计数完成为止。
--ignore-security-exceptions通常,当应用遇到任何类型的权限错误(例如,如果它尝试启动需要特定权限的 Activity)时,Monkey 将会停止。如果指定此选项,Monkey 会继续向系统发送事件,直到计数完成为止。
--kill-process-after-error通常,当 Monkey 因出错而停止运行时,出现故障的应用将保持运行状态。设置此选项后,它将会指示系统停止发生错误的进程。注意,在正常(成功)完成情况下,已启动的进程不会停止,并且设备仅会处于最终事件之后的最后状态。
--monitor-native-crashes监视并报告 Android 系统原生代码中发生的崩溃。如果设置了 --kill-process-after-error,系统将会停止。
--wait-dbg阻止 Monkey 执行,直到为其连接了调试程序。

3、示例

①发送1000个随机事件到手机上

adb shell monkey 1000

②发送1000个随机事件到手机上,同时输出Log

adb shell monkey -v 1000

③发送1000个随机事件到手机上,同时输出Log,指定今日头条APP

adb shell monkey -v -p com.ss.android.article.news 1000

④发送1000个点击事件到手机上,同时输出Log,指定今日头条APP

adb shell monkey -v -p com.ss.android.article.news --pct-touch 100 1000

参考资料:

         Android Studio > UI/Application Exerciser Monkey">Android 开发者 > Android Studio > UI/Application Exerciser Monkey

        UI/Application Exerciser Monkey

         Android Studio > 用户指南 > monkeyrunner">Android 开发者 > Android Studio > 用户指南 > monkeyrunner

        

相关推荐

精选
ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager
Android

ViewPager和PagerAdapter、FragmentPagerAdapter、FragmentStatePager

ViewPager1、ViewPagerandroidx.viewpager.widget.ViewPager,Android中使用非常广泛的控件,可以说是APP必备:首次打开引导页、页面Banner广告等。常用方法:setAdapter() 设置适配器setOffscreenPageLimit() 设置缓存的页面个数,默认是 1setCurrentItem() 跳转到特定的页面setOnPage

1.1k
获取Android内置WebView内核版本
Android

获取Android内置WebView内核版本

获取Android内置WebView内核版本竟然能遇到这样奇葩的事情,网页用的技术过于新颖,以至于只支持高版本Chromium内核的,低版本安卓系统中内置的内核版本较低,无法加载前端页面。1、设置查看在系统设置里 > 应用 > 应用管理 > 显示系统应用,查看WebView组件:2、页面查看通过WebView发起的网络请求,都会带上浏览器的UA,通常页面都可以通过UA判断浏览器的内核版本。这里有两

1.1w
Android 14适配总结
Android

Android 14适配总结

Android 14适配总结毕业工作至今已经适配了三个Android大版本,从Android 11到Android 12、再到Android 13。2023年,Google即将推出的Android 14,上半年已经开始第一批适配。现在,第四个Android版本已经适配完,总结记录一下。1、Android 14计划Google一般会在2月份对外发布预告,同时放出开发者预览版。“拉通”各大平台、厂商以

1.1w