稳定性测试|探索优化App UI遍历方法-SmartMonkey
作者:龙晓锋 2016-09-18 {{allComments.length}} 107877 干货分享稳定的产品质量是留住用户的第一道阀门,所以稳定性测试是常规测试中必不可少的。这周我们介绍百度应用比较广泛的两款稳定性工具:系统级稳定性测试工具 SmartMonkey 和可定制模块级别的内核稳定性工具。
Android自动化测试中,monkey是系统自带的一款稳定性和压力测试工具。它可以随机产生事件,不带任何主观性,并且使用方便。但是,正是由于这种随机性,使得传统的monkey测试只能作为稳定性测试工具,在其上进行功能扩展较为不易。在monkey测试中,由于事件的随机性,使得monkey容易卡在某些简单页面,比如登陆页面这种可操作内容很少的页面。
针对这些问题,我们基于Robotium自动测试框架,开发了SmartMonkey工具。SmartMonkey其本质上是深度遍历activity和操作节点的一个大型的robotiumtest case,它具有以下这些特点:
1 准确识别页面上的操作,避免无效点击
2 支持关键路径配置,使测试范围可控
3 操作优先级动态变化,覆盖更多功能和页面
4 多进程基础性能信息自动采集
5 支持Checklist配置,提供简单的功能验证
6 结合性能专项工具,进一步挖掘性能隐患
在稳定性测试过程中同步挖掘性能隐患是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为被测包的包名。
privatestaticfinal String LAUNCHER_ACTIVITY_FULL_CLASSNAME = "com.example.android.apis.ApiDemos"; privatestaticfinal String TARGET_PACKAGE = "com.example.android.apis";
public Test() throws ClassNotFoundException{ super(TARGET_PACKAGE, Class.forName(LAUNCHER_ACTIVITY_FULL_CLASSNAME)); } /* * Smart monkey 示例 */ publicvoid test_sample() throws ClassNotFoundException { mSolo.sleep(10000); mSolo.analysis(); } |
6 添加配置项
在项目中新建assets文件夹,添加AdvancedConfig.properties和config.properties文件。
在config.properties文件中添加配置项:
# report path. MUST BE absolute path. mReportPath = /mnt/sdcard/lynq-report # login switch. value:{true, false} # true -> automatic login when ENTER the LOGIN PAGE. # login page MUST be baidu pass. mLoginSwitch = true # username. using in login function mUsername = USERNAME # password. using in login function mPassword = PASSWORD |
其中mReportPath是设置输出报告的位置, 默认为/mnt/sdcard/lynq-report/目录,mLoginSwitch是自动登录开关,当前仅限baidupassport SDK自动登录。mUsername和mPassword分别为自动登录时输入的用户名和密码。
在AdvancedConfig.properties文件中添加配置项:
# time slot of performance collector. unit: ms. value: int mTimeSlot = 10000 # This is performance report type.value:int{0,1} defualt is 0,report is html file. when value equels 1,the report is xml file. mPerformanceReportType = 0 # sleep time. interval between two action. unit: ms. value: int mSleepTime = 1000 # default text for editview. value: string # NEVER enter any: commenting this config item OR make it empty mDefaultText = defaulttextINsmartmonkey # text for special EditText. split by "|", format: viewID1,content1|viewID2,content2 # viewID: EditText's id, content: text for this EditText mSpInputText = 1234,specialtextforeditTextwithid1234|123,specialtextforeditTextwithid123 # view never click. split by "|" mNeverClick = \u9000\u51FA\u767B\u5F55|button_settings_logout # view must click. split by "|" mMustClick = positiveButton|\u53D6\u6D88 # max operation running time. working in mode1 && mode2. # value: String mMaxRunningTime = 08:00:00 |
其中,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方式执行。
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
如果你看的意犹未尽,如果你想随时随地充实自己,请扫描以下二维码,关注我们的公众账号,可以获取更多技术类干货,还有精彩活动与你分享~