应用检测方法及应用检测装置与流程

文档序号:12665662阅读:333来源:国知局
应用检测方法及应用检测装置与流程

本发明涉及应用检测领域,特别是涉及一种应用检测方法及应用检测装置。



背景技术:

众测作为一种新兴的测试方法,可利用庞大的外网用户和丰富的机型,以弥补自动化测试的一些不足之处。但是由于参加众测任务的用户技能和提交反馈的质量相差较大,因此需要对用户提交反馈的有效性进行评价。

现有的应用测试方法会以应用测试时的代码测试覆盖率作为用户提交反馈的有效性的评价标准。当用户执行应用测试任务期间的代码测试覆盖率达到或超过预先设定的阈值,则判定用户提交的反馈有效。

计算用户执行应用测试期间的代码测试覆盖率需要对测试项目代码进行插桩操作,以此来判断哪些测试项目代码被执行到,哪些测试项目代码未被执行到。这里的插桩操作是指在保证原有测试项目代码的逻辑完整性的基础上在测试项目代码上插入一些进行信息采集的代码段,如信息采集语句等。

现有的代码插桩技术均需要手动对测试项目代码进行一定量的修改,以便生成插桩结果信息,因此插桩操作的工作量较大。且现有的代码插桩方案均是对所有的测试项目代码进行全量插桩,即只要应用程序在运行过程中,该应用程序就会不断输出插桩信息,从而导致插桩信息占用的存储空间较大且插桩信息的上报需要占用较多的网络资源。



技术实现要素:

本发明实施例提供一种插桩操作的工作量、占用的存储空间以及网络资源均较小的应用检测方法及应用检测装置;以解决现有的应用检测方法及应用检测装置中的插桩操作的工作量较大、占用的存储空间较大以及占用的网络资源较大的技术问题。

本发明实施例提供一种应用测试方法,其包括:

遍历测试应用的测试项目代码,获取所述测试项目代码中的每个子项目代码;

将插桩函数文件拷贝到所述子项目代码的预设位置;

通过所述插桩函数文件,遍历所述子项目代码中的所有函数文件;

对所述函数文件进行语法分析,获取所述子项目代码中的每个函数文件的函数入口;以及

在所述函数文件的函数入口设置插桩函数,以便输出插桩信息,从而通过所述插桩信息对所述测试应用的测试覆盖率进行反馈。

本发明实施例还提供一种应用测试装置,其包括:

子项目代码获取模块,用于遍历测试应用的测试项目代码,获取所述测试项目代码中的每个子项目代码;

插桩函数文件拷贝模块,用于将插桩函数文件拷贝到所述子项目代码的预设位置;

函数文件遍历模块,用于通过所述插桩函数文件,遍历所述子项目代码中的所有函数文件;

函数入口获取模块,用于对所述函数文件进行语法分析,获取所述子项目代码中的每个函数文件的函数入口;以及

插桩函数设置模块,用于在所述函数文件的函数入口设置插桩函数,以便输出插桩信息,从而通过所述插桩信息对所述测试应用的测试覆盖率进行反馈。

相较于现有技术,本发明的应用测试方法及应用测试装置通过在测试项目代码中设置插桩函数文件,实现了插桩函数的设置,该插桩函数可在测试应用进行测试时,以函数文件中的函数为单位输出插桩信息,从而有效的降低了插桩操作的工作量,且占用的存储空间以及网络资源均较小;解决了现有的应用检测方法及应用检测装置中的插桩操作的工作量较大、占用的存储空间较大以及占用的网络资源较大的技术问题。

附图说明

图1为本发明的应用测试方法的第一优选实施例的流程图;

图2为本发明的应用测试方法的第二优选实施例的流程图;

图3为本发明的应用测试装置的第一优选实施例的结构示意图;

图4为本发明的应用测试装置的第二优选实施例的结构示意图;

图5为本发明的应用测试装置的第二优选实施例的子项目代码获取模块的结构示意图;

图6为本发明的应用测试装置的第二优选实施例的函数入口获取模块的结构示意图;

图7为本发明的应用测试装置的第二优选实施例的插桩函数设置模块的结构示意图;

图8为本发明的应用测试方法及应用测试装置的具体实施例的流程图;

图9为本发明的应用测试装置所在的电子设备的工作环境结构示意图。

具体实施方式

请参照图式,其中相同的组件符号代表相同的组件,本发明的原理是以实施在一适当的运算环境中来举例说明。以下的说明是基于所例示的本发明具体实施例,其不应被视为限制本发明未在此详述的其它具体实施例。

在以下的说明中,本发明的具体实施例将参考由一部或多部计算机所执行之作业的步骤及符号来说明,除非另有述明。因此,其将可了解到这些步骤及操作,其中有数次提到为由计算机执行,包括了由代表了以一结构化型式中的数据之电子信号的计算机处理单元所操纵。此操纵转换该数据或将其维持在该计算机之内存系统中的位置处,其可重新配置或另外以本领域技术人员所熟知的方式来改变该计算机之运作。该数据所维持的数据结构为该内存之实体位置,其具有由该数据格式所定义的特定特性。但是,本发明原理以上述文字来说明,其并不代表为一种限制,本领域技术人员将可了解到以下所述的多种步骤及操作亦可实施在硬件当中。

本发明的应用测试方法及应用测试装置可设置在各种对应用进行测试的电子设备中,该电子设备包括但不限于可穿戴设备、头戴设备、医疗健康平台、个人计算机、服务器计算机、手持式或膝上型设备、移动设备(比如移动电话、个人数字助理(PDA)、媒体播放器等等)、多处理器系统、消费型电子设备、小型计算机、大型计算机、包括上述任意系统或设备的分布式计算环境,等等。该电子设备优选为进行众测任务的用户终端。本发明的电子设备通过在测试项目代码中设置插桩函数文件,实现了插桩函数的设置,该插桩函数可在测试应用进行测试时,以函数文件中的函数为单位输出插桩信息,从而有效的降低了插桩操作的工作量,且占用的存储空间以及网络资源均较小。

请参照图1,图1为本发明的应用测试方法的第一优选实施例的流程图。本优选实施例的应用测试方法可使用上述的电子设备进行实施,本优选实施例的应用测试方法包括:

步骤S101,遍历测试应用的测试项目代码,获取测试项目代码中的每个子项目代码;

步骤S102,将插桩函数文件拷贝到子项目代码的预设位置;

步骤S103,通过插桩函数文件,遍历子项目代码中的所有函数文件;

步骤S104,对函数文件进行语法分析,获取子项目代码的每个函数文件的函数入口;

步骤S105,在函数文件的函数入口设置插桩函数,以便输出插桩信息,从而通过插桩信息对测试应用的测试覆盖率进行反馈。

下面详细说明本优选实施例的应用测试方法的各步骤的具体流程。

在步骤S101中,应用测试装置遍历测试应用的测试项目代码。这里的测试应用是指用于进行众测操作的应用。该测试应用包括用于执行该应用的各种设定功能的测试项目代码,其中该测试项目代码包括多个子项目代码。这里的测试项目代码为这个应用的执行代码,子项目代码为该应用中的某个设定功能的执行代码。如微信平台具有聊天功能的子项目代码,也具有朋友圈功能的子项目代码等。

这样应用测试装置可通过遍历所有的测试项目代码,获取测试项目代码中的每个子项目代码。随后转到步骤S102。

在步骤S102中,应用测试装置将插桩函数文件拷贝到步骤S101获取的子项目代码的预设位置。这里的插桩函数文件可用于根据对应的子项目代码,生成相应插桩函数的文件。

由于某些测试应用对新增代码需要进行合法性验证,这里将新增的插桩函数文件拷贝到子项目代码的预设位置,可较好的通过测试应用对新增的插桩函数文件的合法性验证,以便该插桩函数文件在子项目代码中生成对应的插桩函数。随后转到步骤S103。

在步骤S103中,应用测试装置通过步骤S102设置的插桩函数文件,遍历子项目代码中的所有函数文件。这里的函数文件包括子项目代码中的函数以及函数相关参数。子项目代码中的函数为某个设定功能中的单一操作执行代码,如聊天功能中的表情包发送操作等。

本优选实施例并非对每行测试项目代码进行插桩检测,而仅仅对测试项目代码中的子项目代码的每个函数进行插桩检测,即该函数被执行,就认为这个函数对应的所有代码均被执行,因此可较好的降低插桩操作的工作量。随后转到步骤S104。

在步骤S104中,应用测试装置对步骤S103中获取的函数文件进行语法分析,找到子项目代码中每个函数文件的函数入口,以便在函数入口处进行插桩操作。随后转到步骤S105。

在步骤S105中,应用测试装置在步骤S104中获取的函数文件的函数入口处设置插桩函数,该插桩函数可打印并记录对应函数文件的名称或编号等函数文件信息作为插桩信息输出。由于当测试应用中的某个函数被测试时,一定会执行函数入口处的代码,因此将插桩函数设置在函数入口处,可以准确的检测该函数是否在测试中被执行,以准确的输出插桩信息。

这样应用测试装置可以根据插桩函数输出的插桩信息,准确的判断对应的函数是否被执行,从而对测试应用的测试覆盖率进行准确反馈。在应用测试过程中应用测试装置只需要以函数为单位对插桩函数输出的插桩信息进行存储以及网络上报,因此占用的存储空间以及网络资源也较小。

这样即完成了本优选实施例的应用测试方法的应用测试覆盖率获取过程。

本优选实施例的应用测试方法通过在测试项目代码中设置插桩函数文件,实现了插桩函数的设置,该插桩函数可在测试应用进行测试时,以函数文件中的函数为单位输出插桩信息,从而有效的降低了插桩操作的工作量,且占用的存储空间以及网络资源均较小。

请参照图2,图2为本发明的应用测试方法的第二优选实施例流程图。本优选实施例的应用测试方法可使用上述的电子设备进行实施,本优选实施例的应用测试方法包括:

步骤S201,遍历测试项目代码中的预设配置文件;

步骤S202,根据预设配置文件确定测试项目代码中的每个子项目代码;

步骤S203,将插桩函数文件拷贝到子项目代码的预设位置;

步骤S204,根据子项目代码的编号,对插桩函数文件进行重命名操作;

步骤S205,通过插桩函数文件,遍历子项目代码中的所有函数文件;

步骤S206,判断函数文件是否为控件函数文件,如不是控件函数文件,则转到步骤S207;如为控件函数文件,则转到步骤S208;

步骤S207,跳过该函数文件,转到步骤S205;

步骤S208,对函数文件进行语法分析,获取子项目代码中的每个函数文件的函数入口;

步骤S209,在函数文件中设置插桩函数文件的路径;

步骤S210,在函数文件的函数入口的同行代码尾部设置插桩函数,以便输出插桩信息,从而通过插桩信息对测试应用的测试覆盖率进行反馈。

下面详细说明本优选实施例的应用测试方法的各步骤的具体流程。

在步骤S201中,应用测试装置遍历测试应用的测试项目代码的预设配置文件,由于本优选实施例中的应用测试装置是针对测试项目代码下的每个子项目代码进行插桩操作,因此这里以测试项目代码的代码特征,如安卓应用项目代码下的每个子项目代码中均会设置的Manifest.xml作为预设配置文件,以确定每个测试项目代码中的子项目代码。随后转到步骤S202。

在步骤S202中,应用测试装置根据步骤S201获取的预设配置文件确定测试项目代码中的每个子项目代码。随后转到步骤S203。

在步骤S203中,应用测试装置将插桩函数文件拷贝到步骤S202获取的子项目代码的预设位置。这里的插桩函数文件可用于根据对应的子项目代码,生成相应插桩函数的文件。

由于某些测试应用对新增代码需要进行合法性验证,这里将新增的插桩函数文件拷贝到子项目代码的预设位置,可较好的通过测试应用对新增的插桩函数文件的合法性验证,以便该插桩函数文件在子项目代码中生成对应的插桩函数。

优选的,这里应用测试装置可设置一包括子项目代码的非测试名单,如该子项目代码的编号与非测试名单中的某个子项目代码的编号一致,则判断该子项目代码不需要进行插桩操作,因此应用测试装置不需要将插桩函数文件拷贝到非测试名单中的子项目代码的预设位置上。随后转到步骤S204。

在步骤S204中,为了避免不同子项目代码的插桩函数文件重名,应用测试装置根据每个子项目代码的编号(同一测试项目代码下的不同子项目代码的编号唯一),对插桩函数文件进行重命名操作。随后转到步骤S205。

在步骤S205中,应用测试装置通过步骤S203设置的插桩函数文件,遍历子项目代码中的所有函数文件。这里的函数文件包括子项目代码中的函数以及函数相关参数。子项目代码中的函数为某个设定功能中的单一操作执行代码,如聊天功能中的表情包发送操作等。

本优选实施例并非对每行测试项目代码进行插桩检测,而仅仅对测试项目代码中的子项目代码的每个函数进行插桩检测,即该函数被执行,就认为这个函数对应的所有代码均被执行,因此可较好的降低插桩操作的工作量。随后转到步骤S206。

在步骤S206中,应用测试装置判断步骤S205中遍历的函数文件是否为控件函数文件,由于用户进行测试应用的测试时,基本通过控件的点击操作完成。因此这里只需要对控件函数文件进行代码测试覆盖率检测即可。这里的控件函数文件可为Activity类、Fragment类以及View类等函数文件。因此本优选实施例可有效的减少插桩信息的存储量。

优选的,这里应用测试装置可设置一包括函数文件的非测试名单,如该函数文件的编号与非测试名单中的某个函数文件的编号一致,则判断该函数文件不需要进行插桩操作,因此应用测试装置不需要对该函数文件进行插桩操作,这样可进一步降低插桩操作的工作量。

如应用测试装置判断该函数文件不是控件函数文件,则转到步骤S207;如应用测试装置判断该函数文件为控件函数文件,则转到步骤S208。

在步骤S207中,由于函数文件不是控件函数文件,则不需要对该函数文件进行插桩操作,因此跳过该函数文件,转到步骤S205,遍历子项目代码中的其他函数文件。

在步骤S208中,应用测试装置使用javalang(一种针对java语言进行词法和语法解析的python库)等分析工具对步骤S205中获取的函数文件进行语法分析,找到子项目代码中每个函数文件的函数入口,以便在函数入口处进行插桩操作。随后转到步骤S209。

在步骤S209中,应用测试装置需要在函数文件中设置插桩函数文件的路径,以便于对设置在函数文件的函数入口处的插桩函数进行解析。随后转到步骤S210。

在步骤S210中,应用测试装置在步骤S208中获取的函数文件的函数入口处设置插桩函数,如在函数的“{”的位置处。由于当测试应用中的某个函数被测试时,一定会执行函数入口处的代码,因此将插桩函数设置在函数入口处,可以准确的检测该函数是否在测试中被执行,以准确的输出插桩信息。

这里优选在函数文件的函数入口的同行代码尾部设置插桩函数,以避免修改测试项目代码中的其他代码的行号。

这样应用测试装置可以根据插桩函数输出的插桩信息,准确的判断对应的函数是否被执行,从而对测试应用的测试覆盖率进行准确反馈。在应用测试过程中应用测试装置只需要以函数为单位对插桩函数输出的插桩信息进行存储以及网络上报,因此占用的存储空间以及网络资源也较小。

这样即完成了本优选实施例的应用测试方法的应用测试覆盖率获取过程。

优选的,应用测试装置通过插桩函数输出插桩信息时,由于插桩信息存储在明文存储在应用测试装置上,因此可能会导致测试项目代码中的子项目代码泄露,因此应用测试装置通过插桩函数对插桩信息进行加密操作,如采用对称加密算法对插桩信息进行加密,从而进一步提高应用测试过程的安全性。

优选的,为了进一步降低插桩信息占用的存储空间以及网络资源,应用测试装置可在插桩函数中设置有用于表示插桩函数是否处于开启状态的插桩状态标识。即如果用户只需要获取子项目代码的部分函数的覆盖率信息,则可将该子项目代码的其他函数对应的插桩函数的插桩状态标识切换为关闭状态,这样测试应用在测试期间,并不会对该函数的插桩信息进行存储操作,从而进一步降低了插桩信息占用的存储空间以及网络资源。

在第一优选实施例的基础上,本优选实施例的应用测试方法通过预设配置文件确定子项目代码,可以进一步保证子项目代码获取的准确性;通过对插桩函数文件进行重命名操作,避免的同名插桩函数文件的现象发生;对函数文件的种类以及非测试名单的设置,可以较好对不需要进行插桩操作的函数文件进行挑选,从而降低插桩操作的工作量;将插桩函数设置在函数入口的同行代码尾部,可以较好的避免插桩函数对测试项目代码中正常代码的影响。

本发明还提供一种应用测试装置,请参照图3,图3为本发明的应用测试装置的第一优选实施例的结构示意图。本优选实施例的应用测试装置可使用上述的应用测试方法的第一优选实施例进行实施,本优选实施例的应用测试装置30包括子项目代码获取模块31、插桩函数文件拷贝模块32、函数文件遍历模块33、函数入口获取模块34以及插桩函数设置模块35。

子项目代码获取模块31用于遍历测试应用的测试项目代码,获取测试项目代码中的每个子项目代码;插桩函数文件拷贝模块32用于将插桩函数文件拷贝到子项目代码的预设位置;函数文件遍历模块33用于通过插桩函数文件,遍历子项目代码中的所有函数文件;函数入口获取模块34用于对函数文件进行语法分析,获取子项目代码中的每个函数文件的函数入口;插桩函数设置模块35用于在函数文件的函数入口设置插桩函数,以便输出插桩信息,从而通过插桩信息对测试应用的测试覆盖率进行反馈。

本优选实施例的应用测试装置30使用时,首先子项目代码获取模块31遍历测试应用的测试项目代码。这里的测试应用是指用于进行众测操作的应用。该测试应用包括用于执行该应用的各种设定功能的测试项目代码,其中该测试项目代码包括多个子项目代码。这里的测试项目代码为这个应用的执行代码,子项目代码为该应用中的某个设定功能的执行代码。如微信平台具有聊天功能的子项目代码,也具有朋友圈功能的子项目代码等。

这样子项目代码获取模块31可通过遍历所有的测试项目代码,获取测试项目代码中的每个子项目代码。

随后插桩函数文件拷贝模块32将插桩函数文件拷贝到子项目代码获取模块31获取的子项目代码的预设位置。这里的插桩函数文件可用于根据对应的子项目代码,生成相应插桩函数的文件。

由于某些测试应用对新增代码需要进行合法性验证,这里将新增的插桩函数文件拷贝到子项目代码的预设位置,可较好的通过测试应用对新增的插桩函数文件的合法性验证,以便该插桩函数文件在子项目代码中生成对应的插桩函数。

然后函数文件遍历模块33通过插桩函数文件拷贝模块32设置的插桩函数文件,遍历子项目代码中的所有函数文件。这里的函数文件包括子项目代码中的函数以及函数相关参数。子项目代码中的函数为某个设定功能中的单一操作执行代码,如聊天功能中的表情包发送操作等。

本优选实施例并非对每行测试项目代码进行插桩检测,而仅仅对测试项目代码中的子项目代码的每个函数进行插桩检测,即该函数被执行,就认为这个函数对应的所有代码均被执行,因此可较好的降低插桩操作的工作量。

随后函数入口获取模块34对函数文件遍历模块33中获取的函数文件进行语法分析,找到子项目代码中每个函数文件的函数入口,以便在函数入口处进行插桩操作。

最后插桩函数设置模块35在函数入口获取模块34中获取的函数文件的函数入口处设置插桩函数,由于当测试应用中的某个函数被测试时,一定会执行函数入口处的代码,因此将插桩函数设置在函数入口处,可以准确的检测该函数是否在测试中被执行,以准确的输出插桩信息。

这样应用测试装置30可以根据插桩函数输出的插桩信息,准确的判断对应的函数是否被执行,从而对测试应用的测试覆盖率进行准确反馈。在应用测试过程中应用测试装置只需要以函数为单位对插桩函数输出的插桩信息进行存储以及网络上报,因此占用的存储空间以及网络资源也较小。

这样即完成了本优选实施例的应用测试装置30的应用测试覆盖率获取过程。

本优选实施例的应用测试装置通过在测试项目代码中设置插桩函数文件,实现了插桩函数的设置,该插桩函数可在测试应用进行测试时,以函数文件中的函数为单位输出插桩信息,从而有效的降低了插桩操作的工作量,且占用的存储空间以及网络资源均较小。

请参照图4,图4为本发明的应用测试装置的第二优选实施例的结构示意图。本优选实施例的应用测试装置可使用上述的应用测试方法的第二优选实施例进行实施,本优选实施例的应用测试装置40包括子项目代码获取模块41、插桩函数文件拷贝模块42、插桩函数文件重命名模块43、函数文件遍历模块44、函数入口获取模块45、插桩函数设置模块46以及加密模块47。

子项目代码获取模块41用于遍历测试应用的测试项目代码,获取测试项目代码中的每个子项目代码;插桩函数文件拷贝模块42用于将插桩函数文件拷贝到子项目代码的预设位置;插桩函数文件重命名模块43用于根据子项目代码的编号,对插桩函数文件进行重命名操作;函数文件遍历模块44用于通过插桩函数文件,遍历子项目代码中的所有函数文件;函数入口获取模块45用于对函数文件进行语法分析,获取子项目代码中的每个函数文件的函数入口;插桩函数设置模块46用于在函数文件的函数入口设置插桩函数,以便输出插桩信息,从而通过插桩信息对测试应用的测试覆盖率进行反馈;加密模块47用于通过插桩函数对插桩信息进行加密操作。

请参照图5,图5为本发明的应用测试装置的第二优选实施例的子项目代码获取模块的结构示意图。该子项目代码获取模块41包括预设配置文件遍历单元51以及子项目代码确定单元52。

预设配置文件遍历单元51用于遍历测试项目代码中的预设配置文件;子项目代码确定单元52用于根据预设配置文件确定测试项目代码中的每个子项目代码。

请参照图6,图6为本发明的应用测试装置的第二优选实施例的函数入口获取模块的结构示意图。该函数入口获取模块45包括控件函数文件判断单元61以及函数入口获取单元62。

控件函数文件判断单元61用于判断函数文件是否为控件函数文件;函数入口获取单元62用于如函数文件为控件函数文件,则对函数文件进行语法分析,获取子项目代码中的每个函数文件的函数入口。

请参照图7,图7为本发明的应用测试装置的第二优选实施例的插桩函数设置模块的结构示意图。该插桩函数设置模块46包括插桩函数文件路径设置单元71以及插桩函数设置单元72。

插桩函数文件路径设置单元71用于在函数文件中设置插桩函数文件的路径;插桩函数设置单元72用于在函数文件的函数入口设置插桩函数,以便函数文件通过插桩函数文件对插桩函数进行识别。

本优选实施例的应用测试装置40使用时,首先子项目代码获取模块41的预设配置文件遍历单元51遍历测试应用的测试项目代码的预设配置文件,由于本优选实施例中的应用测试装置40是针对测试项目代码下的每个子项目代码进行插桩操作,因此这里以测试项目代码的代码特征,如安卓应用项目代码下的每个子项目代码中均会设置的Manifest.xml作为预设配置文件,以确定每个测试项目代码中的子项目代码。

随后子项目代码获取模块41的子项目代码确定单元52根据预设配置文件遍历单元51获取的预设配置文件确定测试项目代码中的每个子项目代码。

然后插桩函数文件拷贝模块42将插桩函数文件拷贝到子项目代码获取模块获取的子项目代码的预设位置。这里的插桩函数文件可用于根据对应的子项目代码,生成相应插桩函数的文件。

由于某些测试应用对新增代码需要进行合法性验证,这里将新增的插桩函数文件拷贝到子项目代码的预设位置,可较好的通过测试应用对新增的插桩函数文件的合法性验证,以便该插桩函数文件在子项目代码中生成对应的插桩函数。

优选的,这里应用测试装置40可设置一包括子项目代码的非测试名单,如该子项目代码的编号与非测试名单中的某个子项目代码的编号一致,则判断该子项目代码不需要进行插桩操作,因此插桩函数文件拷贝模块不需要将插桩函数文件拷贝到非测试名单中的子项目代码的预设位置上。

随后为了避免不同子项目代码的插桩函数文件重名,插桩函数文件重命名模块43根据每个子项目代码的编号(同一测试项目代码下的不同子项目代码的编号唯一),对插桩函数文件进行重命名操作。

然后函数文件遍历模块44通过插桩函数文件拷贝模块42设置的插桩函数文件,遍历子项目代码中的所有函数文件。这里的函数文件包括子项目代码中的函数以及函数相关参数。子项目代码中的函数为某个设定功能中的单一操作执行代码,如聊天功能中的表情包发送操作等。

本优选实施例并非对每行测试项目代码进行插桩检测,而仅仅对测试项目代码中的子项目代码的每个函数进行插桩检测,即该函数被执行,就认为这个函数对应的所有代码均被执行,因此可较好的降低插桩操作的工作量。

随后函数入口获取模块45的控件函数文件判断单元61判断函数文件遍历模块44中遍历的函数文件是否为控件函数文件,由于用户进行测试应用的测试时,基本通过控件的点击操作完成。因此这里只需要对控件函数文件进行代码测试覆盖率检测即可。这里的控件函数文件可为Activity类、Fragment类以及View类等函数文件。因此本优选实施例可有效的减少插桩信息的存储量。

优选的,这里应用测试装置40可设置一包括函数文件的非测试名单,如该函数文件的编号与非测试名单中的某个函数文件的编号一致,则判断该函数文件不需要进行插桩操作,因此应用测试装置40不需要对该函数文件进行插桩操作,这样可进一步降低插桩操作的工作量。

如控件函数文件判断单元61判断该函数文件不是控件函数文件,则函数入口获取模块45不需要对该函数文件进行插桩操作,因此跳过该函数文件。函数文件遍历模块遍历子项目代码中的其他函数文件。

如控件函数文件判断单元61判断该函数文件为控件函数文件,则函数入口获取模块45的函数入口获取单元62使用javalang等分析工具对函数文件遍历模块中获取的函数文件进行语法分析,找到子项目代码中每个函数文件的函数入口,以便在函数入口处进行插桩操作。

随后插桩函数设置模块46的插桩函数文件路径设置单元71需要在函数文件中设置插桩函数文件的路径,以便于对设置在函数文件的函数入口处的插桩函数进行解析。

最后插桩函数设置模块46的插桩函数设置单元72在函数入口获取模块45获取的函数文件的函数入口处设置插桩函数,如在函数的“{”的位置处。由于当测试应用中的某个函数被测试时,一定会执行函数入口处的代码,因此将插桩函数设置在函数入口处,可以准确的检测该函数是否在测试中被执行,以准确的输出插桩信息。

这里优选在函数文件的函数入口的同行代码尾部设置插桩函数,以避免修改测试项目代码中的其他代码的行号。

这样应用测试装置40可以根据插桩函数输出的插桩信息,准确的判断对应的函数是否被执行,从而对测试应用的测试覆盖率进行准确反馈。在应用测试过程中应用测试装置40只需要以函数为单位对插桩函数输出的插桩信息进行存储以及网络上报,因此占用的存储空间以及网络资源也较小。

这样即完成了本优选实施例的应用测试装置的应用测试覆盖率获取过程。

优选的,应用测试装置40通过插桩函数输出插桩信息时,由于插桩信息存储在明文存储在应用测试装置上,因此可能会导致测试项目代码中的子项目代码泄露,因此加密模块47通过插桩函数对插桩信息进行加密操作,如采用对称加密算法对插桩信息进行加密,从而进一步提高应用测试过程的安全性。

优选的,为了进一步降低插桩信息占用的存储空间以及网络资源,应用测试装置40可在插桩函数中设置有用于表示插桩函数是否处于开启状态的插桩状态标识。即如果用户只需要获取子项目代码的部分函数的覆盖率信息,则可将该子项目代码的其他函数对应的插桩函数的插桩状态标识切换为关闭状态,这样测试应用在测试期间,并不会对该函数的插桩信息进行存储操作,从而进一步降低了插桩信息占用的存储空间以及网络资源。

在第一优选实施例的基础上,本优选实施例的应用测试装置通过预设配置文件确定子项目代码,可以进一步保证子项目代码获取的准确性;通过对插桩函数文件进行重命名操作,避免的同名插桩函数文件的现象发生;对函数文件的种类以及非测试名单的设置,可以较好对不需要进行插桩操作的函数文件进行挑选,从而降低插桩操作的工作量;将插桩函数设置在函数入口的同行代码尾部,可以较好的避免插桩函数对测试项目代码中正常代码的影响。

下面通过一具体实施例说明本发明的应用测试方法及应用测试装置的具体工作原理,请参照图8,图8为本发明的应用测试方法及应用测试装置的具体实施例的流程图。本具体实施例的应用测试方法及应用测试装置可使用各种进行众测任务的用户终端进行实施,本具体实施例的应用测试方法包括以下步骤:

步骤S801,用户终端安装对应的众测任务应用,当用户终端开始运行众测任务应用时,用户终端遍历众测任务应用的所有测试项目代码,获取测试项目代码中的子项目代码。

具体的,用户终端利用安卓子项目代码的特征,即安卓子项目代码中会设置Manifest.xml,用户终端可通过查找测试项目代码中的Manifest.xml,确定该测试项目代码中的子项目代码。转到步骤S802。

步骤S802,用户终端判断子项目代码是否处于子项目代码非测试名单中,如该子项目代码处于子项目代码非测试名单,则不对该子项目代码下的所有函数进行插桩操作,如子项目代码未处于子项目代码非测试名单中,则转到步骤S803。

步骤S803,用户终端将插桩函数文件拷贝到子项目代码的预设位置,并记录该插桩函数文件的路径。转到步骤S804。

步骤S804,用户终端通过插桩函数文件,遍历子项目代码中的所有Java函数文件,以便对每个Java函数文件的函数进行插桩操作。转到步骤S805。

步骤S805,用户终端判断Java函数文件是否处于函数文件非测试名单中,如该Java函数文件处于函数文件非测试名单,则不对该Java函数文件下的所有函数进行插桩操作,如Java函数文件未处于函数文件非测试名单中,则转到步骤S806。

步骤S806,用户终端判断Java函数文件是否为Activity类、Fragment类以及View类等控件函数文件。如Java函数文件为控件函数文件,则不对该Java函数文件下的所有函数进行插桩操作。如Java函数文件不是控件函数文件,则转到步骤S807。

步骤S807,用户终端在Java函数文件中设置插桩函数文件的路径,以便于对设置在Java函数文件的函数入口处的插桩函数进行解析。转到步骤S808。

步骤S808,用户终端使用javalang等分析工具对Java函数文件进行语法分析,找到子项目代码中每个Java函数文件的函数入口。转到步骤S809。

步骤S809,用户终端在Java函数文件的函数入口处设置插桩函数,如在函数的“{”的位置处等。

最后用户终端运行该众测任务应用,当众测任务应用运行某个Java函数文件的函数,则对应的插桩函数即会输出对应的插桩信息,这里可对插桩信息进行加密处理。用户终端将获取到的插桩信息网络上报至服务器,这样服务器可准确及时的获取众测任务应用在用户终端上的代码测试覆盖率的情况。

同时这里插桩函数上设置有插桩状态标识,用户终端可通过设置插桩函数的插桩状态标识,确定用户终端是否需要将该插桩函数的插桩信息进行上报操作,从而可根据用户的需要进一步降低插桩信息占用的存储空间以及网络资源。

本发明的应用测试方法及应用测试装置通过在测试项目代码中设置插桩函数文件,实现了插桩函数的设置,该插桩函数可在测试应用进行测试时,以函数文件中的函数为单位输出插桩信息,从而有效的降低了插桩操作的工作量,且占用的存储空间以及网络资源均较小;解决了现有的应用检测方法及应用检测装置中的插桩操作的工作量较大、占用的存储空间较大以及占用的网络资源较大的技术问题。

如本申请所使用的术语“组件”、“模块”、“系统”、“接口”、“进程”等等一般地旨在指计算机相关实体:硬件、硬件和软件的组合、软件或执行中的软件。例如,组件可以是但不限于是运行在处理器上的进程、处理器、对象、可执行应用、执行的线程、程序和/或计算机。通过图示,运行在控制器上的应用和该控制器二者都可以是组件。一个或多个组件可以有在于执行的进程和/或线程内,并且组件可以位于一个计算机上和/或分布在两个或更多计算机之间。

图9和随后的讨论提供了对实现本发明所述的应用测试装置所在的电子设备的工作环境的简短、概括的描述。图9的工作环境仅仅是适当的工作环境的一个实例并且不旨在建议关于工作环境的用途或功能的范围的任何限制。实例电子设备912包括但不限于可穿戴设备、头戴设备、医疗健康平台、个人计算机、服务器计算机、手持式或膝上型设备、移动设备(比如移动电话、个人数字助理(PDA)、媒体播放器等等)、多处理器系统、消费型电子设备、小型计算机、大型计算机、包括上述任意系统或设备的分布式计算环境,等等。

尽管没有要求,但是在“计算机可读指令”被一个或多个电子设备执行的通用背景下描述实施例。计算机可读指令可以经由计算机可读介质来分布(下文讨论)。计算机可读指令可以实现为程序模块,比如执行特定任务或实现特定抽象数据类型的功能、对象、应用编程接口(API)、数据结构等等。典型地,该计算机可读指令的功能可以在各种环境中随意组合或分布。

图9图示了包括本发明的应用测试装置中的一个或多个实施例的电子设备912的实例。在一种配置中,电子设备912包括至少一个处理单元916和存储器918。根据电子设备的确切配置和类型,存储器1318可以是易失性的(比如RAM)、非易失性的(比如ROM、闪存等)或二者的某种组合。该配置在图9中由虚线914图示。

在其他实施例中,电子设备912可以包括附加特征和/或功能。例如,设备912还可以包括附加的存储装置(例如可移除和/或不可移除的),其包括但不限于磁存储装置、光存储装置等等。这种附加存储装置在图9中由存储装置920图示。在一个实施例中,用于实现本文所提供的一个或多个实施例的计算机可读指令可以在存储装置920中。存储装置920还可以存储用于实现操作系统、应用程序等的其他计算机可读指令。计算机可读指令可以载入存储器918中由例如处理单元916执行。

本文所使用的术语“计算机可读介质”包括计算机存储介质。计算机存储介质包括以用于存储诸如计算机可读指令或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。存储器918和存储装置920是计算机存储介质的实例。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字通用盘(DVD)或其他光存储装置、盒式磁带、磁带、磁盘存储装置或其他磁存储设备、或可以用于存储期望信息并可以被电子设备912访问的任何其他介质。任意这样的计算机存储介质可以是电子设备912的一部分。

电子设备912还可以包括允许电子设备912与其他设备通信的通信连接926。通信连接926可以包括但不限于调制解调器、网络接口卡(NIC)、集成网络接口、射频发射器/接收器、红外端口、USB连接或用于将电子设备912连接到其他电子设备的其他接口。通信连接926可以包括有线连接或无线连接。通信连接926可以发射和/或接收通信媒体。

术语“计算机可读介质”可以包括通信介质。通信介质典型地包含计算机可读指令或诸如载波或其他传输机构之类的“己调制数据信号”中的其他数据,并且包括任何信息递送介质。术语“己调制数据信号”可以包括这样的信号:该信号特性中的一个或多个按照将信息编码到信号中的方式来设置或改变。

电子设备912可以包括输入设备924,比如键盘、鼠标、笔、语音输入设备、触摸输入设备、红外相机、视频输入设备和/或任何其他输入设备。设备912中也可以包括输出设备922,比如一个或多个显示器、扬声器、打印机和/或任意其他输出设备。输入设备924和输出设备922可以经由有线连接、无线连接或其任意组合连接到电子设备912。在一个实施例中,来自另一个电子设备的输入设备或输出设备可以被用作电子设备912的输入设备924或输出设备922。

电子设备912的组件可以通过各种互连(比如总线)连接。这样的互连可以包括外围组件互连(PCI)(比如快速PCI)、通用串行总线(USB)、火线(IEEE1394)、光学总线结构等等。在另一个实施例中,电子设备912的组件可以通过网络互连。例如,存储器918可以由位于不同物理位置中的、通过网络互连的多个物理存储器单元构成。

本领域技术人员将认识到,用于存储计算机可读指令的存储设备可以跨越网络分布。例如,可经由网络928访问的电子设备930可以存储用于实现本发明所提供的一个或多个实施例的计算机可读指令。电子设备912可以访问电子设备930并且下载计算机可读指令的一部分或所有以供执行。可替代地,电子设备912可以按需要下载多条计算机可读指令,或者一些指令可以在电子设备912处执行并且一些指令可以在电子设备930处执行。

本文提供了实施例的各种操作。在一个实施例中,所述的一个或多个操作可以构成一个或多个计算机可读介质上存储的计算机可读指令,其在被电子设备执行时将使得计算设备执行所述操作。描述一些或所有操作的顺序不应当被解释为暗示这些操作必需是顺序相关的。本领域技术人员将理解具有本说明书的益处的可替代的排序。而且,应当理解,不是所有操作必需在本文所提供的每个实施例中存在。

而且,尽管已经相对于一个或多个实现方式示出并描述了本公开,但是本领域技术人员基于对本说明书和附图的阅读和理解将会想到等价变型和修改。本公开包括所有这样的修改和变型,并且仅由所附权利要求的范围限制。特别地关于由上述组件(例如元件、资源等)执行的各种功能,用于描述这样的组件的术语旨在对应于执行所述组件的指定功能(例如其在功能上是等价的)的任意组件(除非另外指示),即使在结构上与执行本文所示的本公开的示范性实现方式中的功能的公开结构不等同。此外,尽管本公开的特定特征已经相对于若干实现方式中的仅一个被公开,但是这种特征可以与如可以对给定或特定应用而言是期望和有利的其他实现方式的一个或多个其他特征组合。而且,就术语“包括”、“具有”、“含有”或其变形被用在具体实施方式或权利要求中而言,这样的术语旨在以与术语“包含”相似的方式包括。

本发明实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。上述提到的存储介质可以是只读存储器,磁盘或光盘等。上述的各装置或系统,可以执行相应方法实施例中的方法。

综上所述,虽然本发明已以实施例揭露如上,实施例前的序号仅为描述方便而使用,对本发明各实施例的顺序不造成限制。并且,上述实施例并非用以限制本发明,本领域的普通技术人员,在不脱离本发明的精神和范围内,均可作各种更动与润饰,因此本发明的保护范围以权利要求界定的范围为准。

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