应用程序性能测试方法及装置的制造方法_2

文档序号:9787312阅读:来源:国知局
数的分级策略,具体地,将需要测试的函数分为三类,第一类是应用程序中涉及操作系统框架的组件的函数,第二类是应用程序中由JAVA语言派生出来的函数,第三类是应用程序中自定义函数。其中,第一类的优先级高于第二类,第二类的优先级又高于第三类。也就是说,在具体测试过程中,可以先测试第一类函数,在第一类函数中没发现拖慢应用程序启动时间的函数的情况下,再测试第二类函数,在第二类函数中也没有发现拖慢应用程序启动时间的函数的情况下,再测试第三类函数。通过这种分级策略,提高了测试效率。当然,本发明不仅限于此,也可以是同时测试三类函数,或者在这三类函数中随机选择函数进行测试。
[0034]对于第一类函数,以Android系统为例,应用程序中涉及操作系统框架的组件有Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器等组件,这些组件中涉及开发人员编写的函数是需要测试的函数,例如组件中重写的函数。举例来说,BroadcastReceiver广播接收器是Android应用中一个重要的组件。BroadcastReceiver非常类似于事件编程中的监听器。与普通事件监听器不同的是:普通事件监听器监听的事件源是程序中的对象;而BroadcastReceiver监听的事件源是Android应用中的其他组件。当需要使用BroadcastReceiver组件接收广播消息时,开发人员需要实现自己的BroadcastReceiver子类,并重写onReceiveO函数。这里,onReceiveO函数就是需要测试的函数之一。
[0035]对于第二类函数,由JAVA语言派生出来的类和方法,指的是继承或重载JAVA已有类的类和方法。JAVA语言包含许多已实现的类和方法,继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。重载用于创建完成一组任务相似但参数的类型或参数的个数不同的方法。
[0036]对于第三类函数,开发人员自定义的类和方法。开发人员根据实际需求自定义的类和方法,用以实现特定功能,这些自定义的类和方法与JAVA已有类无继承关系,但可能具有引用关系。
[0037]步骤S202,解析得到应用程序中所有需要测试的线程,包括以下线程的一种或多种:继承线程基类的线程,以及应用程序中实现runable接口的线程。
[0038]在Android系统中,当一个应用程序第一次启动时,Android会同时启动一个对应的主线程(Main Thread),主线程主要负责处理与UI相关的事件,如用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,并把相关的事件分发到对应的组件进行处理。在android中有两种实现线程thread的方法:一种是扩展java.1ang.Thread类,另一种是实现runnable接口。因此本发明通过解析具有这两种特点的线程作为需要测试的线程。线程两个最主要的方法是:runO—一包含线程运行时所执行的代码,StartO—一用于启动线程。
[0039]步骤S203,在应用程序启动过程中,接管函数和/或线程,记录函数和/或线程的执行时间和调用次数。
[0040]对于函数,通过hook方法接管函数本身,记录函数的执行时间和调用次数。对于线程,通过hook方法接管线程的run()方法,记录线程的执行时间和调用次数。具体的,测试调用方在需要测试的函数和/或线程run()方法中设置hook事件,该hook事件用于监测函数和/或线程run()方法的执行时间和调用次数。在应用程序启动过程中,一旦某个需要测试的函数和/或线程run()方法执行完成,触发hook事件,测试调用方就会得到通知,继而得到被测试函数和/或线程run()方法的执行时间和调用次数。
[0041 ] 以onReceive()函数为例,onReceive()是用于处理接收到广播的函数,通过hook方法可明确知道处理广播需要的时间,即onReceiveO的执行时间。
[0042]步骤S204,根据函数和/或线程的单次调用的执行时间和调用次数,计算所述函数和/或线程的总执行时间。
[0043]在步骤S203中,可以得到函数和/或线程run()方法的单次调用的执行时间以及调用次数,如果某些函数和/或线程run()方法的调用次数为多次,则将多次调用的执行时间累加得到总执行时间;如果某些函数和/或线程run()方法的调用次数为一次,那么这些函数和/或线程run()方法的总执行时间就是这次调用的执行时间。
[0044]步骤S205,根据函数和/或线程的总执行时间计算单次调用的平均执行时间。
[0045]将函数和/或线程run()方法的总执行时间除以调用次数得到单次调用的平均执行时间。
[0046]步骤S206,根据函数和/或线程的总执行时间和/或单次调用的平均执行时间,对所有被测试的函数和/或线程进行排序,以供按照排序结果进行应用程序的调试。
[0047]本实施例中,可根据函数和/或线程的总执行时间对所有被测试的函数和/或线程进行排序,得到一个排序结果;再根据函数和/或线程的单次调用的平均执行时间对所有被测试的函数和/或线程进行排序,得到另一个排序结果。这两个排序结果供开发人员结合参考,确定优先级进行应用程序的调试。排序越靠前的函数和/或线程的优先级越高,开发人员优先对优先级高的函数和/或线程进行调试,确定执行时间过长的原因。
[0048]根据本实施例提供的应用程序性能测试方法,首先通过解析确定需要测试的函数和/或线程,然后启动应用程序,通过hook方法接管函数和/或线程,记录函数和/或线程的执行时间和调用次数,根据函数和/或线程的执行时间和调用次数,对所有被测试的函数和/或线程进行排序,以供按照排序结果进行应用程序的调试。本方法深入到应用程序内部,对应用程序内部的函数和/或线程进行测试,测试出哪个函数和/或线程的执行时间最长,调用次数最多。根据测试结果,开发人员可有针对性的对这些函数和/或线程进行调试,以解决应用程序启动时间过长的技术问题。在解析需要测试的函数时,可按照分级策略进行解析,提高了测试效率。
[0049]图3示出了根据本发明一个实施例的应用程序性能测试装置的功能框图。如图3所示,该装置包括:解析模块301,接管模块302,排序模块303。
[0050]解析模块301,适于解析得到应用程序中所有需要测试的函数和/或线程。解析模块301通过解析获取到应用程序需要进行测试的函数和/或线程,这些函数和/或线程都是应用程序启动过程中会执行的函数和/或线程。如果将应用程序启动过程中所有执行的函数和/或线程都进行测试,则会造成测试时间过长,且影响整个系统的性能,因此本发明通过解析从所有执行的函数和/或线程识别出需要测试的函数和/或线程,过滤出其它没有必要进行测试的函数和/或线程。本实施例中,解析模块301进一步适于:解析得到应用程序中涉及操作系统框架的组件的函数,和/或,解析得到应用程序中由JAVA语言派生出来的函数,和/或,解析得到应用程序中自定义函数。
[0051]进一步,本装置提供了解析函数的分级策略,具体地,将需要测试的函数分为三类,第一类是应用程序中涉及操作系统框架的组件的函数,第二类是应用程序中由JAVA语言派生出来的函数,第三类是应用程序中自定义函数。其中,第一类的优先级高于第二类,第二类的优先级又高于第三类。也就是说,在具体测试过程中,可以先解析并测试第一类函数,在第一类函数中没发现拖慢应用程序启动时间的函数的情况下,
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1