CN106407102A - 应用程序的模糊测试方法、装置及系统 - Google Patents

应用程序的模糊测试方法、装置及系统 Download PDF

Info

Publication number
CN106407102A
CN106407102A CN201510479256.XA CN201510479256A CN106407102A CN 106407102 A CN106407102 A CN 106407102A CN 201510479256 A CN201510479256 A CN 201510479256A CN 106407102 A CN106407102 A CN 106407102A
Authority
CN
China
Prior art keywords
test data
application program
test
data
code coverage
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.)
Granted
Application number
CN201510479256.XA
Other languages
English (en)
Other versions
CN106407102B (zh
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 Technology Shenzhen Co Ltd
Original Assignee
Tencent 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 Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201510479256.XA priority Critical patent/CN106407102B/zh
Publication of CN106407102A publication Critical patent/CN106407102A/zh
Application granted granted Critical
Publication of CN106407102B publication Critical patent/CN106407102B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明涉及一种应用程序的模糊测试方法、装置及系统,在一种实施方式中,所述方法包括以下步骤:选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据;根据所述本次测试数据对所述被测应用程序进行测试;在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集;判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化;以及若所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率存在有效变化,则将所述本次测试数据写入基线库。将有效测试数据进行存储,可以有效精简测试数据且不影响测试效果。

Description

应用程序的模糊测试方法、装置及系统
技术领域
本发明属于计算机技术领域,尤其涉及一种应用程序的模糊测试方法、装置及系统。
背景技术
现有的计算机技术越来越普及,各种终端的应用程序也被更多的用户运用,但是应用程序的安全也越来越受到重视,应用程序的监控技术也更加重要。目前,通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法,也就是自动或半自动的生成随机数据输入到一个应用程序中,并监视应用程序异常,如崩溃,断言失败,日志异常等,以发现可能的程序错误。然而,采用上述方法测试时,由于缺少一定的有效手段和度量指标,往往会产生大量相同效果的无效测试数据,使整个测试过程耗时长,效果也不明显。因此,提供一种更有效的应用程序的测试方案是迫切需求的。
发明内容
本发明提供了一种应用程序的模糊测试方法、装置及系统,可以将有效测试数据进行存储,达到对测试数据的有效精简且不影响测试效果的目的。
本发明实施例提供一种应用程序的模糊测试方法,所述方法包括以下步骤:
选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据;
根据所述本次测试数据对所述被测应用程序进行测试;
在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集;
判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化;以及
若所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率存在有效变化,则将所述本次测试数据写入基线库。
本发明实施例还提供一种应用程序的模糊测试装置,所述装置包括:
测试数据生成模块,用于选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据;
测试执行模块,用于根据所述本次测试数据对所述被测应用程序进行测试;
覆盖率搜集模块,用于在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集;
第一判断模块,用于判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化;以及
数据写入模块,用于若所述第一判断模块判断所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率存在有效变化,则将所述本次测试数据写入基线库。
一种应用程序的模糊测试系统,所述系统包括:测试数据生成服务器、测试服务器、覆盖率搜集服务器以及基线库;
所述测试数据生成服务器,用于选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据;
所述测试服务器,用于根据所述本次测试数据对所述被测应用程序进行测试;
所述覆盖率搜集服务器,用于在所述测试服务器根据所述本次测试数据对所述被测应用程序进行测试的测试过程中搜集代码覆盖率;还用于判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化;以及
若所述覆盖率搜集服务器判断所述本次测试数据测试对应的代码覆盖率相对于上次测试数据测试对应的代码覆盖率存在有效变化,所述测试服务器还用于将所述本次测试数据写入所述基线库。
本发明实施例所提供的应用程序的模糊测试方法、装置及系统,通过在测试过程中,针对测试数据对应的代码覆盖率进行搜集,并将本次测试数据测试对应的代码覆盖率与上次测试数据测试对应的代码覆盖率进行比对以判断本次测试数据是否有效,将有效的测试数据进行存储,达到对测试数据的有效精简且不影响测试效果的目的。
为让本发明的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
图1示出了一种服务器在一个实施例中的结构框图。
图2为第一实施例提供的应用程序的模糊测试方法流程图。
图3为第二实施例提供的应用程序的模糊测试方法流程图。
图4为第三实施例提供的应用程序的模糊测试方法流程图。
图5为第四实施例提供的应用程序的模糊测试装置结构框图。
图6为第五实施例提供的应用程序的模糊测试装置结构框图。
图7为第六实施例提供的应用程序的模糊测试装置结构框图。
图8为第七实施例提供的应用程序的模糊测试系统示意图。
具体实施方式
为更进一步阐述本发明为实现预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明的具体实施方式、结构、特征及其功效,详细说明如后。
本发明实施例所提供的应用程序的模糊测试方法、装置及系统可用于服务器。
图1为一种服务器100的一个实施例的结构框图。如图1所示,服务器100包括:存储器102、处理器104以及网络模块106。可以理解,图1所示的结构仅为示意,其并不对服务器100的结构造成限定。例如,服务器100还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器102可用于存储软件程序以及模块,如本发明实施例中的应用程序的模糊测试处理方法、装置及系统对应的程序指令/模块,处理器104通过运行存储在存储器102内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的模糊测试方法。存储器102可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器102可进一步包括相对于处理器104远程设置的存储器,这些远程存储器可以通过网络连接至服务器100。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
网络模块106用于接收以及发送网络信号。上述网络信号可包括无线信号或者有线信号。在一个实例中,上述网络信号为有线网络信号。此时,网络模块106可包括处理器、随机存储器、转换器、晶体振荡器等元件。
上述的软件程序以及模块包括:操作系统108、测试数据生成管理模块110、测试执行管理模块112以及覆盖率搜集管理模块114。其中操作系统108例如可为LINUX,UNIX,WINDOWS,其可包括各种用于管理系统任务(例如内存管理、存储设备控制、电源管理等)的软件组件和/或驱动,并可与各种硬件或软件组件相互通讯,从而提供其他软件组件的运行环境。测试数据生成管理模块110、测试执行管理模块112以及覆盖率搜集管理模块114运行在操作系统108的基础上,并通过操作系统108的网络服务监听来自网络的请求,根据请求完成相应的数据处理。
此外,在上述的实施例中,测试数据生成管理模块110、测试执行管理模块112以及覆盖率搜集管理模块114是部署在同一服务器中,然后,其实施方式并不限于此。例如,还可将测试数据生成管理模块110、测试执行管理模块112以及覆盖率搜集管理模块114分别部署在独立的服务器中;或者将测试数据生成管理模块110及测试执行管理模块112部署在同一服务器中,而覆盖率搜集管理模块114部署在另一服务器。总之,本领域普通技术人员可以根据具体的需求以及硬件环境灵活部署。
第一实施例
本实施例提供一种应用程序的模糊测试方法,本实施例的方法可用于图1所示的服务器中,如图2所示,本实施例的方法包括以下步骤:
步骤S101、选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据。
所述测试数据可以理解为可应用在所述被测应用程序中,使所述被测应用程序运行的测试用例。所述数据生成规则可包括多种规则类型,例如所述多种规则类型可包括:分隔符、随机数、二进制数据量、字符型、bit型、byte型以及float型等,其中,分隔符包括如\r、\n、=、>、<等分隔符;随机数包括各种长度的随机数;二进制数据量包括各种二进制数据流的组合;字符型包括ascii、unicode在内的各种字符型数据。可以知道的是,上述规则类型仅为列举例子,并不包括全部的规则类型。所述测试数据由所述多种规则类型组成,例如,可以是用于测试的日期,指定长度内的字母数字组合字符串等。
进一步地,所述数据生成规则是可扩充的,在实际运用中,技术人员可根据需求进行扩充。
进一步地,所述数据生成规则可以存储在数据生成规则数据库中,也可以直接存储在服务器100中。
详细地,步骤S101可包括:解析所述被测应用程序的协议,在协议管理库中查询所述被测应用程序的协议,生成所述协议对应的描述文件;调度所述描述文件中对应的所述数据生成规则;以及根据所述数据生成规则生成所述本次测试数据,并将所述本次测试数据作为待用测试数据进行存储。
所述协议包括但不限于:HTTP协议TCP/IP协议、Rpc协议、SOAP协议等。具体地,可使用服务器100中的协议适配器与所述被测应用程序对应的协议的有效调用。进一步地,服务器100可提供可供扩展的接口,可以定义新的协议并开发新的协议适配器,但是应该遵循以下协议规范,其中扩展协议包括:协议名称:所述协议的名称;访问方式:所述协议的服务地址或者访问地址;访问参数:访问所述协议需要提供的请求参数;等等。
进一步地,通过服务器100中的协议解析器,调用所述被测应用程序及所述被测应用程序对应的协议,解析出所述被测应用程序的协议以及被测接口和输入参数,并将解析出来的所述被测应用程序的协议以及被测接口和输入参数转存为服务器100可处理的所述协议对应的描述文件,所述描述文件中包括所述协议下的数据生成规则。在一个实例中,所述描述文件可以为如下代码:
1 import sys
2 ……
3 s_initialize("HTTP REQUEST")
4 s_static("GET http://www.****.com/tws/apiextusercash/CashOut?")
5 s_static("bankId=")
6 s_no_appoint_datatype("102",name="bankId")
7 s_static("&")
8 s_static("cashOut=")
9 s_no_appoint_datatype("12100",name="cashOut")
……
上面的代码示例展示了一份基于HTTP协议的协议描述文件,第三行初始化一个http的请求;第四行展示该http请求的类型(get)以及请求的url;第五行定义第一个参数bankId;第六行定义所述参数bankId的测试数据生成规则,本实例中的测试数据生成规则为s_no_appoint_datatype所定义内容。测试数据生成过程中,若不特别指定任何规则,则将所有的规则遍历一遍,生成所有的可能的测试数据。可以知道的是,若不特别指定任何规则,仅根据数据生成规则的规则类型生成所有可能的测试数据,生成的测试数据量将会非常大。
详细地,通过一个服务器100中的规则调度器调度所述描述文件中对应的所述数据生成规则。例如上述描述文件中的数据生成规则,包括一个由字母组成的名称字符串以及由数字组成的字符串。进一步地,将生成的测试数据进行存储。在一个实例中,所生成的测试数据的存储内容包括:用例编号;用例数据;及所属测试用例数据生成规则。
步骤S102、根据所述本次测试数据对所述被测应用程序进行测试。
详细地,步骤S102可包括:将所述本次测试数据注入所述被测应用程序中;在所述根据所述本次测试数据对所述被测应用程序进行测试时,对所述测试过程进行异常监控;输出根据所述本次测试数据得到的测试报告。
具体地,所述被测应用程序,可以是存储在不同于服务器100的另外的服务器,可以是存储在电子终端中的应用程序,本申请的实施例中并不限制所述被测应用程序与测试模块的存储终端,当然,所述被测应用程序也可以存储在服务器100中的待测应用程序。
具体地,在测试时,还包括监控所述被测应用程序的反应,并记录本次测试状况。在一个实例中,主要监控内容包括:core dump;用例执行有无返回;日志异常。所述core dump又叫做核心转储,当程序运行过程中发生异常,程序异常退出时,由操作系统把程序当前的内存状况存储在一个core文件中。
具体地,所述测试报告包括:上述异常监控监测到的问题,测试用例汇总数据等。详细地,所述异常监控监测到的问题,包括相应问题以及引起所述相应问题的对应测试数据。详细地,所述测试用例汇总数据为前面所有针对所述被测应用程序的测试产生的数据。
步骤S103、在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集。
具体地,步骤S103可包括:在所述测试之前,对被测应用程序进行插桩;根据所述本次测试数据完成测试之后,搜集所述代码覆盖率。
详细地,所述插桩是在保证所述被测应用程序原有逻辑完整性的基础上在程序中插入一些探针或“探测仪”,通过探针的执行并抛出程序运行的特征数据,通过对所述特征数据的分析,可以获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,从而实现测试目的的方法。所述搜集代码覆盖率,为增加本次测试后所述被测应用程序的代码覆盖率的总值。例如,若本次测试为第四次测试所述被测应用程序。所述本次测试所对应的代码覆盖率为四次全部测试后的总的代码覆盖率,而所述上次测试数据对应代码覆盖率则为前三次全部测试后的总的代码覆盖率。所述分析本次测试数据对应的代码覆盖率与上次测试数据对应代码覆盖率的差距,则可以理解为,增加本次测试后代码覆盖率产生的变化。
步骤S104、判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化。
在本步骤中,分析本次测试数据对应的代码覆盖率与上次测试数据对应代码覆盖率的差距,若存在差距则表示所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率存在有效变化,若不存在差距则表示所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率不存在有效变化。所述代码覆盖率的差距为两次测试得到的代码覆盖率的差值。
详细地,若本次测试为所述被测应用程序第一次被测试,则所述上次测试数据对应的代码覆盖率默认为零,本次测试直接搜集所述本次测试数据对应的代码覆盖率,若所述代码覆盖率为零或者小于某个指定的极限值,则表示根据所述本次测试数据对所述被测应用程序的源代码中的代码测试的比例为零,所述本次测试数据为无效测试数据。若本次测试不是第一次测试所述被测应用程序,则统计本次测试的代码覆盖率,并与上次测试所述被测应用程序的代码覆盖率进行比较,若两次覆盖率的差值为零,或者小于某个指定值,则视本次测试数据为无效测试数据。
步骤S105、若所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率存在有效变化,则将所述本次测试数据写入基线库。
详细地,若所述本次测试数据对应的代码覆盖率相对于上次测试数据对应的代码覆盖率存在有效变化,也就是说,使用本次测试后,若所述代码覆盖率有增加,则表示所述本次测试数据为有效测试数据。
进一步地,将有效测试数据存储至所述基线库中。详细地,将所述有效测试数据与对应的被测应用程序进行关联以数据文件的形式进行存储。进一步地,下次测试所述被测应用程序时,在所述应用程序未更新的情况下,可直接调用所述基线库中的测试数据进行测试。
详细地,基线库中存储的测试数据也可以当成是所述被测应用程序的一个特殊的测试数据生成规则。
根据本实施例的方法,通过对应用程序测试时,能够对不同测试数据,测试的代码覆盖率的变化进行统计,因此来判断对应的测试数据是否对被测的应用程序有效,有效的测试数据进行存储,无效的测试数据丢弃,以此来达到对测试数据的有效精简且不影响测试效果的目的。
第二实施例
本实施例提供一种应用程序的模糊测试方法,本实施例的方法可用于图1所示的服务器中,本实施例的方法与第一实施例类似,如图3所示,所述方法包括:
步骤S101、选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据。
步骤S102、根据所述本次测试数据对所述被测应用程序进行测试。
步骤S103、在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集。
步骤S104、判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化。
其中,上述步骤S101至步骤S104可参考第一实施例,在此不再赘述。
步骤S201、判断所述本次测试数据与所述上次测试数据是否来自同一数据生成规则。
若步骤S104判断所述本次测试数据对应的代码覆盖率相对于上次测试数据对应的代码覆盖率无有效变化,则执行步骤S201。
在本步骤中,若所述本次测试数据与所述上次测试数据来自同一数据生成规则,则所述被测应用程序的测试跳过所述本次测试数据与所述上次测试数据对应的数据生成规则下生成的所有测试数据。
在一个实例中,所述数据生成规则包括生成两个字符串,其一为三位数的数字组成的字符串;其二为若干字母组成的字符串。若上述规则下生成的其一三位数组成的数字,前后两次的测试数据均为三位数字符串和字母字符串组成的测试数据,且两次测试得到的代码覆盖率没有变化,则跳过在所述数据生成规则下生成的所有测试数据的测试。
进一步地,也可以预设跳过指定数量的所述数据生成规则下生成的测试数据的执行步骤。例如,指定上述规则下生成的十个测试数据或测试用例。从本次测试数据测试后,使用后接的第十一个测试用例进行下次测试。
步骤S202、删除所述本次测试数据。
在本步骤中,若判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比不存在有效变化,且进一步判断所述本次测试数据与所述上次测试数据来自同一数据生成规则,则删除先前在步骤S101(请参考第一实施例)中存储的所述本次测试数据。
根据本实施例的方法,通过比较两次测试代码覆盖率来判断测试数据对于被测应用程序是否有效,若判断测试数据对于被测应用程序无效,且前后两次测试来自于同一数据生成规则,则所述被测应用程序的测试跳过所述本次测试数据与所述上次测试数据对应的数据生成规则下生成的所有测试数据,如此可以有效提高测试速度,并且进一步将无效测试用例删除,能够提高下次测试所述被测应用程序时的效率。
第三实施例
本实施例提供一种应用程序的模糊测试方法,本实施例的方法可用于图1所示的服务器中,本实施例的方法与第一实施例类似,如图4所示,所述方法包括:
步骤S101、选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据。
步骤S102、根据所述本次测试数据对所述被测应用程序进行测试。
步骤S103、在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集。
步骤S104、判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化。
步骤S105、若所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率存在有效变化,则将所述本次测试数据写入基线库。
其中,上述步骤S101至步骤S105可参考第一实施例,在此不再赘述。
步骤S301、若检测到所述被测应用程序的源代码有更新,则对所述被测应用程序的源代码变更的部分所对应的接口建立所述被测应用程序对应的基线库。
举例说明,若所述被测应用程序增加了新的时间识别功能,则对接收时间的对应接口,或者所述被测应用程序显示界面中接收时间输入的窗口建立所述被测应用程序对应的基线库。
详细地,根据变更的部分所对应的接口对应的协议生成对应的描述文件,所述描述文件中包括对应的数据生成规则。根据所述数据生成规则生成对应变更部分的测试数据,根据所述测试数据对变更部分进行测试。将所述有效测试数据与对应的被测应用程序进行关联以数据文件的形式存储至所述基线库,从而实现所述基线库的建立。
此外,若所述被测应用程序未更新,且所述基线库中已存储所述被测应用程序的测试数据,则可直接调用所述测试数据对所述被测应用程序进行测试。
根据本实施例的方法,在所述被测应用程序的源代码有更新时,重新建立基线库中的数据,能够在测试时免于做一些无用的测试,从而避免浪费测试时间,也提高测试的准确性。
第四实施例
本实施例提供一种应用程序的模糊测装置,本实施例的装置可用于图1所示的服务器中,如图5所示,所述装置包括:测试数据生成模块401、测试执行模块402、覆盖率搜集模块403、第一判断模块404以及数据写入模块405。
测试数据生成模块401,用于选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据。
测试数据生成模块401可包括:协议解析单元、调度单元、数据生成单元以及存储单元。
协议解析单元,用于解析所述被测应用程序的协议,在协议管理库中查询所述被测应用程序的协议,生成所述协议对应的描述文件。
调度单元,用于调度所述描述文件中对应的所述数据生成规则。
数据生成单元,用于根据所述数据生成规则生成所述本次测试数据。
存储单元,用于将所述本次测试数据作为待用测试数据进行存储。
测试执行模块402,用于根据所述本次测试数据对所述被测应用程序进行测试。
测试执行模块402可包括:测试数据注入单元、输出报告单元以及异常监控单元。
测试数据注入单元,用于将所述本次测试数据注入所述被测应用程序中。
输出报告单元,用于输出根据所述本次测试数据得到的测试报告。
异常监控单元,用于在根据所述本次测试数据对所述被测应用程序进行测试时,对所述测试过程进行异常监控。
覆盖率搜集模块403,用于在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集。
覆盖率搜集模块403可包括:插桩单元以及搜集覆盖率单元。
插桩单元,用于在所述测试之前,对所述被测应用程序进行插桩;
搜集覆盖率单元,用于根据所述本次测试数据执行完成之后,搜集所述代码覆盖率。
第一判断模块404,用于判断所述本次测试数据对应的代码覆盖率与上次测试数据对应代码覆盖率相比是否存在有效变化。
第一判断模块404还用于分析所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率的差距,若存在差距则表示所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率存在有效变化,若不存在差距则表示所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率不存在有效变化。
数据写入模块405,用于若第一判断模块404判断所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应代码覆盖率存在有效变化,则将所述本次测试数据写入基线库。
关于本实施例的其它细节,可进一步参考第一实施例,在此不再赘述。
根据本实施例的装置,通过对应用程序测试时,能够对不同测试数据,测试的代码覆盖率的变化进行统计,因此来判断对应的测试数据是否对被测的应用程序有效,有效的测试数据进行存储,无效的测试数据丢弃,以此来达到对测试数据的有效精简且不影响测试效果的目的。
第五实施例
本实施例提供一种应用程序的模糊测装置,本实施例的装置可用于图1所示的服务器中,本实施例与第四实施例类似,其不同之处在于,如图6所示,若第一判断模块404判断所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应代码覆盖率无有效变化,则本实施例的装置还包括:
第二判断模块501,用于判断所述本次测试数据与所述上次测试数据是否来自同一数据生成规则;
若第二判断模块501判断为本次测试数据与所述上次测试数据来自同一数据生成规则,则测试执行模块402,还用于使所述被测应用程序的测试跳过所述本次测试数据与所述上次测试数据对应的数据生成规则下生成的所有测试数据。
删除模块502,用于删除所述基线库中存储的所述被测应用程序对应的上述被选择的所述对应数据生成规则下生成的所有测试数据。
关于本实施例的其它细节,可进一步参考第二实施例,在此不再赘述。
根据本实施例的装置,通过比较两次测试代码覆盖率来判断测试数据对于被测应用程序是否有效,若判断测试数据对于被测应用程序无效,且前后两次测试来自于同一数据生成规则,则所述被测应用程序的测试跳过所述本次测试数据与所述上次测试数据对应的数据生成规则下生成的所有测试数据,如此可以有效提高测试速度,并且进一步将无效测试用例删除,能够提高下次测试所述被测应用程序时的效率。
第六实施例
本实施例提供一种应用程序的模糊测装置,本实施例的装置可用于图1所示的服务器中,本实施例与第四实施例类似,其不同之处在于,如图7所示,所述装置还包括:
基线库重建模块601,用于若检测到所述被测应用程序的源代码有更新,则对所述被测应用程序的源代码变更的部分所对应的接口建立所述被测应用程序对应的基线库。
关于本实施例的其它细节,可进一步参考第三实施例,在此不再赘述。
根据本实施例的装置,在所述被测应用程序的源代码有更新时,重新简历基线库中的数据,能够在测试时免于做一些无用的测试,从而避免浪费测试时间,也提高测试的准确性。
第七实施例
本实施例提供一种应用程序的模糊测试系统,如图8所示,所述系统包括:测试数据生成服务器11、测试服务器12、覆盖率搜集服务器13以及基线库200;
测试数据生成服务器11,用于选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据。
测试服务器12,用于根据所述本次测试数据对所述被测应用程序进行测试。
覆盖率搜集服务器13,用于在测试服务器12根据所述本次测试数据对所述被测应用程序进行测试的测试过程中搜集代码覆盖率;还用于判断所述本次测试数据对应的代码覆盖率与上次测试数据对应代码覆盖率相比是否存在有效变化。
若覆盖率搜集服务器13判断所述本次测试数据测试对应的代码覆盖率相对于上次测试数据测试对应的代码覆盖率存在有效变化,测试服务器12还用于将所述本次测试数据写入基线库200。
关于本实施例的其它细节,可进一步参考上述方法实施例,在此不再赘述。
根据本实施例的系统,通过对应用程序测试时,能够对不同测试数据,测试的代码覆盖率的变化进行统计,因此来判断对应的测试数据是否对被测的应用程序有效,有效的测试数据进行存储,无效的测试数据丢弃,以此来达到对测试数据的有效精简且不影响测试效果的目的。
此外,本发明实施例还提供一种计算机可读存储介质,其内存储有计算机可执行指令,上述的计算机可读存储介质例如为非易失性存储器例如光盘、硬盘、或者闪存。上述的计算机可执行指令用于让计算机或者类似的运算装置完成上述的应用程序的模糊测试方法中的各种操作。
需要说明的是,本说明书中的各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、物品或者装置中还存在另外的相同要素。
以上该,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

Claims (17)

1.一种应用程序的模糊测试方法,其特征在于,所述方法包括以下步骤:
选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据;
根据所述本次测试数据对所述被测应用程序进行测试;
在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集;
判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化;以及
若所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率存在有效变化,则将所述本次测试数据写入基线库。
2.如权利要求1所述的应用程序的模糊测试方法,其特征在于,所述方法还包括:
若所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率无有效变化,则进一步判断所述本次测试数据与所述上次测试数据是否来自同一数据生成规则;以及
若所述本次测试数据与所述上次测试数据来自同一数据生成规则,则所述被测应用程序的测试跳过所述本次测试数据与所述上次测试数据对应的数据生成规则下生成的所有测试数据。
3.如权利要求1所述的应用程序的模糊测试方法,其特征在于,所述方法还包括:
若检测到所述被测应用程序的源代码有更新,则对所述被测应用程序的源代码变更的部分所对应的接口建立所述被测应用程序对应的基线库。
4.如权利要求1所述的应用程序的模糊测试方法,其特征在于,所述选择与被测应用程序对应数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据包括:
解析所述被测应用程序的协议,在协议管理库中查询所述被测应用程序的协议,生成所述协议对应的描述文件;
调度所述描述文件中对应的所述数据生成规则;以及
根据所述数据生成规则生成所述本次测试数据,并将所述本次测试数据作为待用测试数据进行存储。
5.如权利要求1所述的应用程序的模糊测试方法,其特征在于,所述根据所述本次测试数据对所述被测应用程序进行测试包括:
将所述本次测试数据注入所述被测应用程序中;以及
输出根据所述本次测试数据得到的测试报告。
6.如权利要求5所述的应用程序的模糊测试方法,其特征在于,所述方法还包括:
在所述根据所述本次测试数据对所述被测应用程序进行测试时,对所述测试过程进行异常监控。
7.如权利要求1所述的应用程序的模糊测试方法,其特征在于,所述在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集包括:
在所述测试之前,对被测应用程序进行插桩;以及
根据所述本次测试数据完成测试之后,搜集所述代码覆盖率。
8.如权利要求1所述的应用程序的模糊测试方法,其特征在于,所述判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化包括:
分析所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率的差距,若存在差距则表示所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率存在有效变化,若不存在差距则表示所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率不存在有效变化。
9.一种应用程序的模糊测试装置,其特征在于,所述装置包括:
测试数据生成模块,用于选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据;
测试执行模块,用于根据所述本次测试数据对所述被测应用程序进行测试;
覆盖率搜集模块,用于在所述根据所述本次测试数据对所述被测应用程序进行测试的测试过程中进行代码覆盖率搜集;
第一判断模块,用于判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化;以及
数据写入模块,用于若所述第一判断模块判断所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率存在有效变化,则将所述本次测试数据写入基线库。
10.如权利要求9所述的应用程序的模糊测试装置,其特征在于,若所述第一判断模块判断所述本次测试数据对应的代码覆盖率相对于所述上次测试数据对应的代码覆盖率无有效变化,则所述装置还包括:
第二判断模块,用于判断所述本次测试数据与所述上次测试数据是否来自同一数据生成规则;以及
若所述第二判断模块判断所述本次测试数据与所述上次测试数据来自同一数据生成规则,则所述测试执行模块,还用于使所述被测应用程序的测试跳过所述本次测试数据与所述上次测试数据对应的数据生成规则下生成的所有测试数据。
11.如权利要求9所述的应用程序的模糊测试装置,其特征在于,所述装置还包括:
基线库重建模块,用于若检测到所述被测应用程序的源代码有更新,则对所述被测应用程序的源代码变更的部分所对应的接口建立所述被测应用程序对应的基线库。
12.如权利要求9所述的应用程序的模糊测试装置,其特征在于,所述测试数据生成模块包括:
协议解析单元,用于解析所述被测应用程序的协议,在协议管理库中查询所述被测应用程序的协议,生成所述协议对应的描述文件;
调度单元,用于调度所述描述文件中对应的所述数据生成规则;
数据生成单元,用于根据所述数据生成规则生成所述本次测试数据;以及
存储单元,用于将所述本次测试数据作为待用测试数据进行存储。
13.如权利要求9所述的应用程序的模糊测试装置,其特征在于,所述测试执行模块包括:
测试数据注入单元,用于将所述本次测试数据注入所述被测应用程序中;以及
输出报告单元,用于输出根据所述本次测试数据得到的测试报告。
14.如权利要求13所述的应用程序的模糊测试装置,其特征在于,所述测试执行模块还包括:
异常监控单元,用于在根据所述本次测试数据对所述被测应用程序进行测试时,对所述测试过程进行异常监控。
15.如权利要求9所述的应用程序的模糊测试装置,其特征在于,所述覆盖率搜集模块包括:
插桩单元,用于在所述测试之前,对所述被测应用程序进行插桩;以及
搜集覆盖率单元,用于根据所述本次测试数据完成测试之后,搜集所述代码覆盖率。
16.如权利要求9所述的应用程序的模糊测试装置,其特征在于,所述第一判断模块还用于分析所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率的差距,若存在差距则表示所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率存在有效变化,若不存在差距则表示所述本次测试数据对应的代码覆盖率与所述上次测试数据对应的代码覆盖率不存在有效变化。
17.一种应用程序的模糊测试系统,其特征在于,所述系统包括:测试数据生成服务器、测试服务器、覆盖率搜集服务器以及基线库;
所述测试数据生成服务器,用于选择与被测应用程序对应的数据生成规则,并根据所述数据生成规则与被测应用程序的协议特征生成本次测试数据;
所述测试服务器,用于根据所述本次测试数据对所述被测应用程序进行测试;
所述覆盖率搜集服务器,用于在所述测试服务器根据所述本次测试数据对所述被测应用程序进行测试的测试过程中搜集代码覆盖率;还用于判断所述本次测试数据对应的代码覆盖率与上次测试数据对应的代码覆盖率相比是否存在有效变化;以及
若所述覆盖率搜集服务器判断所述本次测试数据测试对应的代码覆盖率相对于所述上次测试数据测试对应的代码覆盖率存在有效变化,所述测试服务器还用于将所述本次测试数据写入所述基线库。
CN201510479256.XA 2015-08-03 2015-08-03 应用程序的模糊测试方法、装置及系统 Active CN106407102B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510479256.XA CN106407102B (zh) 2015-08-03 2015-08-03 应用程序的模糊测试方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510479256.XA CN106407102B (zh) 2015-08-03 2015-08-03 应用程序的模糊测试方法、装置及系统

Publications (2)

Publication Number Publication Date
CN106407102A true CN106407102A (zh) 2017-02-15
CN106407102B CN106407102B (zh) 2020-11-20

Family

ID=58008145

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510479256.XA Active CN106407102B (zh) 2015-08-03 2015-08-03 应用程序的模糊测试方法、装置及系统

Country Status (1)

Country Link
CN (1) CN106407102B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109522146A (zh) * 2018-11-15 2019-03-26 腾讯音乐娱乐科技(深圳)有限公司 对客户端进行异常测试的方法、装置及存储介质
CN110633201A (zh) * 2018-07-10 2019-12-31 清华大学 针对程序的集成模糊测试方法及装置
CN110674024A (zh) * 2018-07-02 2020-01-10 北京忆恒创源科技有限公司 电子设备集成测试系统及其方法
CN111176972A (zh) * 2018-11-12 2020-05-19 阿里巴巴集团控股有限公司 测试方法与系统
CN112363939A (zh) * 2020-11-12 2021-02-12 深圳开源互联网安全技术有限公司 快速生成模糊测试网络协议模板的方法及系统、设备
CN113254325A (zh) * 2020-02-10 2021-08-13 北京沃东天骏信息技术有限公司 测试用例的处理方法和装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102243608A (zh) * 2010-05-13 2011-11-16 方兴 基于全局数据结构描述的软件安全测试方法
US8479169B1 (en) * 2008-10-20 2013-07-02 Google Inc. Code analysis via ranged values
US8745592B1 (en) * 2010-01-08 2014-06-03 Google Inc. Input selection for automatic test suite generation
CN104375942A (zh) * 2014-12-11 2015-02-25 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
CN104573524A (zh) * 2014-12-19 2015-04-29 中国航天科工集团第二研究院七〇六所 一种基于静态检测的模糊测试方法
CN104598383A (zh) * 2015-02-06 2015-05-06 中国科学院软件研究所 一种基于模式的动态漏洞挖掘集成系统和方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8479169B1 (en) * 2008-10-20 2013-07-02 Google Inc. Code analysis via ranged values
US8745592B1 (en) * 2010-01-08 2014-06-03 Google Inc. Input selection for automatic test suite generation
CN102243608A (zh) * 2010-05-13 2011-11-16 方兴 基于全局数据结构描述的软件安全测试方法
CN104375942A (zh) * 2014-12-11 2015-02-25 无锡江南计算技术研究所 一种面向二进制的混合模糊测试方法
CN104573524A (zh) * 2014-12-19 2015-04-29 中国航天科工集团第二研究院七〇六所 一种基于静态检测的模糊测试方法
CN104598383A (zh) * 2015-02-06 2015-05-06 中国科学院软件研究所 一种基于模式的动态漏洞挖掘集成系统和方法

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110674024A (zh) * 2018-07-02 2020-01-10 北京忆恒创源科技有限公司 电子设备集成测试系统及其方法
CN110633201A (zh) * 2018-07-10 2019-12-31 清华大学 针对程序的集成模糊测试方法及装置
CN110633201B (zh) * 2018-07-10 2020-06-02 清华大学 针对程序的集成模糊测试方法及装置
CN111176972A (zh) * 2018-11-12 2020-05-19 阿里巴巴集团控股有限公司 测试方法与系统
CN109522146A (zh) * 2018-11-15 2019-03-26 腾讯音乐娱乐科技(深圳)有限公司 对客户端进行异常测试的方法、装置及存储介质
CN113254325A (zh) * 2020-02-10 2021-08-13 北京沃东天骏信息技术有限公司 测试用例的处理方法和装置
CN112363939A (zh) * 2020-11-12 2021-02-12 深圳开源互联网安全技术有限公司 快速生成模糊测试网络协议模板的方法及系统、设备

Also Published As

Publication number Publication date
CN106407102B (zh) 2020-11-20

Similar Documents

Publication Publication Date Title
CN106407102A (zh) 应用程序的模糊测试方法、装置及系统
CN100468356C (zh) 通过属性控制的测试实例继承
EP2778929B1 (en) Test script generation system
CN107273286A (zh) 针对任务应用的场景自动化测试平台及方法
CN108108297A (zh) 自动化测试的方法和装置
CN106294120A (zh) 测试代码的方法、设备和计算机程序产品
CN104123227A (zh) 一种自动生成测试用例的方法
CN109726105A (zh) 测试数据构造方法、装置、设备及存储介质
CN110297760A (zh) 测试数据的构造方法、装置、设备及计算机可读存储介质
CN102707712B (zh) 电子装备故障诊断方法和系统
CN103678124B (zh) 基于持续集成环境的视频监控平台自动测试方法及装置
CN103164323A (zh) 数据自动生成方法以及数据自动生成系统
CN106326120B (zh) 一种应用软件的回归测试方法及装置、电子设备
CN112363953B (zh) 基于爬虫技术和规则引擎的接口测试用例生成方法及系统
CN105718371A (zh) 一种回归测试方法、装置及系统
CN108959067A (zh) 搜索引擎的测试方法、装置及计算机可读存储介质
CN105653946A (zh) 基于组合事件行为触发的Android恶意行为检测系统及其检测方法
CN107080945B (zh) 测试游戏中人工智能行为的方法、装置及电子设备
CN104731698A (zh) 基于自动化测试的异常测试用例自动生成处理方法及装置
CN109828750B (zh) 自动配置数据埋点的方法、装置、电子设备及存储介质
CN108874649A (zh) 自动化测试脚本的生成方法、装置及其计算机设备
CN111240876A (zh) 微服务的故障定位方法、装置、存储介质及终端
CN103049374B (zh) 一种自动化测试的方法及装置
CN112650688A (zh) 自动化回归测试方法、关联设备以及计算机程序产品
CN114238081A (zh) 一种适用于小卫星批量测试的方法及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant