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

背景介绍

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

如果你看的意犹未尽,如果你想随时随地充实自己,请扫描以下二维码,关注我们的公众账号,可以获取更多技术类干货,还有精彩活动与你分享~


大咖招募
欢迎App研发/测试方面的大牛来投稿,开设专栏。我们提供丰厚的稿酬,预约个人专访,帮助建立个人技术品牌!
立即投稿

我要评论

字数不能超过140字,谢谢!
提交

评论({{allComments.length}})

{{comment.create_time.substr(0,16)}}

显示所有评论
复制成功!