本技术涉及计算机,特别是涉及一种应用程序测试方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术:
1、随着计算机技术的发展,出现了一种针对于anr,即应用程序无响应的测试方法,该anr指的是在应用程序未按预期响应ui的进程,系统则默认会弹出“应用无响应”的弹窗,来让用户选择继续等待响应或者关闭app。目前主要有以下两种情况造成anr,即主线程在处理其他事件导致的当前事件没机会处理,或者当前事件正被处理但耗时太长无法完成两种。
2、传统技术中,对anr问题的测试通常是通过稳定性测试工具来实现,该工具可以通过不间断的持续运行应用程序进行随机测试,来发现anr问题。然而,上述测试方法随机性较大,耗时较长,无法覆盖所有场景,并且相同场景下处理事件的线程也往往是随机的,稳定性测试工具不一定能发现,因此,目前对应用程序的anr问题进行测试的方法测试效率较低,并且测试精度也较低。
技术实现思路
1、基于此,有必要针对上述技术问题,提供一种能够提高对应用程序的anr问题的测试效率与测试精度的应用程序测试方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
2、第一方面,本技术提供了一种应用程序测试方法,包括:
3、获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
4、从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
5、根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
6、根据各所述链路底端函数,获取所述待测试应用程序的anr测试结果。
7、在其中一个实施例中,所述函数链路关系信息通过函数链路文件进行存储;所述根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数,包括:将各所述耗时类操作函数作为链路顶端函数,并利用所述函数链路文件中存储的函数链路关系信息,生成各所述耗时类操作函数对应的调用关系链;将各所述耗时类操作函数对应的调用关系链中的链路底端函数,作为各所述耗时类操作函数对应的链路底端函数。
8、在其中一个实施例中, 所述利用所述函数链路文件中存储的函数链路关系信息,生成各所述耗时类操作函数对应的调用关系链,包括:将所述链路顶端函数作为被调用函数,从所述函数链路文件中,获取与被调用函数存在函数调用关系的调用函数;将所述调用函数作为新的被调用函数,并返回执行从所述函数链路文件中,获取与被调用函数存在函数调用关系的调用函数的步骤,直到所述函数链路文件中不存在与所述被调用函数存在函数调用关系的调用函数;利用所述耗时类操作函数,以及各所述调用函数,生成所述耗时类操作函数对应的调用关系链。
9、在其中一个实施例中,所述函数链路文件包括:用于存储各所述操作函数的直接调用关系的第一函数链路文件;所述获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息,包括:获取各所述操作函数对应的直接调用函数,以及各所述操作函数对应的函数类名、函数名以及函数参数;获取各所述直接调用函数对应的函数类名、函数名以及函数参数;利用各所述操作函数对应的函数类名、函数名以及函数参数,与各所述直接调用函数对应的函数类名、函数名以及函数参数,构造操作函数的直接调用关系,形成第一函数链路文件。
10、在其中一个实施例中,所述函数链路文件还包括:用于存储父类函数或接口函数,与所述父类函数或接口函数对应的重写函数之间关系的第二函数链路文件;所述获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息,包括:获取各所述操作函数对应的父类类名信息与接口类名信息,根据所述父类类名信息获取各所述操作函数对应的父类函数,以及根据所述接口类名信息获取各所述操作函数对应的接口函数;在所述第一函数链路文件中包含所述父类函数的情况下,将所述父类函数对应的操作函数作为第一重写函数,并利用所述父类函数对应的函数类名、函数名以及函数参数,与对应的第一重写函数的函数类名、函数名以及函数参数,构造所述父类函数与所述第一重写函数的关系;在所述第一函数链路文件中包含所述接口函数的情况下,将所述接口函数对应的操作函数作为第二重写函数,并利用所述接口函数对应的函数类名、函数名以及函数参数,与对应的第二重写函数的函数类名、函数名以及函数参数,构造所述接口函数与所述第二重写函数的关系;利用构造的所述父类函数与所述第一重写函数的关系,以及所述接口函数与所述第二重写函数的关系,形成第二函数链路文件。
11、在其中一个实施例中,所述从各所述操作函数中,获取耗时类操作函数,包括:获取预先构建的包含有全量耗时类操作函数的耗时类操作函数文件;在所述耗时类操作函数文件中包括所述业务代码中包含的操作函数的情况下,将所述操作函数作为所述耗时类操作函数。
12、在其中一个实施例中,所述获取预先构建的包含有全量耗时类操作函数的耗时类操作函数文件之前,还包括:获取当前操作函数,以及所述当前操作函数执行操作的操作类型;所述当前操作函数为任意一个操作函数;在所述操作类型为预设操作类型的情况下,将所述当前操作函数设置为耗时类操作函数,并获取所述当前操作函数对应的函数类名、函数名以及函数参数;利用所述函数类名、函数名以及所述函数参数,构建所述耗时类操作函数文件。
13、在其中一个实施例中,所述在所述耗时类操作函数文件中包括所述业务代码中包含的操作函数的情况下,将所述操作函数作为所述耗时类操作函数,包括:获取所述业务代码中包含的各所述操作函数对应的函数类名、函数名以及所述函数参数;在所述耗时类操作函数文件中包括所述操作函数对应的函数类名、函数名以及所述函数参数的情况下,将所述操作函数作为所述耗时类操作函数。
14、在其中一个实施例中,所述根据各所述链路底端函数,获取所述待测试应用程序的anr测试结果,包括:获取预先构建的主线程函数白名单;所述主线程函数白名单中存储有多种在主线程中运行的函数;在所述主线程函数白名单中存在与所述链路底端函数相匹配的函数的情况下,确定所述待测试应用程序中包含的,与所述链路底端函数对应的耗时类操作函数存在anr风险。
15、第二方面,本技术还提供了一种应用程序测试装置,包括:
16、函数关系获取模块,用于获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
17、耗时函数获取模块,用于从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
18、链路底端获取模块,用于根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
19、测试结果获取模块,用于根据各所述链路底端函数,获取所述待测试应用程序的anr测试结果。
20、第三方面,本技术还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
21、获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
22、从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
23、根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
24、根据各所述链路底端函数,获取所述待测试应用程序的anr测试结果。
25、第四方面,本技术还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
26、获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
27、从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
28、根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
29、根据各所述链路底端函数,获取所述待测试应用程序的anr测试结果。
30、第五方面,本技术还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
31、获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
32、从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
33、根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
34、根据各所述链路底端函数,获取所述待测试应用程序的anr测试结果。
35、上述应用程序测试方法、装置、计算机设备、存储介质和计算机程序产品,通过获取待测试应用程序的业务代码,以及获取业务代码中包含的操作函数与各操作函数对应的函数链路关系信息;从各操作函数中,获取耗时类操作函数;耗时类操作函数执行的操作耗时大于预设时长;根据耗时类操作函数对应的函数链路关系信息,获取各耗时类操作函数对应的链路底端函数;根据各链路底端函数,获取待测试应用程序的anr测试结果。本技术可以通过对应用程序的业务代码进行分析,来得到业务代码中包含的操作函数与函数链路关系,进而确定出该业务代码中包含的耗时类操作函数对应的函数链路关系信息,来得到耗时类操作函数对应的链路底端函数,从而基于链路底端函数来得到anr测试结果,通过该方式可以避免采用随机性测试的方法来实现anr测试,从而提高anr测试的测试效率与测试精度。