一种Android应用程序的能耗和性能测试方法与流程

文档序号:14294123阅读:213来源:国知局

本发明属于软件测试开发技术领域,特别涉及一种android应用程序的能耗和性能测试方法。



背景技术:

随着智能手机的普及,手机应用有着越来越广阔的市场前景,为使用者提供越来越便捷的功能。移动设备操作系统的重要性也日益凸显,在其中,android系统的发展速度尤为明显。最新的市场调查显示,2015年第四季度android操作系统在智能手机中的市场占有率超过75%。此外,伴随着应用开发技术的不断进步,android应用商店也在不断扩充,功能多样,视觉效果优良的应用层出不穷。但由于移动设备的自身限制,如电池有限无法随时充电,体积较小无法承载等同于pc机性能的硬件等,手机频繁运行此类高质量应用时,往往会出现系统运行流畅度下降,发热严重,电量消耗过快续航力不足等问题,导致服务质量无法满足用户需求,带来用户体验的下降。另一方面,在功能相近的情况下,消费者往往趋向于选择性能良好,占用cpu等硬件资源较少,耗电量较少的应用。因此,如何提高基于android操作系统的系统及应用性能,并解决如耗电量过快等问题是吸引使用者的关键之一,也得到越来越多的研究者的重视。

对开发者而言,若是能在开发阶段就发现高耗电的问题和原因并适时调整,提高应用的可用性,将能极大的提高软件应用的使用率,完善用户体验。另一方面,应用的性能表现也很值得开发者重视,手机应用相对于电脑端程序因为其平台的性能限制,应该更注重应用在cpu、内存等方面的性能,以便开发出高性能,低能耗的应用。

目前的安卓开发过程中,虽然有较多的性能和电量测试系统,但系统工具往往过于分散,系统中每一项工具都分别进行需要复杂的配置,且通常是在命令行下运行,缺乏直观、全面且易于在开发过程中同步使用的性能与电量监控系统。随着智能手机的迅速崛起,目前的手机的耗电量测试和性能测试逐渐得到重视,但仍有不少值得解决的问题。例如hoque等人的论文中提到,耗电量需要在手机连接额外的硬件进行测量,以及从耗电总量中得到手机电量各个部件的耗电量仍是比较困难的问题。在gerardo等人的论文中,通过对市场上大量的安卓应用进行性能测试发现恶意应用的过程中,仍然是对各方面性能指标使用不同的linux命令行工具来得到相应数据。这样做对一般开发者而言,需要同时使用多个工具而且各个工具仍需要比较复杂的配置,造成测试的不便,得到数据也以命令行形式得出,不够直观。



技术实现要素:

本发明的目的在于克服现有技术的缺点与不足,提供一种android应用程序的能耗和性能测试方法,该测试方法能够同时实现android应用程序的能耗和性能的实时测试,使得开发者在编程时能够实时了解到代码的优化和改变对android应用程序能耗和设备的资源占用造成的影响。

本发明的目的通过下述技术方案实现:一种android应用程序的能耗和性能测试方法,步骤如下:

步骤s1、在eclipse集成开发环境中集成包括能耗测试工具powertutor、性能测试工具top、性能测试工具vmstat和性能测试工具iostat的插件;

步骤s2、在eclipse集成开发环境中运行上述插件,由上述插件将能耗测试工具powertutor安装到android虚拟机或android真机中;

步骤s3、当android虚拟机或android真机中运行被测android应用程序时,能耗测试工具powertutor分别记录android虚拟机或android真机中各部件的耗电量;

同时,在eclipse集成开发环境中通过adbshell运行性能测试工具top、性能测试工具vmstat和性能测试工具iostat,通过性能测试工具top记录被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段cpu占用情况,通过性能测试工具vmstat记录被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段内存占用情况,通过性能测试工具iostat记录被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段磁盘读写情况。

优选的,所述步骤s3中,当android虚拟机或android真机中运行被测android应用程序时,能耗测试工具powertutor分别记录android虚拟机或android真机中cpu、显示屏、wi-fi模块和3g网络的耗电量。

优选的,所述步骤s3中,其中,当android虚拟机或android真机中运行被测android应用程序时,能耗测试工具powertutor首先获取到android虚拟机或android真机中cpu的耗电量,然后获取到android虚拟机或android真机中cpu运行被测android应用程序的耗电量,具体过程如下:

步骤s31、首先确定被测android应用程序所在android虚拟机或android真机的型号,获取能耗测试工具powertutor内置的该型号android的cpu频率和功率直接的关系曲线,根据被测android应用程序所在android虚拟机或android真机的实时频率,通过上述获取到的cpu频率和功率曲线得到被测android应用程序所在android虚拟机或android真机的cpu实时功耗;

其中能耗测试工具powertutor内置各种型号android终端的频率和功率之间的关系曲线图;

步骤s32、当要计算某时段android虚拟机或android真机中cpu运行被测android应用程序的耗电量时,将被测android应用程序所在android虚拟机或android真机在这个时间段的各cpu实时功耗进行累加,得到该时间段下被测android应用程序所在android虚拟机或android真机的cpu耗电量

步骤s33、获取被测android应用程序在android虚拟机或android真机中运行时的cpu利用率util,将步骤s32获取到的该段时间被测android应用程序所在android虚拟机或android真机的cpu耗电量与被测android应用程序在android虚拟机或android真机中运行时的cpu利用率util相乘,得到该段时间android虚拟机或android真机中cpu运行该被测android应用程序的的cpu耗电量powercpu

所述步骤s3中,其中,能耗测试工具powertutor记录到android虚拟机或android真机中wifi模块的耗电量的具体过程如下:

步骤s311、在运行被测android应用程序时,获取wifi模块每秒钟时间内四种状态所占用的时间比例,所述四种状态指的是wifi模块的高功率状态、低功率状态、高功率数据传输状态和低功率数据传输数据状态;

步骤s312、将wifi模块运行每秒钟时间内各种状态下的功率对应乘以每秒钟内各种状态所占用的时间比例后相加得到android虚拟机或android真机中wifi模块每秒钟的实时耗电量e:

e=a×a+b×b+c×c+d×d;

其中a、b、c和d分别为wifi模块高功率状态、低功率状态、高功率数据传输状态和低功率数据传输数据状态下的功率;a、b、c和d分别为wifi模块在每秒钟时间高功率状态、低功率状态、高功率数据传输状态和低功率数据传输数据状态分别占用的时间比例;其中

wifi模块高功率状态下的功率a为:

a=[710mw+βcr(rchannel)×rdata];

βcr(rchannel)=48-0.768×rchannel;

其中rchannel为wifi模块上行信道速率,rdata为wifi模块上行数据速率;

wifi模块低功率状态下的功率b、高功率数据传输状态下的功率c和低功率数据传输数据状态下功率d均为固定值。

更进一步的,所述步骤s3还包括以下步骤,计算某时段android虚拟机或android真机中cpu运行被测android应用程序中某一方法的耗电量,具体过程如下:首先获取被测android应用程序该方法在android虚拟机或android真机中运行时针对cpu的利用率,然后将该段时间android虚拟机或android真机中cpu运行该被测android应用程序的耗电量与被测android应用程序该方法在android虚拟机或android真机中运行时针对cpu的利用率相乘,得到该时段android虚拟机或android真机中cpu运行被测android应用程序中某一方法的耗电量。

优选的,所述步骤s1中,集成到eclipse集成开发环境中的插件还包括性能测量工具procrank,当android虚拟机或android真机中运行被测android应用程序时,在eclipse集成开发环境中通过adbshell运行性能测量工具procrank,通过性能测试工具procrank记录被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段每个进程的内存占用情况。

优选的,还包括如下步骤:在配置文件中配置被测android应用程序的包名以及工作空间路径;在eclipse集成开发环境中通过上述配置的被测android应用程序的包名以及工作空间路径在android虚拟机或android真机中寻找到被测android应用程序。

优选的,所述步骤s3中,能耗测试工具powertutor记录到android虚拟机或android真机中各部件的耗电量后,通过eclipse集成开发环境中的开源绘图类swt-chart分别生成各部件功率和时间曲线图并进行可视化。

优选的,所述步骤s3中,将性能测试工具top记录的被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段cpu占用情况信息在eclipse集成开发环境中进行可视化;

将性能测试工具vmstat记录的被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段内存占用情况信息在eclipse集成开发环境中进行可视化;

将性能测试工具iostat记录的被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段磁盘读写情况信息在eclipse集成开发环境中进行可视化。

优选的,所述步骤s1中,集成到eclipse集成开发环境中的插件还包括覆盖率工具emma;

所述步骤s3中,当android虚拟机或android真机中运行被测android应用程序时,覆盖率工具emma通过对被测android应用程序中编译后的java字节码文件进行插装,在测试过程中收集到被测android应用程序的覆盖率信息。

更进一步的,覆盖率工具emma收集的被测android应用程序的覆盖率信息后,通过eclipse集成开发环境中的工具marker和工具annotation的拓展,将覆盖率信息在eclipse集成开发环境中编辑器的代码行进行可视化显示,并且在工具marker面板显示被测android应用程序每个方法运行在android虚拟机或android真机中的耗电量信息和对应代码行。

本发明相对于现有技术具有如下的优点及效果:

(1)本发明一种android应用程序的能耗和性能测试方法,首先在在eclipse集成开发环境中集成包括能耗测试工具powertutor、性能测试工具top、性能测试工具vmstat和性能测试工具iostat的插件;然后在eclipse集成开发环境中运行上述插件,将能耗测试工具powertutor安装到android虚拟机或android真机中;当android虚拟机或android真机中运行被测android应用程序时,能耗测试工具powertutor分别记录android虚拟机或android真机中各部件的耗电量;同时在eclipse集成开发环境中通过adbshell运行性能测试工具top、性能测试工具vmstat和性能测试工具iostat,对应分别获取到被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段cpu占用情况、内存占用情况以及磁盘读写情况。由上述可知,本发明测试方法能够实现android终端各个部件的能耗测试,同时由于本发明测试方法能够获取到android应用程序针对android终端各时间段cpu占用情况、内存占用情况以及磁盘读写情况信息,因此本发明方法能够测试到android终端各部件在运行android应用程序时的耗电量的同时,也能够使得开发者了解到android终端的全局性能,使得开发者在编程时能够实时了解到代码的优化和改变对android应用程序能耗和设备的资源占用造成的影响。

(2)本发明android应用程序的能耗和性能测试方法中,根据能耗测试工具powertutor内置的各种型号android终端对应的频率和功率关系曲线能够获取到android虚拟机或android真机中cpu的实时功耗,从而计算得到各时段的耗电量,然后根据被测android应用程序针对cpu的利用率计算出android虚拟机或android真机中cpu运行被测android应用程序的耗电量,可见,本发明对能耗测试工具powertutor进行二次开发,大大提高了android虚拟机或android真机中cpu运行被测android应用程序的耗电量计算精度。

(3)本发明android应用程序的能耗和性能测试方法中,在获取到android虚拟机或android真机中cpu运行该被测android应用程序的耗电量后,能够根据被测android应用程序中各方法针对各部件的使用率计算出android虚拟机或android真机中cpu运行被测android应用程序中某一方法的耗电量。因此,本发明方法能够使得开发者更加详细的了解到被测android应用程序中各方法在cpu中的耗电量,实现应用级和方法级的耗电量监测,为开发者优化程序提供更加明确的方向。

(4)本发明android应用程序的能耗和性能测试方法中,在配置文件中配置被测android应用程序的包名以及工作空间路径,避免本发明在每次测试过程中需要反复读取路径,提高了本发明测试方法的执行效率。

(5)本发明android应用程序的能耗和性能测试方法中,通过eclipse集成开发环境中的开源绘图类swt-chart分别生成各部件功率和时间曲线图并进行可视化,被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段cpu占用情况信息、内存占用情况以及磁盘读写情况均在在eclipse集成开发环境中进行可视化,使得开发者可以更加直观的获取到android应用程序的能耗和性能测试结果。

(6)本发明android应用程序的能耗和性能测试方法中,在集成到eclipse集成开发环境中的插件中加入覆盖率工具emma;覆盖率工具emma能够通过对被测android应用程序中编译后的java字节码文件进行插装,在测试过程中收集到被测android应用程序的覆盖率信息,使得本发明能够同时实现android应用程序能耗、性能以及覆盖率信息的同时检测,,弥补了目前的android应用调试方法较为分散、不够全面和集成化的不足缺陷。另外本发明方法中,通过eclipse集成开发环境中的工具marker和工具annotation的拓展,能够将覆盖率信息在eclipse集成开发环境中编辑器的代码行进行可视化显示,并且在工具marker面板显示被测android应用程序每个方法运行在android虚拟机或android真机中的耗电量信息和对应代码行,使得开发者能够更加直观的获取到被测android应用程序代码覆盖率信息,更加容易的发现被测android应用程序代码是否有未被执行到的问题。

附图说明

图1是本发明方法生成的各部件功率和时间之间曲线以及所有部件总功率和时间之间曲线的可视化图。

图2是本发明方法中获取到的被测android应用程序在android虚拟机或android真机中的cpu占用情况可视界面图。

图3是本发明方法中获取到的被测android应用程序在android虚拟机或android真机中的内存占用情况可视界面图。

图4是本发明方法中获取到的被测android应用程序在android虚拟机或android真机中的硬盘占用情况可视界面图。

图5是本发明方法中marker工具在eclipse集成开发环境中实现的覆盖率可视化界面图。

图6是是本发明方法中获取到的在android虚拟机或android真机中cpu运行被测android应用程序各方法的耗电量可视界面图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例

本实施例公开了一种android应用程序的能耗和性能测试方法,其特征在于,步骤如下:

步骤s1、在eclipse集成开发环境中集成包括能耗测试工具powertutor、性能测试工具top、性能测试工具vmstat、性能测试工具iostat、性能测量工具procrank和覆盖率工具emma的插件;同时在配置文件中配置被测android应用程序的包名以及工作空间路径;在eclipse集成开发环境中通过上述配置的被测android应用程序的包名以及工作空间路径在android虚拟机或android真机中寻找到被测android应用程序。

步骤s2、在eclipse集成开发环境中运行上述插件,由上述插件将能耗测试工具powertutor安装到android虚拟机或android真机中。

步骤s3、当android虚拟机或android真机中运行被测android应用程序时,能耗测试工具powertutor分别记录android虚拟机或android真机中各部件的耗电量;能耗测试工具powertutor记录到android虚拟机或android真机中各部件的耗电量后,通过eclipse集成开发环境中的开源绘图类swt-chart分别生成android虚拟机或android真机各部件的功率和时间曲线图并进行可视化。如图1所示为运行被测android应用程序时,cpu、lcd屏幕分别运行被测android应用程序时的功率和时间曲线以及所有部件的总功率和时间曲线。

同时,在eclipse集成开发环境中通过adbshell运行性能测试工具top命令行工具,通过性能测试工具top记录被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段cpu占用情况以及cpu占用率;并将结果输出到输出路径,其中输出结果保留占cpu百分比前五个进程,并每隔6s输出一次,共输出10次,总共一分钟。具体命令如下:

adbshelltop-m5-n10-d6>outputpath

将上述性能测试工具top记录的被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段cpu占用情况信息在eclipse集成开发环境中进行界面可视化,如图2所示。

在eclipse集成开发环境中通过adbshell运行性能测试工具vmstat命令行工具,通过性能测试工具vmstat记录被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段内存占用情况,包括空闲内存、已占用内存、匿名内存和slab缓存。在本实施例中,通过adbshell运行vmstat命令行工具,并将结果输出到输出路径,每隔6s输出一次,共输出10次,总共一分钟。具体命令如下:

adbshellvmstat-n10-d6>outputpath

将性能测试工具vmstat记录的被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段内存占用情况信息在eclipse集成开发环境中进行界面可视化,如图3所示。

在eclipse集成开发环境中通过adbshell运行性能测试工具procrank命令行工具,通过性能测试工具procrank记录被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段每个进程的内存占用情况。

具体命令如下:

adbshell/system/xbin/procrank>outputpath

在eclipse集成开发环境中通过adbshell运行性能测试工具iostat命令行工具,通过性能测试工具iostat记录被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段磁盘读写情况,包括磁盘操作活动进行监视、汇报磁盘活动统计情况,同时也汇报出cpu使用情况。命令如下:

adbroot

adbremount

adbpushiostatpath/system/bin/

adbshellchmod755/system/bin/iostat

adbshelliostat-d610>outputpath

将性能测试工具iostat记录的被测android应用程序在运行时间内在android虚拟机或android真机中的各时间段磁盘读写情况信息在eclipse集成开发环境中进行界面可视化,如图4所示

同时,在本步骤中,当android虚拟机或android真机中运行被测android应用程序时,覆盖率工具emma通过对被测android应用程序中编译后的java字节码文件进行插装,在测试过程中收集到被测android应用程序的覆盖率信息。在本实施例中,覆盖率工具emma收集的被测android应用程序的覆盖率信息后,通过eclipse集成开发环境中的工具marker和工具annotation的拓展,将覆盖率信息在eclipse集成开发环境中编辑器的代码行进行可视化显示,并且在工具marker面板显示本次执行的方法的电量信息和代码行,如图5所示。

在上述步骤s3中,运行该被测android应用程序时,能耗测试工具powertutor分别记录android虚拟机或android真机中cpu、显示屏、wi-fi模块和3g网络的耗电量。

其中,所述步骤s3中,其中,当android虚拟机或android真机中运行被测android应用程序时,能耗测试工具powertutor首先获取到android虚拟机或android真机中cpu的耗电量,然后获取到android虚拟机或android真机中cpu运行被测android应用程序的耗电量,具体过程如下:

步骤s31、首先确定被测android应用程序所在android虚拟机或android真机的型号,获取能耗测试工具powertutor内置的该型号android的cpu频率和功率直接的关系曲线,根据被测android应用程序所在android虚拟机或android真机的实时频率,通过上述获取到的cpu频率和功率曲线得到被测android应用程序所在android虚拟机或android真机的cpu实时功耗;

其中能耗测试工具powertutor内置各种型号android终端的频率和功率之间的关系曲线图;

步骤s32、当要计算某时段android虚拟机或android真机中cpu运行被测android应用程序的耗电量时,将被测android应用程序所在android虚拟机或android真机在这个时间段的各cpu实时功耗进行累加,得到该时间段下被测android应用程序所在android虚拟机或android真机的cpu耗电量

步骤s33、获取被测android应用程序在android虚拟机或android真机中运行时的cpu利用率util,将步骤s32获取到的该段时间被测android应用程序所在android虚拟机或android真机的cpu耗电量与被测android应用程序在android虚拟机或android真机中运行时的cpu利用率util相乘,得到该段时间android虚拟机或android真机中cpu运行该被测android应用程序的的cpu耗电量powercpu

步骤s3中,其中,能耗测试工具powertutor记录到android虚拟机或android真机中wifi模块的耗电量的具体过程如下:

步骤s311、在运行被测android应用程序时,获取wifi模块每秒钟时间内四种状态所占用的时间比例,所述四种状态指的是wifi模块的高功率状态、低功率状态、高功率数据传输状态和低功率数据传输数据状态;当每秒传输的包数大于15时,wifi模块会从低功率数据传输状态转到高功率数据传输状态,而当每秒传输的包小于8时,wifi模块会从高功率数据传输状态转到低功率数据传输状态。当wifi在传输数据时,无论是低功率数据传输状态还是高功率传输,功率大约是1000mw,wifi模块每秒大约保持数据传输状态为10~15ms,其余时间会进入之前对应的高功率状态或低功率状态。

步骤s312、将wifi模块运行每秒钟时间内各种状态下的功率对应乘以每秒钟内各种状态所占用的时间比例后相加得到android虚拟机或android真机中wifi模块每秒钟的实时耗电量e:

e=a×a+b×b+c×c+d×d;

其中a、b、c和d分别为wifi模块高功率状态、低功率状态、高功率数据传输状态和低功率数据传输数据状态下的功率;a、b、c和d分别为wifi模块在每秒钟时间高功率状态、低功率状态、高功率数据传输状态和低功率数据传输数据状态分别占用的时间比例;其中

wifi模块高功率状态下的功率a为:

a=[710mw+βcr(rchannel)×rdata];

βcr(rchannel)=48-0.768×rchannel;

其中rchannel为wifi模块上行信道速率,rdata为wifi模块上行数据速率;

wifi模块低功率状态下的功率b、高功率数据传输状态下的功率c和低功率数据传输数据状态下功率d均为固定值;在本实施例中,b为20mw,c和d均为1000mw,计算得到的a在700mw~750mw的范围内波动。

在本实施例中,所述步骤s3中,当计算出某时段android虚拟机或android真机中cpu运行被测android应用程序的耗电量后,还可以计算某时段android虚拟机或android真机中cpu运行被测android应用程序中某一方法的耗电量,具体过程如下:首先获取被测android应用程序该方法在android虚拟机或android真机中运行时针对cpu的利用率,然后将该段时间android虚拟机或android真机中cpu运行该被测android应用程序的耗电量与被测android应用程序该方法在android虚拟机或android真机中运行时针对cpu的利用率相乘,得到该时段android虚拟机或android真机中cpu运行被测android应用程序中某一方法的耗电量:

获取为该时段android虚拟机或android真机中cpu运行被测android应用程序中方法i的耗电量;utili被测android应用程序方法i在android虚拟机或android真机中运行时的cpu利用率。如图6所示,为某时段android虚拟机或android真机中cpu运行被测android应用程序中各方法的耗电量的可视化界面。

其中被测android应用程序中的方法包括获取资源getresources()方法、生成窗口oncreate()方法、获取资源getresources()方法以及获取数组getstringarray()方法。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

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