微信号:baiduqa

介绍:提供百度质量部的动态、技术分享等资讯.

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

2016-08-23 18:35 龙晓锋
背景介绍

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

图1


3 导入SmartMonkey所需的lib

        
2

 

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

该类需继承LynQ基础类。


3

 

5 在新建的Case中添加以下code

其中LAUNCHER_ACTIVITY_FULL_CLASSNAME为被测APPlauncheractivityTARGET_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.propertiesconfig.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自动登录。mUsernamemPassword分别为自动登录时输入的用户名和密码。

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是设置性能报告输出样式,1xml样式,0html样式。

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

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


4

 

mMaxRunningTimeSmartMonkey的最大执行时间,用时分秒来表示。


7 执行

通过Run as AndroidJunit Test方式执行。


查看SmartMonkey的输出报告
1 crash信息

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

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


2 基础性能报告

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

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

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


图5


图6

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


                                        图7


无论原生monkey,还是智能优化后的UI遍历的SmartMonkey测试,都是一种系统集成级别的稳定性测试,下期我们将介绍一种模块级别的稳定性测试方法,敬请期待哦!


关注百度质量部订阅号,回复以下内容立马查看干货哦~

-------------------------------------------------------

 1.回复关键词评测查看评测系列文章
 2.
回复关键词CI查看CI系列经验分享
 3.
回复关键词移动测试查看移动测试系列工具点评



 
百度质量部 更多文章 Redis主从同步失败案例的步步深入 Android ANR的成因分析及分析定位技术 Android内存泄漏定位与解决 Protobuf使用不当导致的程序内存上涨问题分析 利用进程信息追查内存泄漏
猜您喜欢 敏捷破冰之旅(二) 花川学院 Swift2 端午节大餐 来袭! 他们是疯子,却上了电视...... 程序员如何才能活得更加明白 专注苹果10年:揭秘美国中情局(CIA)针对苹果设备的各种破解与监控研究