一种内存抖动自动化测试方法及装置与流程

文档序号:11690991阅读:205来源:国知局
一种内存抖动自动化测试方法及装置与流程

本发明自动化测试领域,具体涉及一种内存抖动自动化测试方法及装置。



背景技术:

在当前的直播应用中,直播间内播放器、弹幕、礼物和各种消息都非常消耗安卓设备内存,内存负荷一直是一个很突出、严重的问题,这也导致了直播应用内存抖动的现象频发。

对于内存抖动的频繁现象,在对安卓应用的当前测试方案中,都没有针对内存抖动方面进行测试的,内存抖动的问题一直还没有得到很好的重视。



技术实现要素:

本发明提供一种克服上述问题或者至少部分地解决上述问题的内存抖动自动化测试方法及装置。

根据本发明的一个方面,提供一种内存抖动自动化测试方法,包括:

s1,当检测到安卓设备与测试平台连接成功后,获取测试脚本参数;

s2,根据所述测试脚本参数,使用测试平台上的命令行monkey工具向安卓设备发送运行指令,以使待测试应用安装包在安卓设备上运行;

s3,基于待测试应用安装包在安卓设备上运行后,收集安卓设备上的垃圾回收日志;

s4,对所述垃圾回收日志进行分析,来确定安卓设备是否存在内存抖动。

本发明的有益效果为:采用android自带的命令行monkey工具对安卓设备的内存抖动进行自动化测试,在保证测试的稳定性的同时,填补了安卓设备内存抖动检测的空白。

在上述技术方案的基础上,本发明还可以作如下改进。

进一步的,所述步骤s1之前还包括:

使用python语言在测试平台上编写测试脚本,并初始化测试脚本参数,所述测试脚本参数包括待测试应用安装包的名称和待测试应用安装包在安卓设备上的预设运行时长。

进一步的,所述步骤s2具体包括:

使用测试平台上的命令行monkey工具向安卓设备发送运行指令,所述运行指令中包括测试脚本参数;

根据所述测试脚本参数中的待测试应用安装包的名称,在安卓设备上找到待测试应用安装包,并根据测试脚本参数中的预设运行时长,在安卓设备上运行所述待测试应用安装包。进一步的,所述步骤s3具体包括:

检测安卓设备的系统版本;

当待测试应用安装包在安卓设备上运行后,根据安卓设备的不同系统版本,对与安卓设备的系统版本对应的虚拟机上的垃圾回收日志进行收集。

进一步的,所述垃圾回收日志中包括生成垃圾回收日志的时间戳;

所述步骤s4具体包括:

s41,根据生成垃圾回收日志的时间戳,统计安卓设备回收垃圾的频率以及在预设时间内回收垃圾的次数;

s42,根据安卓设备回收垃圾的频率和在预设时间内回收垃圾的次数,确定安卓设备中是否存在内存抖动。

进一步的,所述步骤s42具体包括:

当安卓设备回收垃圾的频率小于预设频率且安卓设备在预设时间内回收垃圾的次数小于预设次数时,安卓设备不存在内存抖动,否则,安卓设备存在内存抖动。

所述进一步的有益效果为:通过分析安卓设备上垃圾回收的频率和在预定时间内的垃圾回收的次数,来确定安卓设备上是否存在内存抖动,定量进行分析,使得测试结果更加准确。

进一步的,所述步骤s3之后还包括:

根据收集的垃圾回收日志,绘制安卓设备的剩余内存与时间对应关系曲线图表。

根据本发明的另一个方面,还提供了一种内存抖动自动化测试装置,包括:

参数获取模块,用于当检测到安卓设备与测试平台连接成功后,获取测试脚本参数;指令发送模块,用于根据所述测试脚本参数,使用测试平台上的monkey工具向安卓设备发送运行指令,以使待测试应用安装包在安卓设备上运行;

日志收集模块,用于基于待测试应用安装包在安卓设备上运行后,收集安卓设备上的垃圾回收日志;

分析模块,用于对所述垃圾回收日志进行分析,来确定安卓设备是否存在内存抖动。

进一步的,还包括:

脚本编写模块,用于使用python语言在测试平台上编写测试脚本,并初始化测试脚本参数,所述测试脚本参数包括待测试应用安装包的名称和待测试应用安装包在安卓设备上的预设运行时长。

进一步的,所述垃圾回收日志中包括生成垃圾回收日志的时间戳,所述分析模块包括:

统计子单元,用于根据生成垃圾回收日志的时间戳,统计安卓设备回收垃圾的频率以及在预设时间内回收垃圾的次数;

确定子单元,用于根据安卓设备回收垃圾的频率和在预设时间内回收垃圾的次数,确定安卓设备中是否存在内存抖动。

附图说明

图1为本发明一个实施例的内存抖动自动化测试方法流程图;

图2为本发明另一个实施例的内存抖动自动化测试装置连接框图;

图3为本发明另一个实施例的内存抖动自动化测试装置的整个连接框图;

图4为本发明另一个实施例的分析模块内部连接框图;

图5为本发明又一个实施例的内存抖动自动化测试装置的测试设备连接框图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

参见图1,为本发明一个实施例的内存抖动自动化测试方法,适用于对安卓设备的内存抖动现象进行测试,该方法包括:s1,当检测到安卓设备与测试平台连接成功后,获取测试脚本参数;s2,根据所述测试脚本参数,使用测试平台上的命令行monkey工具向安卓设备发送运行指令,以使待测试应用安装包在安卓设备上运行;s3,基于待测试应用安装包在安卓设备上运行后,收集安卓设备上的垃圾回收日志;s4,对所述垃圾回收日志进行分析,来确定安卓设备是否存在内存抖动。

内存抖动是指在短时间内有大量的对象被创建或者被回收的现象,内存抖动出现的原因主要频繁在循环里创建对象,这样会导致大量的对象在短时间内被创建,由于新创建的对象是需要占用内存空间的,如果一次或者两次在循环里创建对象,对内存的影响不会太大,不会造成严重的内存抖动,但如果是频繁创建对象,那么内存的抖动就会很严重。如果内存抖动很频繁,会导致垃圾回收机制频繁运行,因为短时间内产生大量的对象,需要大量的内存,而且还是频繁抖动,就可能会需要回收内存用以产生对象,垃圾回收机制自然就频繁运行。

本实施例由于是对安卓设备的内存抖动进行测试,因此,需要对在安卓设备上运行的应用安装包的运行数据进行测试。而需要对安卓设备进行测试,首先需要检测安卓设备与测试平台的连接状态,当安卓设备与测试平台成功连接后,测试平台才能对安卓设备进行测试。随后,测试平台获取预先编写好的测试脚本的参数,其中,测试脚本参数至少包括安卓设备上待测试应用安装包的名称。测试平台根据测试脚本参数,使用命令行monkey工具向安卓设备发送运行指令,运行指令中包括测试参数,即安卓设备需要运行的待测试应用安装包的名称。安卓设备接收到测试平台发送的运行指令,根据运行指令中的待测试应用安装包的名称找到待测试应用安装包,并在安卓设备上运行该待测试应用安装包。

在待测试应用安装包在安卓设备上运行的过程中,会产生大量的对象,需要对安卓设备中的内存进行垃圾回收。因此,当待测试应用安装包在安卓设备上运行结束后,测试平台对安卓设备上的垃圾回收日志进行收集。通过对垃圾回收日志的分析,来确定安卓设备是否存在内存抖动现象。

在本发明的一个实施例中,所述步骤s1在测试平台对安卓设备进行测试之前还包括:使用python语言在测试平台上编写测试脚本,并初始化测试脚本参数,所述测试脚本参数包括待测试应用安装包的名称和待测试应用安装包在安卓设备上的预设运行时长。

在测试平台对安卓设备进行测试之前,预先在测试平台上使用python语言来编写测试脚本,并且初始化测试脚本的参数,其中,测试脚本参数主要包括待测试应用安装包的名称和待测试应用安装包在安卓设备上的预设运行时长。

在本发明的另一个实施例中,所述步骤s2包括:使用测试平台上的命令行monkey工具向安卓设备发送运行指令,所述运行指令中包括测试脚本参数;根据所述测试脚本参数中的待测试应用安装包的名称,在安卓设备上找到待测试应用安装包,并根据测试脚本参数中的预设运行时长,在安卓设备上运行所述待测试应用安装包。

在测试平台对安卓设备进行测试时,获取预先编写好的测试脚本参数,即待测试应用安装包的名称和待测试应用安装包的预设运行时长。根据测试脚本参数,采用monkey工具向安卓平台发送运行指令,其中,运行指令中包括脚本测试参数。接收到运行指令,安卓设备根据运行指令中的待测试应用安装包的名称,找到待测试应用安装包,并将待测试应用安装包在安卓设备上运行预设运行时长。其中,monkey程序在模拟器或者真实设备运行的时候,monkey程序会产生一定数量或一定时间内的随机事件,用来模拟用户的操作,如点击、按键或手势等来模拟用户的操作。根据monkey工具模拟的这些用户的操作在安卓设备上运行待测试应用安装包。

在本发明的另一个实施例中,所述步骤s3具体包括:检测安卓设备的系统版本;当待测试应用安装包在安卓设备上运行后,根据安卓设备的不同系统版本,对与安卓设备的系统版本对应的虚拟机上的垃圾回收日志进行收集。

在测试平台对安卓设备上的垃圾回收日志收集之前,先检测安卓设备的系统版本,由于安卓设备的系统版本不同,运行待测试应用安装包是在不同的虚拟机中运行的,那么触发垃圾回收机制产生的垃圾回收日志也会在不同的虚拟机中。安卓设备的系统版本在5.0之后,其中的虚拟机由dalvik虚拟机变成了art虚拟机,所以在开始对安卓设备上的垃圾回收日志进行收集前,需要识别当前安卓设备的系统版本。测试平台根据当前安卓设备的不同系统版本,需要对不同的虚拟机中的垃圾回收日志进行回收。

当安卓设备的系统版本小于5.0时,收集安卓设备中所有的dalvik日志,并通过测试脚本遍历dalvik日志,获取由于应用程序调用接口触发的垃圾回收机制而生成的垃圾回收日志;当安卓设备的系统版本大于等于5.0时,收集安卓设备中所有的art日志,并通过测试脚本遍历art日志,获取由于应用程序调用接口触发的垃圾回收机制而生成的垃圾回收日志。

当安卓设备的系统版本小于5.0,收集垃圾回收日志的过程为:dalvik虚拟机运行时垃圾回收机制gc类型如下:

(1)gc_for_malloc:表示是在堆上分配对象时内存不足触发的垃圾回收机制gc。

(2)gc_concurrent:当应用程序的堆内存达到一定量时,或者可以理解为堆内存快要满的时候,系统会自动触发垃圾回收机制gc操作来释放内存。

(3)gc_explicit:表示是应用程序调用system.gc、vmruntime.gc接口或者收到sigusr1信号时触发的垃圾回收机制gc。

(4)gc_before_oom:表示是在准备抛oom异常之前进行的最后努力而触发的垃圾回收机制gc。

其中,gc_for_malloc、gc_concurrent和gc_before_oom三种类型的垃圾回收机制gc都是在分配对象的过程触发的,而gc_explicit则是导致内存抖动的主要原因。在测试平台上编写的测试脚本通过过滤类型为gc_explicit的垃圾回收日志。预先收集所有的dalvik日志,测试脚本通过遍历dalvik日志,获取带gc_explicit关键字部分的垃圾回收日志,截取出该部分的垃圾回收日志和生成垃圾回收日志的时间戳。

当安卓设备的系统版本大于等于5.0时,art虚拟机运行时垃圾回收回收gc类型如下:

(1)kgccauseforalloc:当要为对象分配内存的时候发现内存不够的情况下引起的垃圾回收机制gc,这种情况下的垃圾回收机制gc会stopworld。

(2)kgccausebackground:当内存达到一定阀值的时候会触发垃圾回收机制gc,不会引起stopworld。

(3)kgccauseexplicit:调用的时候进行的垃圾回收机制gc,如果art打开了这个选项的情况下,在system.gc的时候会进行垃圾回收机制gc进行垃圾回收。

其中,art运行库下kgccauseexplicit标记的是调用接口时进行的垃圾回收机制gc,是导致内存抖动的主要原因。在测试平台上编写的测试脚本通过过滤类型为kgccauseexplici的垃圾回收日志。测试平台预先收集所有的art日志,测试脚本通过遍历art日志获取带kgccauseexplici关键字部分的有效垃圾回收日志,截取出该部分的垃圾回收日志和生成该垃圾回收日志的时间戳)。

在本发明的另一个实施例中,所述垃圾回收日志中包括生成垃圾回收日志的时间戳;所述步骤s4对所述垃圾回收日志进行分析,来确定安卓设备是否存在内存抖动具体包括:s41,根据生成垃圾回收日志的时间戳,统计安卓设备回收垃圾的频率以及在预设时间内回收垃圾的次数;s42,根据安卓设备回收垃圾的频率和在预设时间内回收垃圾的次数,确定安卓设备中是否存在内存抖动。

其中,步骤s42具体包括:当安卓设备回收垃圾的频率小于预设频率且安卓设备在预设时间内回收垃圾的次数小于预设次数时,安卓设备不存在内存抖动,否则,安卓设备存在内存抖动。

比如,在直播应用中,每秒垃圾回收频率不能超过1(针对短时间内有大量显示gc的场景)且连续五秒的垃圾回收总数不能超过5(针对较为平缓的显示gc,用户的感知可能不是很明显的场景)。针对这个条件,对比收集的安卓设备中的垃圾回收日志,如果其gc_explicit类型的垃圾回收频率过高,则判断安卓设备存在内存抖动,并将手机到的垃圾回收日志持久保存,提供给开发人员定位和解决问题。

其中,需要说明的是,垃圾回收的频率是指每秒内回收垃圾的次数,即每一秒都会去检测垃圾回收的频率,只要是其中有一秒垃圾回收的次数大于预设次数,比如,每秒回收垃圾的次数超过10次,则认为内存存在抖动,对垃圾回收频率的测试可以看做短时间内的测试,比如,在一秒的时间内发生了一个瞬时垃圾回收的高峰,那么此时可以认为内存发生了瞬时抖动。而对预设时间内垃圾回收的次数进行检测,比如,设定10秒内垃圾回收的次数不能超过70次,若超过这个次数,则认为内存在这10内是存在抖动的。例如,在10秒内,垃圾回收的次数为70次,每秒内回收垃圾的次数为7,并未超过10次,从垃圾回收的频率这个条件来看,内存是不存在抖动的。因此,本实施例在垃圾回收的频率设定的条件上,还设定了在连续的预设时间内垃圾回收的次数不能超过预设次数,预设时间通常比1秒长,如前所述,在10秒内回收垃圾的次数为70次,这样计算每秒内的频率是没有超过10次的,但是依然认为在10秒内存在抖动,这是较长时间内的测试。采用两个条件共同确定内存是否发生了抖动,准确性更高。

在本发明的另一个实施例中,根据收集的垃圾回收日志,绘制安卓设备的剩余内存与时间对应关系曲线图表。利用图表来展示安卓设备的内存抖动情况,更加直观。

实施例2、为本发明另一个实施例的内存抖动自动化测试装置,包括参数获取模块21、指令发送模块22、日志收集模块23和分析模块24。

参数获取模块21,用于当检测到安卓设备与测试平台连接成功后,获取测试脚本参数;

指令发送模块22,用于根据所述测试脚本参数,使用测试平台上的monkey工具向安卓设备发送运行指令,以使待测试应用安装包在安卓设备上运行;

日志收集模块23,用于基于待测试应用安装包在安卓设备上运行后,收集安卓设备上的垃圾回收日志;

分析模块24,用于对所述垃圾回收日志进行分析,来确定安卓设备是否存在内存抖动。

参见图3,内存抖动自动化测试装置还包括编写模块25、检测模块26和绘制模块27。

脚本编写模块25,用于使用python语言在测试平台上编写测试脚本,并初始化测试脚本参数,所述测试脚本参数包括待测试应用安装包的名称和待测试应用安装包在安卓设备上的预设运行时长。

所述指令发送模块22具体用于:

使用测试平台上的命令行monkey工具向安卓设备发送运行指令,所述运行指令中包括测试脚本参数;

根据所述测试脚本参数中的待测试应用安装包的名称,在安卓设备上找到待测试应用安装包,并根据测试脚本参数中的预设运行时长,在安卓设备上运行所述待测试应用安装包。

检测模块26,用于检测安卓设备的系统版本;

从而,所述日志收集模块23具体包括:

当待测试应用安装包在安卓设备上运行后,根据安卓设备的不同系统版本,对与安卓设备的系统版本对应的虚拟机上的垃圾回收日志进行收集。

参加图4,分析模块24具体包括统计子单元241和确定子单元242,其中,垃圾回收日志中包括生成垃圾回收日志的时间戳,统计子单元241,用于根据生成垃圾回收日志的时间戳,统计安卓设备回收垃圾的频率以及在预设时间内回收垃圾的次数。确定子单元242,用于根据安卓设备回收垃圾的频率和在预设时间内回收垃圾的次数,确定安卓设备中是否存在内存抖动。

具体的,确定子单元242具体用于当安卓设备回收垃圾的频率小于预设频率且安卓设备在预设时间内回收垃圾的次数小于预设次数时,安卓设备不存在内存抖动,否则,安卓设备存在内存抖动。

基于上述图2、图3和图4对应实施例所提供的内存抖动自动化测试装置,本发明还提供了一种内存抖动自动化测试装置的测试设备。参见图5,该内存抖动自动化测试装置的测试设备包括:处理器(processor)501、存储器(memory)502、通信接口(communicationsinterface)503和总线504;

其中,处理器501、存储器502及通信接口503分别通过总线504完成相互间的通信;

通信接口503用于该测试设备与内存抖动自动化测试装置的通信设备之间的信息传输;

处理器501用于调用存储器502中的程序指令,以执行上述图1对应实施例所提供的内存抖动自动化测试方法,例如包括:当检测到安卓设备与测试平台连接成功后,获取测试脚本参数;根据所述测试脚本参数,使用测试平台上的命令行monkey工具向安卓设备发送运行指令,以使待测试应用安装包在安卓设备上运行;基于待测试应用安装包在安卓设备上运行后,收集安卓设备上的垃圾回收日志;对所述垃圾回收日志进行分析,来确定安卓设备是否存在内存抖动。

本发明公开一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,该计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述图1对应实施例所提供的内存抖动自动化测试方法,例如包括:当检测到安卓设备与测试平台连接成功后,获取测试脚本参数;根据所述测试脚本参数,使用测试平台上的命令行monkey工具向安卓设备发送运行指令,以使待测试应用安装包在安卓设备上运行;基于待测试应用安装包在安卓设备上运行后,收集安卓设备上的垃圾回收日志;对所述垃圾回收日志进行分析,来确定安卓设备是否存在内存抖动。

本发明提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令使计算机执行上述图1对应实施例所提供的内存抖动自动化测试方法,例如包括:当检测到安卓设备与测试平台连接成功后,获取测试脚本参数;根据所述测试脚本参数,使用测试平台上的命令行monkey工具向安卓设备发送运行指令,以使待测试应用安装包在安卓设备上运行;基于待测试应用安装包在安卓设备上运行后,收集安卓设备上的垃圾回收日志;对所述垃圾回收日志进行分析,来确定安卓设备是否存在内存抖动。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的内存抖动自动化测试装置的测试设备等实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分方法。

本发明提供的一种内存抖动自动化测试方法及装置,采用python语言编写测试脚本,并结合android自带的命令行monkey工具对安卓设备的内存抖动进行自动化测试,在保证测试的稳定性的同时,填补了安卓设备内存抖动检测的空白。在进行内存抖动分析时,通过垃圾回收的频率以及在预定时间内垃圾回收的次数进行分析,能够准确判断按照卓设备是否存在内存抖动。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1