首页> 中国专利> 基于插桩函数辅助提高生成测试用例效率的方法及系统

基于插桩函数辅助提高生成测试用例效率的方法及系统

摘要

本发明公开了一种基于插桩函数辅助提高生成测试用例效率的方法及系统,其中该方法包括:步骤1)、利用插桩函数插桩web应用中的通用验证函数和用户自定义的自定义验证函数的代码路径;步骤2)收集并保存web应用通过网络发出的请求数据,同时通过步骤1)中的插桩函数从通用验证函数中获取请求参数的验证规则,保存该验证规则至数据库;步骤3)、对步骤)2中的请求数据进行分析处理,以得到并保存基础数据;步骤4)、从数据库中提取出保存的验证规则和基础数据,直接或通过深度学习模型生成参数规则生成模型;步骤5)、采用步骤4)生成的参数规则生成模型生成测试样例;采用上述方法生成web测试样例,无需人工干预,简单方便,准确性高。

著录项

  • 公开/公告号CN111124937A

    专利类型发明专利

  • 公开/公告日2020-05-08

    原文格式PDF

  • 申请/专利权人 深圳开源互联网安全技术有限公司;

    申请/专利号CN202010242792.9

  • 发明设计人 刘海涛;万振华;王颉;李华;董燕;

    申请日2020-03-31

  • 分类号

  • 代理机构广州三环专利商标代理有限公司;

  • 代理人张艳美

  • 地址 518000 广东省深圳市龙华区龙华街道清祥路清湖工业园宝能科技园7栋B座6楼KL单位

  • 入库时间 2023-12-17 10:29:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-07-03

    授权

    授权

  • 2020-06-02

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20200331

    实质审查的生效

  • 2020-05-08

    公开

    公开

说明书

技术领域

本发明涉及web应用测试技术领域,尤其涉及一种基于插桩函数辅助提高生成测试用例效率的方法及系统。

背景技术

随着网络技术的发展,web应用的数据也有着指数型的增长,同时应用的接口数量也越来越多,为了保证应用程序正常运行,需要产品在上线前对其有着充分的测试,其中包括判断是否存在越权漏洞。常见的有基于请求重发,来测试业务功能是否正常,比如:某请求只允许管理员访问,但是如果以普通用户的身份重新发送该请求也能得到相同的响应结果,即可认为存在越权漏洞。为了做到成分测试,一般会多次运行测试实例,在系统测试过程中,往往需要测试人员编写大量的测试脚本,目前在编写测试脚本时存在如下问题:

1、纯手工编写,对测试人员的水平要求较高。

2、借助配置文件生成,依然需要开发人员提供配置文件,版本迭代时,配置文件的维护也是一个问题。

3、借助机器学习自动生成测试脚本,当一个请求包含多个请求参数时,难以准确判断哪一个参数存在参数验证。

基于上述问题,造成现在编写测试脚本的效率比较低,不能满足实际工程需要。

发明内容

本发明的目的是提供一种基于插桩函数辅助提高生成测试用例效率的方法,以降低编写测试脚本的难度和提高编写测试脚本的效率。

本发明的另一目的是提供一种基于插桩函数辅助提高生成测试用例效率的系统,以降低编写测试脚本的难度和提高编写测试脚本的效率。

为了实现上述目的,本发明公开了一种基于插桩函数辅助提高生成测试用例效率的方法,其特征在于,包括:

步骤1)、利用插桩函数插桩待测试web应用中的通用验证函数和用户自定义的自定义验证函数的代码路径;

步骤2)、依次操作运行所述web应用中的所有功能模块,收集并保存所述web应用通过网络发出的请求数据,同时通过步骤1)中的插桩函数从所述通用验证函数中获取请求参数的验证规则,保存该验证规则至数据库;

步骤3)、对步骤)2中的所述请求数据进行分析处理,以得到基础数据,所述数据数据包括各个请求的URL、请求头、请求字段名、请求字段值、请求字段名与请求字段值之间的映射关系、请求字段名与所述验证规则的映射关系、相同请求的请求次数以及响应数据,将所述基础数据保存至数据库;

步骤4)、从所述数据库中提取出保存的验证规则和基础数据,根据请求字段名与验证规则的映射关系,判断任一请求字段名是否存在验证规则,如果是,利用与当前请求字段名相对应的验证规则直接生成参数规则生成模型,所述参数规则生成模型用于生成符合规则要求的测试实例,如果否,将所述基础数据中与当前请求字段名对应的数据输入深度学习模型,以输出与当前请求字段名对应的参数规则生成模型;

步骤5)、采用步骤4)生成的所述参数规则生成模型生成测试样例。

与现有技术相比,本发明基于插桩函数辅助提高生成测试用例效率的方法,首先,基于插桩函数自动提取请求的验证函数(包括通用验证函数和自定义验证函数),通过验证函数对请求参数进行验证,无需开发人员或测试人员深度了解请求接口的代码,从而有效降低了编写测试实例的难度;另外,本发明通过参数规则生成模型自动生成测试样例,对需要通用验证函数验证的请求,可直接通过通用验证函数直接生成参数规则生成模型,对于需要自定义验证函数验证的请求,可通过基于神经网络的深度学习模型自动生成参数规则生成模型,从而,在生成测试样例过程中,无须人工参与,而且准确性、速度快,有效提高测试样例的生成效率。

较佳地,还包括步骤6)、采用步骤5)生成的测试样例进行请求重发,获取验证请求的响应数据,并利用插桩函数获取自定义验证函数对当前请求的参数验证结果,将当前获得的响应数据和参数验证结果反馈给所述深度学习模型,以优化所生成的参数规则生成模型。

较佳地,所述深度学习模型对所述基础数据的处理过程为:将当前请求字段名、请求字段值、请求字段名与请求字段值之间的映射关系以及相同请求的请求次数作为输入数据,将与当前请求字段名对应的响应数据作为期望的输出值,利用监督学习算法分析和训练数据,以输出所述参数规则生成模型。

较佳地,所述深度学习模型还可根据随机数据生成算法生成随机测试数据,所述随机测试数据用于测试所述监督学习算法生成的所述参数规则生成模型是否正确。

本发明还公开一种基于插桩函数辅助提高自动生成测试用例效率的系统,其包括插桩模块、请求收集模块、请求分析处理模块、规则模型生成模块和测试样例生成模块;

所述插桩模块,用于利用插桩函数插桩待测试web应用中的通用验证函数和用户自定义的自定义验证函数的代码路径;

所述请求收集模块,用于收集并保存所述web应用通过网络发出的请求数据,同时通过所述插桩模块中的插桩函数从所述通用验证函数中获取请求参数的验证规则,保存该验证规则至数据库;

所述请求分析处理模块,用于对所述请求收集收集的所述请求数据进行分析处理,以得到基础数据并将该基础数据保存在数据库,所述数据数据包括各个请求的URL、请求头、请求字段名、请求字段值、请求字段名与请求字段值之间的映射关系、请求字段名与所述验证规则的映射关系、相同请求的请求次数以及响应数据;

所述规则模型生成模块,用于从所述数据库中提取出保存的验证规则和基础数据,并根据请求字段名与验证规则的映射关系,判断任一请求字段名是否存在验证规则,如果是,利用与当前请求字段名相对应的验证规则直接生成参数规则生成模型,如果否,将所述基础数据中与当前请求字段名对应的数据输入深度学习模型,以输出与当前请求字段名对应的参数规则生成模型,所述参数规则生成模型用于生成符合规则要求的测试实例;

所述测试样例生成模块,用于根据所述规则模型生成模块生成的所述参数规则生成模型自动生成测试样例。

较佳地,还包括请求验证模块,所述请求验证模块用于根据所述测试样例生成模块生成的测试样例进行请求重发,以获取验证请求的响应数据,并利用插桩函数获取自定义验证函数对当前请求的参数验证结果,并将当前获得的响应数据和参数验证结果反馈给所述深度学习模型,以优化所生成的参数规则生成模型。

较佳地,所述所述深度学习模型中设置有第一学习模块,当将当前请求字段名、请求字段值、请求字段名与请求字段值之间的映射关系以及相同请求的请求次数作为输入数据,将与当前请求字段名对应的响应数据作为期望的输出值输入所述深度学习模型中后,所述第一学习模块利用监督学习算法分析和训练数据,以输出所述参数规则生成模型。

较佳地,所述所述深度学习模型中设置有第二学习模块,所述第二学习模块用于根据输入所述深度学习模型中的基础数据采用随机数据生成算法生成随机测试数据,所述随机测试数据用于测试所述监督学习算法生成的所述参数规则生成模型是否正确。

本发明还公开一种基于插桩函数辅助提高自动生成测试用例效率的系统,其包括:

一个或多个处理器;

存储器;

以及一个或多个程序,其中一个或多个程序被存储在所述存储器中,并且被配置成由所述一个或多个处理器执行,所述程序包括用于执行如上所述的基于插桩函数辅助提高生成测试用例效率的方法的指令。

本发明还公开一种计算机可读存储介质,其包括测试用计算机程序,所述计算机程序可被处理器执行以完成如上所述的基于插桩函数辅助提高生成测试用例效率的方法。

附图说明

图1为本发明实施例基于插桩函数辅助提高生成测试用例效率的流程图。

图2为本发明实施例基于插桩函数辅助提高生成测试用例效率的系统架构图。

具体实施方式

为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。

如同1所示,为提高web应用的测试用例的编写效率,本发明公开了一种基于插桩函数辅助提高生成测试用例效率的方法,其包括如下步骤:

步骤1)、待测试web应用启动时,通过代理的方式利用插桩函数插桩待测试web应用中的通用验证函数和用户自定义的自定义验证函数代码路径,通用验证函数和自定义验证函数均用于验证测试样例中的请求参数是否符合规则,通用验证函数指的是行业内大家都比较认可的第三方库验证框架提供的函数,如java的javax.validation以及js的jquery-validation等,用户自定义的自定义验证函数是指用户可以定义自己的参数验证接口或者方法,其中可能没有定义验证规则,而是用返回值标明校验结果。

步骤2)、依次操作运行web应用中的所有功能模块,即对web应用中的所有请求端口都触发一次,收集并保存web应用通过网络发出的请求数据,同时通过步骤1)中的插桩函数从通用验证函数中获取请求参数的验证规则(也即正则表达式),保存该验证规则至数据库;如,对于下面的运行代码,

@Validated

public class LdapDto extends LdapEntity {

@Size(max = 512)

private String userFilter;

@Size(max = 512)

private String groupFilter;

@Size(max = 512)

@RegExp(prefix = "user|admin")

private String ldapBindUser;

@Size(max = 512)

private String ldapBindPassword;

}

通过插桩函数检测到@Size或者@Regexp函数(通用验证函数),那么就可以提取出这两个通用验证函数里面的验证规则。

步骤3)、对步骤)2中的请求数据进行分析处理,以得到基础数据,数据数据包括各个请求的URL、请求头、请求字段名、请求字段值、请求字段名与请求字段值之间的映射关系、请求字段名与其所对应的验证规则的映射关系、相同请求的请求次数以及响应数据,将基础数据保存至数据库。

步骤4)、从数据库中提取出保存的验证规则和基础数据,根据请求字段名与验证规则的映射关系,判断任一请求字段名是否存在验证规则,

如果是,利用与当前请求字段名相对应的验证规则直接生成参数规则生成模型,

如果否,将基础数据中与当前请求字段名对应的数据输入深度学习模型,以输出与当前请求字段名对应的参数规则生成模型,

参数规则生成模型用于生成符合规则要求的测试实例。

步骤5)、在步骤4)中,对于每一个需要验证的字段名,均对应地生成一个参数规则生成模型,由于参数规则生成模型中具有与当前字段名对应的正则表达式,因此,通过各个参数规则生成模型自动生成符合规则的测试样例。

在上述实施例中,首先,基于插桩函数自动提取请求的验证函数(包括通用验证函数和自定义验证函数),通过验证函数对请求参数进行验证,无需开发人员或测试人员深度了解请求接口的代码,从而有效降低了编写测试实例的难度;另外,对需要通用验证函数验证的请求,可直接通过通用验证函数直接生成参数规则生成模型,对于需要自定义验证函数验证的请求,可通过基于神经网络的深度学习模型自动生成参数规则生成模型,从而,在生成测试样例过程中,无须人工参与,而且准确性、速度快,有效提高测试样例的生成效率。

进一步地,为了进一步优化处理生成的参数规则生成模型,使之生成的测试样例更加符合待测试web应用的要求,较佳地,还包括步骤6)、采用步骤5)生成的测试样例进行请求重发,获取验证请求的响应数据,并利用插桩函数获取自定义验证函数对当前请求的参数验证结果,将当前获得的响应数据和参数验证结果反馈给深度学习模型,以优化所生成的参数规则生成模型。在本实施例中,由于通用验证函数中的验证规则为直接获取的,因此通过通用验证函数中的验证规则生成的参数规则生成模型正常情况下不会出错,因此,在进行请求重发的过程中,如果某一条请求不能通过,可通过插桩函数快速定位到该请求中的某一字段名。如,一条请求中包含了两个字段,name和phone,步骤4)中分别给出了与这两个请求字段名对应的参数规则生成模型,在步骤6验证发现不通过,如果没有插桩函数,那么只能分别对name和phone字段进行调整来继续测试,通过插桩函数可以得到自定义验证函数中哪个参数验证失败,以便快速对对应的参数规则生成模型进行优化。

在上述实施例中,深度学习模型对基础数据的处理过程为:将当前请求字段名、请求字段值、请求字段名与请求字段值之间的映射关系以及相同请求的请求次数作为输入数据,将与当前请求字段名对应的响应数据作为期望的输出值,利用监督学习算法分析和训练数据,以输出参数规则生成模型。如,某请求字段名为phone,记录中的请求字段值分别为18914561234(出现次数1)、15678863467(出现次数1)等,那么利用监督学习算法可以推断出11位数字的符合手机正则的参数规则生成模型。又比如:某请求字段名称为type,记录中的请求字段值分别为user(出现次数4)和admin(出现次数6),响应数据状态为成功,利用监督学习算法推断该请求字段名的参数规则生成模型为user|admin。较佳地,为了提高深度学习模型输出的准确度,深度学习模型还可根据随机数据生成算法生成随机测试数据,随机测试数据用于测试监督学习算法生成的参数规则生成模型是否正确。如,某请求字段名type,在数据库中的数据样本中只出现了user和admin这两种场景,那么监督学习算法得出的结果只会在这两者中选择而不会出现第三者,但是为了提高测试的准确性,可以通过随机数据生成算法随机生成type值为test的数据样本进行测试,如果也能得到正确响应,说明之前学习得到的结果因为样本数量过少导致并不准确,如果得不到正确响应说明之前学习得到的结果是对的,所以深度学习模型输出的参数规则生成模型准确性就得到了进一步的保证。

为便于上述方法的执行,本发明还公开一种基于插桩函数辅助提高自动生成测试用例效率的系统,如图2,其包括插桩模块10、请求收集模块11、请求分析处理模块12、规则模型生成模块13和测试样例生成模块14;插桩模块10,用于利用插桩函数插桩待测试web应用中的通用验证函数和用户自定义的自定义验证函数的代码路径;请求收集模块11,用于收集并保存web应用通过网络发出的请求数据,同时通过插桩模块10中的插桩函数从通用验证函数中获取请求参数的验证规则,保存该验证规则至数据库;请求分析处理模块12,用于对请求收集收集的请求数据进行分析处理,以得到基础数据并将该基础数据保存在数据库,数据数据包括各个请求的URL、请求头、请求字段名、请求字段值、请求字段名与请求字段值之间的映射关系、请求字段名与验证规则的映射关系、相同请求的请求次数以及响应数据;规则模型生成模块13,用于从数据库中提取出保存的验证规则和基础数据,并根据请求字段名与验证规则的映射关系,判断任一请求字段名是否存在验证规则,如果是,利用与当前请求字段名相对应的验证规则直接生成参数规则生成模型,如果否,将基础数据中与当前请求字段名对应的数据输入深度学习模型,以输出与当前请求字段名对应的参数规则生成模型,参数规则生成模型用于生成符合规则要求的测试实例;测试样例生成模块14,用于根据规则模型生成模块13生成的参数规则生成模型自动生成测试样例。较佳地,还可设置请求验证模块15,请求验证模块15用于根据测试样例生成模块14生成的测试样例进行请求重发,以获取验证请求的响应数据,并利用插桩函数获取自定义验证函数对当前请求的参数验证结果,并将当前获得的响应数据和参数验证结果反馈给深度学习模型,以优化所生成的参数规则生成模型。进一步地,深度学习模型中设置有第一学习模块,当将当前请求字段名、请求字段值、请求字段名与请求字段值之间的映射关系以及相同请求的请求次数作为输入数据,将与当前请求字段名对应的响应数据作为期望的输出值输入深度学习模型中后,第一学习模块利用监督学习算法分析和训练数据,以输出参数规则生成模型。较佳地,深度学习模型中设置有第二学习模块,第二学习模块用于根据输入深度学习模型中的基础数据采用随机数据生成算法生成随机测试数据,随机测试数据用于测试监督学习算法生成的参数规则生成模型是否正确。关于本实施例中的基于插桩函数辅助提高自动生成测试用例效率的系统的具体工作原理和过程详见上述基于插桩函数辅助提高自动生成测试用例效率的方法,在此不再赘述。

本发明还公开一种基于插桩函数辅助提高自动生成测试用例效率的系统,其包括一个或多个处理器、存储器以及一个或多个程序,其中一个或多个程序被存储在存储器中,并且被配置成由一个或多个处理器执行,程序包括用于执行如上所述的基于插桩函数辅助提高生成测试用例效率的方法的指令。

另外,本发明还公开一种计算机可读存储介质,其包括测试用计算机程序,计算机程序可被处理器执行以完成如上所述的基于插桩函数辅助提高生成测试用例效率的方法。

以上所揭露的仅为本发明的优选实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明申请专利范围所作的等同变化,仍属本发明所涵盖的范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号