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

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

背景介绍

稳定的产品质量是留住用户的第一道阀门,所以稳定性测试是常规测试中必不可少的。这周我们介绍百度应用比较广泛的两款稳定性工具:系统级稳定性测试工具 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 是哪里获取的呢

8楼 已删除
需要 登录 後方可回應,如果你還沒有帳號按這裡 注册