百度MTC 稳定性测试|探索优化 App UI 遍历方法-SmartMonkey

百度MTC · 2016年09月18日 · 最后由 alfred.kao 回复于 2017年07月07日 · 254 次阅读

背景介绍

稳定的产品质量是留住用户的第一道阀门,所以稳定性测试是常规测试中必不可少的。这周我们介绍百度应用比较广泛的两款稳定性工具:系统级稳定性测试工具 SmartMonkey 和可定制模块级别的内核稳定性工具。

Android 自动化测试中,monkey 是系统自带的一款稳定性和压力测试工具。它可以随机产生事件,不带任何主观性,并且使用方便。但是,正是由于这种随机性,使得传统的 monkey 测试只能作为稳定性测试工具,在其上进行功能扩展较为不易。在 monkey 测试中,由于事件的随机性,使得 monkey 容易卡在某些简单页面,比如登陆页面这种可操作内容很少的页面。

针对这些问题,我们基于 Robotium 自动测试框架,开发了 SmartMonkey 工具。SmartMonkey 其本质上是深度遍历 activity 和操作节点的一个大型的 robotiumtest case,它具有以下这些特点:

1 准确识别页面上的操作,避免无效点击

2 支持关键路径配置,使测试范围可控

3 操作优先级动态变化,覆盖更多功能和页面

4 多进程基础性能信息自动采集

5 支持 Checklist 配置,提供简单的功能验证

6 结合性能专项工具,进一步挖掘性能隐患

在稳定性测试过程中同步挖掘性能隐患是 SmartMonkey 工具的一个亮点,接下来会对 SmartMonkey 提供的性能专项工具做进一步介绍。

如何使用 SmartMonkey

1、建立一个 Android Test Project 工程
2、修改 AndroidManifest.xml 文件
修改 instrumentation TAG 中的 name 和 targetPackage 字段内容如下。

图 1

3、导入 SmartMonkey 所需的 lib

图 2

4、在测试工程的 src 文件中,新建 JUnit Test Case

该类需继承 LynQ 基础类。

图 3

5、在新建的 Case 中添加以下 code
其中 LAUNCHER_ACTIVITY_FULL_CLASSNAME 为被测 APP 的 launcheractivity,TARGET_PACKAGE 为被测包的包名。

6、添加配置项

在项目中新建 assets 文件夹,添加 AdvancedConfig.properties 和 config.properties 文件。

在 config.properties 文件中添加配置项:

其中 mReportPath 是设置输出报告的位置, 默认为/mnt/sdcard/lynq-report/目录,mLoginSwitch 是自动登录开关,当前仅限 baidupassport SDK 自动登录。mUsername 和 mPassword 分别为自动登录时输入的用户名和密码。

在 AdvancedConfig.properties 文件中添加配置项:

其中,mTimeSlot 是性能数据采集的间隔,mPerformanceReportType 是设置性能报告输出样式,1 为 xml 样式,0 为 html 样式。

mSleepTime 是两次事件的执行间隔,mDefaultText 是默认的 SmartMonkey 在 EditText 中输入的内容。mSpInputText 中可以配置在某些输入框中特殊输入的内容用竖线分割,比如” 1234,specialtextforeditTextwithid1234”,表示在 id 为 1234 的 view 中,输入"specialtextforeditTextwithid1234"内容。

mNeverClick 和 mMustClick 用来表示关键路径,分别为避免点击的 view 和必点的 view。View 可以用文字或十进制 id 或 id string 来表示。例如下图中右下角 OK 按钮,在 R 文件中是"publicstaticfinalintbtn_ok=0x7f09001d;”,所以,这个 view 可以用其上文字 “OK” 来表示,也可以用 idstring “btn_ok” 或十进制 id“2131296285” 来表示。


图 4

mMaxRunningTime 是 SmartMonkey 的最大执行时间,用时分秒来表示。

7、执行

通过 Run as AndroidJunit Test 方式执行。

查看 SmartMonkey 的输出报告

1、crash 信息

SmartMonkey 会自动记录被测 APP 的 crash 栈信息,以及 nativecrash 信息。

Crash 信息会输出在你配置的目录中,以 stack 为开头的 txt 文件。每个 crash 单独输出一个文件。Native crash 信息记录在以 dmp 开头的文件中,可以通过 google-breakpad 进行查看。

2、基础性能报告

根据配置项,SmartMonkey 会输出性能报告到输出报告目录中。性能报告是以 performance 开头的 html 或 xml 文件。

Html 格式的性能报告中,首先会列出被测 app 的相关信息,包括包名、uid 和同 uid 下的每一个进程的 pid 和进程名等。随后列出 CPU、内存、流量的图表。CPU 图表中记录了每一个进程的 CPU 占用率,内存图表中记录了每个进程 PSS 和 USS 的占用情况,流量图表中记录了流量总使用情况和两个采集点之间的流量差值。

在每个图表上,用 node 记录了这个节点上 SmartMonkey 执行的事件,可以用来辅助定位造成曲线波动的操作。


图 5


图 6

Xml 格式的性能报告中,每个 operation 为一个采集点,其中记录了时间戳、测试手机总 CPU 占用率、流量差值、流量总和、节点上的事件,以及每个进程的 pid、CPU 占用率、PSS、USS 等。

图 7

如果你看的意犹未尽,如果你想随时随地充实自己,请扫描以下二维码,关注百度移动云测试中心(MTC),可以获取更多技术类干货,还有精彩活动与你分享~

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 7 条回复 时间 点赞

赞啊楼主👍工具有开放吗

额。上面的截图意思是,可以从 App 里面输入 Monkey 的参数去驱动 Monkey?需要 System 权限么?

赞,楼主可否具体地介绍下遍历的思路呢?

—— 来自 TesterHome 官方 安卓客户端

请问楼主,smartMonkey 所依赖的这些 jar 包在哪可以下载?

selieven 回复

亲,这个依赖 lib 是哪里获取的呢

1楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册