CN118012752A - 应用程序测试方法、计算机设备和存储介质 - Google Patents

应用程序测试方法、计算机设备和存储介质 Download PDF

Info

Publication number
CN118012752A
CN118012752A CN202410056035.0A CN202410056035A CN118012752A CN 118012752 A CN118012752 A CN 118012752A CN 202410056035 A CN202410056035 A CN 202410056035A CN 118012752 A CN118012752 A CN 118012752A
Authority
CN
China
Prior art keywords
function
time
link
consuming
class
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202410056035.0A
Other languages
English (en)
Inventor
吴柳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Music Entertainment Technology Shenzhen Co Ltd
Original Assignee
Tencent Music Entertainment Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Music Entertainment Technology Shenzhen Co Ltd filed Critical Tencent Music Entertainment Technology Shenzhen Co Ltd
Priority to CN202410056035.0A priority Critical patent/CN118012752A/zh
Publication of CN118012752A publication Critical patent/CN118012752A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请涉及一种应用程序测试方法、计算机设备和存储介质。所述方法包括:获取待测试应用程序的业务代码,以及获取业务代码中包含的操作函数与各操作函数对应的函数链路关系信息;从各操作函数中,获取耗时类操作函数;耗时类操作函数执行的操作耗时大于预设时长;根据耗时类操作函数对应的函数链路关系信息,获取各耗时类操作函数对应的链路底端函数;根据各链路底端函数,获取待测试应用程序的ANR测试结果。采用本方法能够避免采用随机性测试的方法来实现ANR测试,从而提高ANR测试的测试效率与测试精度。

Description

应用程序测试方法、计算机设备和存储介质
技术领域
本申请涉及计算机技术领域,特别是涉及一种应用程序测试方法、装置、计算机设备、存储介质和计算机程序产品。
背景技术
随着计算机技术的发展,出现了一种针对于ANR,即应用程序无响应的测试方法,该ANR指的是在应用程序未按预期响应UI的进程,系统则默认会弹出“应用无响应”的弹窗,来让用户选择继续等待响应或者关闭APP。目前主要有以下两种情况造成ANR,即主线程在处理其他事件导致的当前事件没机会处理,或者当前事件正被处理但耗时太长无法完成两种。
传统技术中,对ANR问题的测试通常是通过稳定性测试工具来实现,该工具可以通过不间断的持续运行应用程序进行随机测试,来发现ANR问题。然而,上述测试方法随机性较大,耗时较长,无法覆盖所有场景,并且相同场景下处理事件的线程也往往是随机的,稳定性测试工具不一定能发现,因此,目前对应用程序的ANR问题进行测试的方法测试效率较低,并且测试精度也较低。
发明内容
基于此,有必要针对上述技术问题,提供一种能够提高对应用程序的ANR问题的测试效率与测试精度的应用程序测试方法、装置、计算机设备、计算机可读存储介质和计算机程序产品。
第一方面,本申请提供了一种应用程序测试方法,包括:
获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
根据各所述链路底端函数,获取所述待测试应用程序的ANR测试结果。
在其中一个实施例中,所述函数链路关系信息通过函数链路文件进行存储;所述根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数,包括:将各所述耗时类操作函数作为链路顶端函数,并利用所述函数链路文件中存储的函数链路关系信息,生成各所述耗时类操作函数对应的调用关系链;将各所述耗时类操作函数对应的调用关系链中的链路底端函数,作为各所述耗时类操作函数对应的链路底端函数。
在其中一个实施例中, 所述利用所述函数链路文件中存储的函数链路关系信息,生成各所述耗时类操作函数对应的调用关系链,包括:将所述链路顶端函数作为被调用函数,从所述函数链路文件中,获取与被调用函数存在函数调用关系的调用函数;将所述调用函数作为新的被调用函数,并返回执行从所述函数链路文件中,获取与被调用函数存在函数调用关系的调用函数的步骤,直到所述函数链路文件中不存在与所述被调用函数存在函数调用关系的调用函数;利用所述耗时类操作函数,以及各所述调用函数,生成所述耗时类操作函数对应的调用关系链。
在其中一个实施例中,所述函数链路文件包括:用于存储各所述操作函数的直接调用关系的第一函数链路文件;所述获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息,包括:获取各所述操作函数对应的直接调用函数,以及各所述操作函数对应的函数类名、函数名以及函数参数;获取各所述直接调用函数对应的函数类名、函数名以及函数参数;利用各所述操作函数对应的函数类名、函数名以及函数参数,与各所述直接调用函数对应的函数类名、函数名以及函数参数,构造操作函数的直接调用关系,形成第一函数链路文件。
在其中一个实施例中,所述函数链路文件还包括:用于存储父类函数或接口函数,与所述父类函数或接口函数对应的重写函数之间关系的第二函数链路文件;所述获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息,包括:获取各所述操作函数对应的父类类名信息与接口类名信息,根据所述父类类名信息获取各所述操作函数对应的父类函数,以及根据所述接口类名信息获取各所述操作函数对应的接口函数;在所述第一函数链路文件中包含所述父类函数的情况下,将所述父类函数对应的操作函数作为第一重写函数,并利用所述父类函数对应的函数类名、函数名以及函数参数,与对应的第一重写函数的函数类名、函数名以及函数参数,构造所述父类函数与所述第一重写函数的关系;在所述第一函数链路文件中包含所述接口函数的情况下,将所述接口函数对应的操作函数作为第二重写函数,并利用所述接口函数对应的函数类名、函数名以及函数参数,与对应的第二重写函数的函数类名、函数名以及函数参数,构造所述接口函数与所述第二重写函数的关系;利用构造的所述父类函数与所述第一重写函数的关系,以及所述接口函数与所述第二重写函数的关系,形成第二函数链路文件。
在其中一个实施例中,所述从各所述操作函数中,获取耗时类操作函数,包括:获取预先构建的包含有全量耗时类操作函数的耗时类操作函数文件;在所述耗时类操作函数文件中包括所述业务代码中包含的操作函数的情况下,将所述操作函数作为所述耗时类操作函数。
在其中一个实施例中,所述获取预先构建的包含有全量耗时类操作函数的耗时类操作函数文件之前,还包括:获取当前操作函数,以及所述当前操作函数执行操作的操作类型;所述当前操作函数为任意一个操作函数;在所述操作类型为预设操作类型的情况下,将所述当前操作函数设置为耗时类操作函数,并获取所述当前操作函数对应的函数类名、函数名以及函数参数;利用所述函数类名、函数名以及所述函数参数,构建所述耗时类操作函数文件。
在其中一个实施例中,所述在所述耗时类操作函数文件中包括所述业务代码中包含的操作函数的情况下,将所述操作函数作为所述耗时类操作函数,包括:获取所述业务代码中包含的各所述操作函数对应的函数类名、函数名以及所述函数参数;在所述耗时类操作函数文件中包括所述操作函数对应的函数类名、函数名以及所述函数参数的情况下,将所述操作函数作为所述耗时类操作函数。
在其中一个实施例中,所述根据各所述链路底端函数,获取所述待测试应用程序的ANR测试结果,包括:获取预先构建的主线程函数白名单;所述主线程函数白名单中存储有多种在主线程中运行的函数;在所述主线程函数白名单中存在与所述链路底端函数相匹配的函数的情况下,确定所述待测试应用程序中包含的,与所述链路底端函数对应的耗时类操作函数存在ANR风险。
第二方面,本申请还提供了一种应用程序测试装置,包括:
函数关系获取模块,用于获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
耗时函数获取模块,用于从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
链路底端获取模块,用于根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
测试结果获取模块,用于根据各所述链路底端函数,获取所述待测试应用程序的ANR测试结果。
第三方面,本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
根据各所述链路底端函数,获取所述待测试应用程序的ANR测试结果。
第四方面,本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
根据各所述链路底端函数,获取所述待测试应用程序的ANR测试结果。
第五方面,本申请还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:
获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
根据各所述链路底端函数,获取所述待测试应用程序的ANR测试结果。
上述应用程序测试方法、装置、计算机设备、存储介质和计算机程序产品,通过获取待测试应用程序的业务代码,以及获取业务代码中包含的操作函数与各操作函数对应的函数链路关系信息;从各操作函数中,获取耗时类操作函数;耗时类操作函数执行的操作耗时大于预设时长;根据耗时类操作函数对应的函数链路关系信息,获取各耗时类操作函数对应的链路底端函数;根据各链路底端函数,获取待测试应用程序的ANR测试结果。本申请可以通过对应用程序的业务代码进行分析,来得到业务代码中包含的操作函数与函数链路关系,进而确定出该业务代码中包含的耗时类操作函数对应的函数链路关系信息,来得到耗时类操作函数对应的链路底端函数,从而基于链路底端函数来得到ANR测试结果,通过该方式可以避免采用随机性测试的方法来实现ANR测试,从而提高ANR测试的测试效率与测试精度。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一个实施例中应用程序测试方法的流程示意图;
图2为一个实施例中获取各链路底端函数的流程示意图;
图3为一个实施例中生成调用关系链的流程示意图;
图4为一个实施例中获取操作函数对应函数链路关系信息的流程示意图;
图5为另一个实施例中获取操作函数对应函数链路关系信息的流程示意图;
图6为一个实施例中主线程耗时操作类ANR测试方法的工作流程图;
图7为一个实施例中主线程耗时操作类ANR测试方法的工作原理图;
图8为一个实施例中应用程序测试装置的结构框图;
图9为一个实施例中计算机设备的内部结构图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
在一个实施例中,如图1所示,提供了一种应用程序测试方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:
步骤S101,获取待测试应用程序的业务代码,以及获取业务代码中包含的操作函数与各操作函数对应的函数链路关系信息。
待测试应用程序指的是需要进行ANR测试的应用程序,例如可以是某个音乐播放应用程序,而业务代码则指的是待测试应用程序对应的底层项目代码,该代码可以包含多个操作函数,而函数链路关系信息则是用于表征操作函数之间调用链路关系的信息,该信息可以通过诸如ASM插桩插件、AST(抽象语法树)、AOP(面向切面编程)和静态逆向反汇编方案等方法提取得到。
具体来说,终端在对某个待测试应用程序进行ANR测试时,可以先提取出该应用程序的业务代码,并提取出该业务代码中包含的各个操作函数,以及上述各个操作函数分别对应的函数链路关系信息。
步骤S102,从各操作函数中,获取耗时类操作函数;耗时类操作函数执行的操作耗时大于预设时长。
耗时类操作函数指的是操作函数中,执行操作的耗时超过预设时长的函数,该耗时类操作函数可以预先定义,例如将诸如下载操作、数据库操作、文件操作、网络请求等执行需要耗费大量操作时间的操作函数,作为耗时类操作函数。终端得到待测试应用程序包含的各个操作函数后,则可以从上述操作函数中,筛选出相应的耗时类操作函数。
步骤S103,根据耗时类操作函数对应的函数链路关系信息,获取各耗时类操作函数对应的链路底端函数;
步骤S104,根据各链路底端函数,获取待测试应用程序的ANR测试结果。
链路底端函数指的是函数链路关系信息中最底端的函数,例如可以是最初始调用的函数,例如某个函数A被函数B调用,而函数B被函数C调用,那么函数C则可以是函数A的链路底端函数。终端在确定出耗时类操作函数后,还可以进一步得到该耗时类操作函数对应的函数链路关系信息,从而利用该函数链路关系信息来找到每一个耗时类操作函数对应的链路底端函数,从而利用耗时类操作函数对应的链路底端函数,来识别出待测试应用程序是否存在ANR问题,从而得到待测试应用程序的ANR测试结果。
上述应用程序测试方法中,通过获取待测试应用程序的业务代码,以及获取业务代码中包含的操作函数与各操作函数对应的函数链路关系信息;从各操作函数中,获取耗时类操作函数;耗时类操作函数执行的操作耗时大于预设时长;根据耗时类操作函数对应的函数链路关系信息,获取各耗时类操作函数对应的链路底端函数;根据各链路底端函数,获取待测试应用程序的ANR测试结果。本申请可以通过对应用程序的业务代码进行分析,来得到业务代码中包含的操作函数与函数链路关系,进而确定出该业务代码中包含的耗时类操作函数对应的函数链路关系信息,来得到耗时类操作函数对应的链路底端函数,从而基于链路底端函数来得到ANR测试结果,通过该方式可以避免采用随机性测试的方法来实现ANR测试,从而提高ANR测试的测试效率与测试精度。
在一个实施例中,函数链路关系信息通过函数链路文件进行存储;函数链路文件中存储有各操作函数的函数链路关系信息;如图2所示,步骤S103可以进一步包括:
步骤S201,将各耗时类操作函数作为链路顶端函数,并利用函数链路文件中存储的函数链路关系信息,生成各耗时类操作函数对应的调用关系链。
函数链路文件是用于存储函数链路关系信息的文本格式文件,该文件中可以存储有待测试应用程序的业务代码中报的各个操作函数的函数链路关系信息,而调用关系链则是用于表征操作函数调用关系的关系链路,例如调用关系链可以是函数A-函数B-函数C,则可以表征函数A被函数B调用,而函数B则被函数C调用,其中函数A可以作为调用关系链的链路顶端函数,而函数C则是调用关系链的链路底端函数。
本实施例中,终端获取各个耗时类操作函数对应的链路底端函数的方法,可以是先通过生成各个耗时类操作函数对应的调用关系链,即先将任意一个耗时类操作函数设置调用关系链的链路顶端函数,之后,即可根据函数链路文件中存储的函数链路关系信息,来生成各个耗时类操作函数对应的调用关系链。例如,函数A是耗时类操作函数,并且在函数链路文件中,可以存储有函数A被函数B调用,函数B被函数C调用的函数链路关系信息,那么终端则可以利用上述调用关系信息,生成函数A对应的调用关系链,即生成函数A-函数B-函数C。
步骤S202,将各耗时类操作函数对应的调用关系链中的链路底端函数,作为各耗时类操作函数对应的链路底端函数。
而在生成各耗时类操作函数对应的调用关系链后,终端还可以将每个调用关系链中的链路底端函数,作为各个耗时类操作函数相应的链路底端函数,例如针对于函数A-函数B-函数C这一调用关系链而言,函数C则可以作为耗时类操作函数A对应的链路底端函数。
本实施例中,还可以通过函数链路文件来存储函数链路关系信息,在得到各耗时类操作函数后,则可以将其作为链路顶端函数,来利用函数链路文件中存储的函数链路关系信息生成调用关系链,从而将调用关系链中的链路底端函数作为耗时类操作函数对应的链路底端函数,通过该方式可以提高链路底端函数的获取效率。
进一步地,如图3所示,步骤S201可以进一步包括:
步骤S301,将链路顶端函数作为被调用函数,从函数链路文件中,获取与被调用函数存在函数调用关系的调用函数。
其中,被调用函数指的是函数调用关系中,被调用的函数,而调用函数则是函数调用关系中,发起函数调用的函数。本实施例中,函数链路文件中可以存储有各个操作函数对应的函数链路关系信息,即存储有各个操作函数之间的函数调用关系,终端在得到链路顶端函数后,可以将链路顶端函数作为被调用函数,并从函数链路文件中,确定出调用该被调用函数,即与被调用函数存在函数调用关系的调用函数。
步骤S302,将调用函数作为新的被调用函数,并返回执行步骤S301,直到函数链路文件中不存在与被调用函数存在函数调用关系的调用函数。
而在步骤S301得到调用函数后,终端还可以进一步将确定出的调用函数设置为新的被调用函数,从而再次执行步骤S301,即从函数链路文件中,获取与被调用函数存在函数调用关系的调用函数,直到函数链路文件中不存在与被调用函数存在函数调用关系的调用函数。
例如,终端在将链路顶端函数A作为被调用函数后,可以先从函数链路文件中查询出与函数A存在函数调用关系的调用函数,可以是函数B调用了函数A,那么则可以将函数B作为函数A的调用函数。之后终端则可以再次将函数B作为被调用函数,从函数链路文件中查询出与函数B存在函数调用关系的调用函数,可以是函数C,那么只可以将函数C作为函数B的调用函数,此时如果函数链路文件中不存在与函数C存在函数调用关系的调用函数时,则停止上述循环。
步骤S303,利用耗时类操作函数,以及各调用函数,生成耗时类操作函数对应的调用关系链。
最后,在得到耗时类操作函数,以及上述各个调用函数后,则可以利用耗时类操作函数,以及各调用函数,来生成耗时类操作函数对应的调用关系链。
本实施例中,终端可以通过将链路顶端函数作为被调用函数,从函数链路文件中,获取与被调用函数存在函数调用关系的调用函数,并且循环将得到的调用函数作为新的被调用函数,来生成耗时类操作函数对应的调用关系链,通过该方式可以提高调用关系链生成的准确性。
在一个实施例中,函数链路文件包括:用于存储各操作函数的直接调用关系的第一函数链路文件;如图4所示,步骤S101可以进一步包括:
步骤S401,获取各操作函数对应的直接调用函数,以及各操作函数对应的函数类名、函数名以及函数参数。
本实施例中,函数链路文件可以包括第一函数链路文件,该第一函数链路文件可以用于存储各个操作函数之间的直接调用关系,而函数类名、函数名与函数参数则是组成操作函数的三个要素,终端可以通过函数类名、函数名与函数参数,来实现操作函数的唯一标识。
具体来说,终端在得到待测试应用程序的业务代码后,则可以通过诸如ASM插桩等方式,来得到业务代码中包含的各个操作函数,以及直接调用各个操作函数的直接调用函数。之后终端还可以进一步提取出各个操作函数的函数类名、函数名以及包含的函数参数,用于唯一标识各个操作函数。
步骤S402,获取各直接调用函数对应的函数类名、函数名以及函数参数;
步骤S403,利用各操作函数对应的函数类名、函数名以及函数参数,与各直接调用函数对应的函数类名、函数名以及函数参数,构造操作函数的直接调用关系,形成第一函数链路文件。
同理,对于直接调用函数而言,终端也可以利用直接调用函数的函数类名、函数名以及其包含的函数参数,来唯一标识直接调用函数,本实施例中,终端在得到各个操作函数对应的直接调用函数之后,还可以进一步得到直接调用函数对应的函数类名、函数名以及其包含的函数参数,从而利用各操作函数对应的函数类名、函数名以及包含的函数参数,与该操作函数对应的直接调用函数的对应的函数类名、函数名以及包含的函数参数,来构建每一个操作函数与直接调用函数之间的对应关系,从而得到各个操作函数的直接调用关系,形成第一函数链路文件。
本实施例中,终端可以通过采集业务代码中各个操作函数对应的函数类名、函数名以及包含的函数参数,与直接调用函数对应的函数类名、函数名以及包含的函数参数,来构建操作函数与直接调用函数之间的直接调用关系,来形成第一函数链路文件,通过该方式可以进一步确保函数链路文件构造的准确性。
另外,函数链路文件还包括:用于存储父类函数或接口函数,与父类函数或接口函数对应的重写函数之间关系的第二函数链路文件;如图5所示,步骤S101还可以进一步包括:
步骤S501,获取各操作函数对应的父类类名信息与接口类名信息,根据父类类名信息获取各操作函数对应的父类函数,以及根据接口类名信息获取各操作函数对应的接口函数。
本实施例中,函数链路文件除了可以包括用于存储各个操作函数之间的直接调用关系的第一函数链路文件,还可以包括用于存储父类函数或接口函数,与其对应的重写函数之间关系的第二函数链路文件。
具体来说,在第一函数链路文件中,除了可以存储有各操作函数对应的函数类名、函数名以及函数参数,还可以存储有各操作函数对应的父类函数的类名信息,即父类类名信息,以及各个操作函数对应的接口函数的类名信息,即接口类名信息。因此终端在完成第一函数链路文件的构建后,即可从第一函数链路文件中,得到各操作函数对应的父类类名信息以及接口类名信息。
同时,由于各操作函数对应的父类函数或接口函数,与该操作函数具有函数类名不同,但函数名与函数参数相同的性质,并且函数类名、函数名与函数参数,可以实现函数的唯一标识,因此终端可以将得到的父类类名信息,与该操作函数的函数名与函数参数进行拼接,来得到各操作函数唯一标识的父类函数,同时也可以将得到的接口类名信息,与该操作函数的函数名与函数参数进行拼接,来得到各操作函数唯一标识的接口函数。
步骤S502,在第一函数链路文件中包含父类函数的情况下,将父类函数对应的操作函数作为第一重写函数,并利用父类函数对应的函数类名、函数名以及函数参数,与对应的第一重写函数的函数类名、函数名以及函数参数,构造父类函数与第一重写函数的关系。
第一重写函数则指的是其对应的父类函数包含在第一函数链路文件中的重写函数,终端在得到各操作函数对应的父类函数后,则可以检测上述各父类函数是否在第一函数链路文件中包含,如果是,终端则可以将该操作函数作为第一重写函数,并且利用父类函数对应的函数类名、函数名以及函数参数,与第一重写函数的函数类名、函数名以及函数参数,来构造该父类函数与第一重写函数的关系。
步骤S503,在第一函数链路文件中包含接口函数的情况下,将接口函数对应的操作函数作为第二重写函数,并利用接口函数对应的函数类名、函数名以及函数参数,与对应的第二重写函数的函数类名、函数名以及函数参数,构造接口函数与第二重写函数的关系。
第二重写函数则指的是其对应的接口函数包含在第一函数链路文件中的重写函数,与父类函数类似,终端在得到各操作函数对应的接口函数后,则可以检测上述各接口函数是否在第一函数链路文件中包含,如果是,终端则可以将该操作函数作为第二重写函数,并且利用接口函数对应的函数类名、函数名以及函数参数,与第二重写函数的函数类名、函数名以及函数参数,来构造该接口函数与第二重写函数的关系。
步骤S504,利用构造的父类函数与第一重写函数的关系,以及接口函数与第二重写函数的关系,形成第二函数链路文件。
最后,在完成父类函数与第一重写函数的关系构建,以及接口函数与第二重写函数的关系的构建后,即可利用上述关系,来形成第二链路文件,来进一步完善函数链路文件的完整性。
本实施例中,存储有函数链路关系信息的函数链路文件,除了可以包含有用于存储操作函数与其直接调用函数之间关系的第一函数链路文件,还包含有用于存储父类函数或接口函数与其对应的重写函数之间关系的第二函数链路文件,通过本实施例可以进一步完善函数链路文件的完整性,从而进一步提高ANR测试结果获取的准确性。
在一个实施例中,步骤S102可以进一步包括:获取预先构建的包含有全量耗时类操作函数的耗时类操作函数文件;在耗时类操作函数文件中包括业务代码中包含的操作函数的情况下,将操作函数作为耗时类操作函数。
耗时类操作函数文件是用于存储各种类型的耗时类操作函数的文本文件,本实施例中,终端筛选耗时类操作函数的方法可以是将从业务代码中提取得到的操作函数,与耗时类操作函数文件中存储的全量耗时类操作函数进行比对,如果业务代码中包含的某个操作函数,命中了耗时类操作函数文件中存储的全量耗时类操作函数,则说明该操作函数属于耗时类操作函数,从而将该操作函数设置为耗时类操作函数。
本实施例中,终端可以通过预先构建存储有全量耗时类操作函数的耗时类操作函数文件,从而利用耗时类操作函数文件,来判断业务代码中包含的操作函数是否为耗时类操作函数,通过该方式可以进一步提高耗时类操作函数筛选的效率与准确性。
另外,在获取预先构建的包含有全量耗时类操作函数的耗时类操作函数文件之前,还可以包括:获取当前操作函数,以及当前操作函数执行操作的操作类型;当前操作函数为任意一个操作函数;在操作类型为预设操作类型的情况下,将当前操作函数设置为耗时类操作函数,并获取当前操作函数对应的函数类名、函数名以及函数参数;利用函数类名、函数名以及函数参数,构建耗时类操作函数文件。
当前操作函数指的是全量操作函数中的任意一个操作函数,而操作类型则指的是操作函数所执行操作的类型,而预设操作类型则是预先设定的操作耗时较长的操作类型,例如可以包括下载操作类型、数据库操作类型、文件操作类型以及网络请求类型等等。
具体来说,终端在构造耗时类操作函数文件时,可以先获取全量操作函数中各个操作函数所执行操作的操作类型,如果该操作函数所执行操作的操作类型,属于预先设置的操作类型,那么终端则可以将该操作函数作为耗时类操作函数。并且为了唯一标识该操作函数,终端还可以进一步获取该操作函数的函数类名、函数名以及其包含的函数参数,从而将该操作函数的函数类名、函数名以及函数参数,写入耗时类操作函数文件,从而构建耗时类操作函数文件。
例如,某个操作函数A,所执行操作的操作类型为下载类型,那么终端则可以将该操作函数A作为耗时类操作函数,同时获取该操作函数A的函数类名,函数名与包含的函数参数,可以分别是A类名、耗时操作函数A以及A参数,从而将该操作函数A以A类名-耗时操作函数A-A参数的格式写入耗时类操作函数文件。
本实施例中,终端可以得到当前操作函数所执行操作的操作类型,从而根据操作类型判断是否为预设操作类型,如果是则可以将当前操作函数设置为耗时类操作函数,同时将当前操作函数对应的函数类名、函数名以及包含的函数参数写入耗时类操作函数文件,来实现耗时类操作函数文件的构建,通过该方式可以进一步提高耗时类操作函数文件的构建效率。
进一步地,在耗时类操作函数文件中包括业务代码中包含的操作函数的情况下,将操作函数作为耗时类操作函数,可以进一步包括:获取业务代码中包含的各操作函数对应的函数类名、函数名以及函数参数;在耗时类操作函数文件中包括操作函数对应的函数类名、函数名以及函数参数的情况下,将操作函数作为耗时类操作函数。
本实施例中,由于耗时类操作函数文件中存储的耗时类操作函数是以函数类名、函数名以及函数参数的形式进行存储,因此终端在进行耗时类操作函数匹配的过程中,也可以按照函数类名、函数名以及函数参数的形式进行匹配。具体来说,终端可以获取业务代码中包含的各个操作函数的函数类名、函数名以及函数参数,从而利用上述的函数类名、函数名以及所述函数参数,与耗时类操作函数文件中存储的函数类名、函数名以及函数参数进行匹配,如果命中,则将该操作函数作为耗时类操作函数。
例如,业务代码中某个操作函数的函数类名是A类名,函数名为A函数而函数参数则是A参数,终端则可以利用上述A类名-函数A-A参数的格式与耗时类操作函数文件进行匹配,如果耗时类操作函数文件中包含上述形式,即包含A类名-函数A-A参数,那么终端则可以将该操作函数作为耗时类操作函数。
本实施例中,终端还可以利用操作函数的函数类名、函数名以及函数参数,来实现与耗时类操作函数文件的匹配,通过该方式可以进一步提高耗时类操作函数的筛选准确性。
在一个实施例中,步骤S104可以进一步包括:获取预先构建的主线程函数白名单;主线程函数白名单中存储有多种在主线程中运行的函数;在主线程函数白名单中存在与链路底端函数相匹配的函数的情况下,确定待测试应用程序中包含的,与链路底端函数对应的耗时类操作函数存在ANR风险。
主线程函数白名单是用于存储可以在主线程中运行函数的函数白名单,例如可以包括:invoke、run、Activity生命周期函数onCreate等,终端则可以利用预先构建的主线程函数白名单,以及每个链路底端函数,来对待测试应用程序进行ANR测试,从而得到ANR测试结果。
并且进行ANR风险测试的方法是通过比对耗时类操作函数对应的链路底端函数,是否存在于主线程函数白名单中,如果存在,则表明该链路底端函数在主线程运行,从而通过链路底端函数来按照函数链路调用耗时类操作函数,那么在这种情况下,待测试应用程序则可能会出现ANR问题,同时还可以认为该待测试应用程序中包含的,与链路底端函数对应的耗时类操作函数存在ANR风险,并输出该耗时类操作函数的调用关系链形成报告上传。通过该方式可以确保耗时类操作函数可以不被主线程调用,来避免因主线程在处理耗时操作导致当前事件无法处理的情形,从而提高ANR测试的测试精度。
本实施例中,终端可以通过预先构建的主线程函数白名单,并通过比对耗时类操作函数对应的链路底端函数,是否存在于主线程函数白名单中,来检测是否存在ANR风险,通过该方式可以确保耗时类操作函数可以不被主线程调用,来避免因主线程在处理耗时操作导致当前事件无法处理的情形,从而提高ANR测试的测试精度。
在一个实施例中,还提供了一种主线程耗时操作类ANR的静态测试方法,可以精准、快速识别因主线程处理耗时操作导致的ANR问题,首先整理收集安卓源码和业务代码中常用的耗时操作类函数。再使用ASM静态扫描业务代码,获取此类函数的完整调用关系链。若关系链底端为主线程函数,则认为此链路有ANR风险,需要在耗时操作函数直接调用处或上层调用处主动切换到子线程。相比于利用monkey稳定性测试工具实现ANR测试,由于monkey是一种随机性测试方法,耗时较久,且无法覆盖所有场景的耗时类操作,并且相同场景的耗时类操作每次运行时的线程不定,monkey不一定能触发到,而本申请可以获得安卓源码和业务代码中的耗时操作类函数及其全部调用关系链,因此可以准确定性ANR风险。同时本申请可以基于代码分析,耗时短,便于随时检查增量提交。如图6所示,具体通过以下流程实现:
先将ASM插桩插件上传至代码仓库服务器。在流水线上,当有新增业务代码提交时,会自动触发下载项目代码,并在代码中配置插件信息,然后编译生成单链路函数文件,最后运行脚本生成耗时操作类函数的完整调用关系链。当调用关系链底端为主线程函数时,会自动提单到敏捷协作平台。
具体来说,如图7所示,测试流程的工作原理如下所示:
(1)收集耗时操作类函数形成TimeCostMethod.txt文件。比如:SharedPreferences的commit、CountDownLatch的await,数据库的execute函数等。格式:A类名--耗时操作函数A--A参数。
(2)收集项目代码中单链路函数关系。
使用ASM插桩可以敏捷获取函数本身和函数间的相关信息。此步骤会生成以下2个文件:Method.txt与Super_Inter_Method.txt。
其中,Method.txt包含所有函数与其直接调用的函数之间的关系,格式:
A类名--函数A--A参数--A父类--A接口列表 {B类名--被调函数B--B参数,C类名--被调函数C--C参数,...}
而Super_Inter_Method.txt则包含所有父类|接口与其重写函数之间的关系,格式:
A类名--父类|接口函数A--A参数{B类名-重写函数B--B参数,C类名-重写函数C--C参数, ...}
(3)收集主线程函数白名单。比如:invoke、run、Activity生命周期函数onCreate等。
(4)生成并校验全链路函数关系。
利用Method.txt 和Super_Inter_Method.txt,生成TimeCostMethod.txt中每个函数的完整调用链。
将TimeCostMethod.txt中的函数作为链顶端, 格式如下:
{
A类名--函数A--A参数 (链顶端)
B类名--函数B--B参数
C类名--函数C--C参数
...
X类名--函数X--X参数 (链底端)
}
表示A被B调用,B被C调用,依次类推。若链底端存在(3)中函数,则判定此调用链有主线程执行耗时操作导致ANR的风险。
通过本实施例,可准确判断所有耗时操作类函数的ANR风险性,且将问题发现阶段从运行阶段提前至编译阶段,有效减少APP上线后的主线程耗时操作类ANR问题。并且ASM插件和流水线的脚本编写配置完成后,后续只需等待新增代码提交触发检测任务并对风险链路进行自动提单即可,因此可提高测试效率。同时主线程函数、收集单链路函数关系的ASM插件和生成全链路函数关系的脚本对APP皆适用,只需在对应APP内添加插件信息并运行脚本即可,因此通用性强。
应该理解的是,虽然如上所述的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上所述的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的应用程序测试方法的应用程序测试装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个应用程序测试装置实施例中的具体限定可以参见上文中对于应用程序测试方法的限定,在此不再赘述。
在一个示例性的实施例中,如图8所示,提供了一种应用程序测试装置,包括:函数关系获取模块801、耗时函数获取模块802、链路底端获取模块803和测试结果获取模块804,其中:
函数关系获取模块801,用于获取待测试应用程序的业务代码,以及获取业务代码中包含的操作函数与各操作函数对应的函数链路关系信息;
耗时函数获取模块802,用于从各操作函数中,获取耗时类操作函数;耗时类操作函数执行的操作耗时大于预设时长;
链路底端获取模块803,用于根据耗时类操作函数对应的函数链路关系信息,获取各耗时类操作函数对应的链路底端函数;
测试结果获取模块804,用于根据各链路底端函数,获取待测试应用程序的ANR测试结果。
上述应用程序测试装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个示例性的实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图9所示。该计算机设备包括处理器、存储器、输入/输出接口、通信接口、显示单元和输入装置。其中,处理器、存储器和输入/输出接口通过系统总线连接,通信接口、显示单元和输入装置通过输入/输出接口连接到系统总线。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的输入/输出接口用于处理器与外部设备之间交换信息。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、移动蜂窝网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种应用程序测试方法。该计算机设备的显示单元用于形成视觉可见的画面,可以是显示屏、投影装置或虚拟现实成像装置。显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图9中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,还提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的步骤。
需要说明的是,本申请所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,且相关数据的收集、使用和处理需要符合相关规定。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-OnlyMemory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)等。本申请所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

Claims (11)

1.一种应用程序测试方法,其特征在于,所述方法包括:
获取待测试应用程序的业务代码,以及获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息;
从各所述操作函数中,获取耗时类操作函数;所述耗时类操作函数执行的操作耗时大于预设时长;
根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数;
根据各所述链路底端函数,获取所述待测试应用程序的ANR测试结果。
2.根据权利要求1所述的方法,其特征在于,所述函数链路关系信息通过函数链路文件进行存储;所述根据所述耗时类操作函数对应的函数链路关系信息,获取各所述耗时类操作函数对应的链路底端函数,包括:
将各所述耗时类操作函数作为链路顶端函数,并利用所述函数链路文件中存储的函数链路关系信息,生成各所述耗时类操作函数对应的调用关系链;
将各所述耗时类操作函数对应的调用关系链中的链路底端函数,作为各所述耗时类操作函数对应的链路底端函数。
3.根据权利要求2所述的方法,其特征在于,所述利用所述函数链路文件中存储的函数链路关系信息,生成各所述耗时类操作函数对应的调用关系链,包括:
将所述链路顶端函数作为被调用函数,从所述函数链路文件中,获取与被调用函数存在函数调用关系的调用函数;
将所述调用函数作为新的被调用函数,并返回执行从所述函数链路文件中,获取与被调用函数存在函数调用关系的调用函数的步骤,直到所述函数链路文件中不存在与所述被调用函数存在函数调用关系的调用函数;
利用所述耗时类操作函数,以及各所述调用函数,生成所述耗时类操作函数对应的调用关系链。
4.根据权利要求2所述的方法,其特征在于,所述函数链路文件包括:用于存储各所述操作函数的直接调用关系的第一函数链路文件;
所述获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息,包括:
获取各所述操作函数对应的直接调用函数,以及各所述操作函数对应的函数类名、函数名以及函数参数;
获取各所述直接调用函数对应的函数类名、函数名以及函数参数;
利用各所述操作函数对应的函数类名、函数名以及函数参数,与各所述直接调用函数对应的函数类名、函数名以及函数参数,构造操作函数的直接调用关系,形成第一函数链路文件。
5.根据权利要求4所述的方法,其特征在于,所述函数链路文件还包括:用于存储父类函数或接口函数,与所述父类函数或接口函数对应的重写函数之间关系的第二函数链路文件;
所述获取所述业务代码中包含的操作函数与各所述操作函数对应的函数链路关系信息,包括:
获取各所述操作函数对应的父类类名信息与接口类名信息,根据所述父类类名信息获取各所述操作函数对应的父类函数,以及根据所述接口类名信息获取各所述操作函数对应的接口函数;
在所述第一函数链路文件中包含所述父类函数的情况下,将所述父类函数对应的操作函数作为第一重写函数,并利用所述父类函数对应的函数类名、函数名以及函数参数,与对应的第一重写函数的函数类名、函数名以及函数参数,构造所述父类函数与所述第一重写函数的关系;
在所述第一函数链路文件中包含所述接口函数的情况下,将所述接口函数对应的操作函数作为第二重写函数,并利用所述接口函数对应的函数类名、函数名以及函数参数,与对应的第二重写函数的函数类名、函数名以及函数参数,构造所述接口函数与所述第二重写函数的关系;
利用构造的所述父类函数与所述第一重写函数的关系,以及所述接口函数与所述第二重写函数的关系,形成第二函数链路文件。
6.根据权利要求1所述的方法,其特征在于,所述从各所述操作函数中,获取耗时类操作函数,包括:
获取预先构建的包含有全量耗时类操作函数的耗时类操作函数文件;
在所述耗时类操作函数文件中包括所述业务代码中包含的操作函数的情况下,将所述操作函数作为所述耗时类操作函数。
7.根据权利要求6所述的方法,其特征在于,所述获取预先构建的包含有全量耗时类操作函数的耗时类操作函数文件之前,还包括:
获取当前操作函数,以及所述当前操作函数执行操作的操作类型;所述当前操作函数为任意一个操作函数;
在所述操作类型为预设操作类型的情况下,将所述当前操作函数设置为耗时类操作函数,并获取所述当前操作函数对应的函数类名、函数名以及函数参数;
利用所述函数类名、函数名以及所述函数参数,构建所述耗时类操作函数文件。
8.根据权利要求7所述的方法,其特征在于,所述在所述耗时类操作函数文件中包括所述业务代码中包含的操作函数的情况下,将所述操作函数作为所述耗时类操作函数,包括:
获取所述业务代码中包含的各所述操作函数对应的函数类名、函数名以及所述函数参数;
在所述耗时类操作函数文件中包括所述操作函数对应的函数类名、函数名以及所述函数参数的情况下,将所述操作函数作为所述耗时类操作函数。
9.根据权利要求1至8任一项所述的方法,其特征在于,所述根据各所述链路底端函数,获取所述待测试应用程序的ANR测试结果,包括:
获取预先构建的主线程函数白名单;所述主线程函数白名单中存储有多种在主线程中运行的函数;
在所述主线程函数白名单中存在与所述链路底端函数相匹配的函数的情况下,确定所述待测试应用程序中包含的,与所述链路底端函数对应的耗时类操作函数存在ANR风险。
10.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至9中任一项所述的方法的步骤。
11.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
CN202410056035.0A 2024-01-15 2024-01-15 应用程序测试方法、计算机设备和存储介质 Pending CN118012752A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410056035.0A CN118012752A (zh) 2024-01-15 2024-01-15 应用程序测试方法、计算机设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410056035.0A CN118012752A (zh) 2024-01-15 2024-01-15 应用程序测试方法、计算机设备和存储介质

Publications (1)

Publication Number Publication Date
CN118012752A true CN118012752A (zh) 2024-05-10

Family

ID=90955198

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410056035.0A Pending CN118012752A (zh) 2024-01-15 2024-01-15 应用程序测试方法、计算机设备和存储介质

Country Status (1)

Country Link
CN (1) CN118012752A (zh)

Similar Documents

Publication Publication Date Title
US9268672B1 (en) Automated test case generation for applications
US7464297B2 (en) System and method for testing software using data-driven test variations
US20150186253A1 (en) Streamlined performance testing for developers
CN112433712B (zh) 报表展示方法、装置、计算机设备和存储介质
US20110173594A1 (en) Selective Loading of Code Elements for Code Analysis
CN115858213A (zh) 任务排程检查方法、装置、计算机设备和存储介质
CN116893960A (zh) 代码质量检测方法、装置、计算机设备和存储介质
CN109358972B (zh) 中间件客户端的日志管理方法、装置及计算机系统
CN118012752A (zh) 应用程序测试方法、计算机设备和存储介质
CN114756293A (zh) 业务处理方法、装置、计算机设备和存储介质
CN111459547B (zh) 一种函数调用链路的展示方法和装置
CN115221852A (zh) 基于vxe-table的动态计算表格实现方法、装置和计算机设备
CN114528045B (zh) 插件操作方法、装置、计算机设备和存储介质
CN115794651B (zh) 一种支持多二进制的无冲突插桩方法和系统
CN117522296A (zh) 审核流程生成方法、装置、计算机设备和存储介质
CN118394650A (zh) 代码测试方法、装置、计算机设备及存储介质
CN116594883A (zh) 代码测试方法、装置、计算机设备和存储介质
CN116701189A (zh) 音乐应用程序代码检测方法、计算机设备和存储介质
CN117435478A (zh) 程序逻辑功能检测方法、装置、计算机设备和存储介质
CN117667670A (zh) 软件异常风险检测方法、计算机设备和存储介质
CN118012593A (zh) 函数中断控制方法、装置、计算机设备和存储介质
CN116561010A (zh) 接口测试方法、装置、计算机设备和存储介质
CN116737216A (zh) 技术资源的管理方法、装置、设备、存储介质和程序产品
CN118113597A (zh) 接口覆盖率的确定方法、装置、计算机设备、存储介质
CN117389601A (zh) 金融软件影响溯源分析方法、装置、设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination