协议程序测试模型自动生成方法及装置转让专利

申请号 : CN202310708075.4

文献号 : CN116455798B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 罗正雄于珺泽吴非凡姜宇赵艳阳

申请人 : 清华大学

摘要 :

本发明实施例提供一种协议程序测试模型自动生成方法及装置,该方法包括:对协议程序运行的网络流量进行抓取,记录数据交换的协议包序列;获取协议包序列中的协议包的数据模型信息;数据模型信息包括协议包的字段、取值及层次结构;根据协议包序列及协议包类型获取测试状态模型;测试状态模型描述协议程序不同类型协议包的发送顺序;根据测试状态模型中的协议包对应的协议包序列中的协议包的数据模型信息获取测试数据模型;测试数据模型描述测试状态模型中的协议包包括的字段及字段类型;根据测试状态模型和测试数据模型生成协议程序的测试模型。本发明实施例实现了协议程序测试模型的自动化生成,提高了协议程序测试模型的生成效率及生成质量。

权利要求 :

1.一种协议程序测试模型自动生成方法,其特征在于,包括:

对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列;

获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构;

根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序;

获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型;

根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。

2.根据权利要求1所述的协议程序测试模型自动生成方法,其特征在于,所述根据所述协议包序列及所述协议包的类型获取测试状态模型,包括:根据所述协议包的所述字段间层次结构确定所述协议包的类型;

根据所述协议包序列及所述协议包的类型合并获取不同类型协议包的协议包发送序列,根据所述协议包发送序列确定所述测试状态模型。

3.根据权利要求1所述的协议程序测试模型自动生成方法,其特征在于,所述获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型,包括:获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包;

根据所述协议包序列中的协议包包括的所述字段及所述字段的取值,确定所述测试状态模型中相应所述协议包的字段的至少一种字段类型,根据测试状态模型中所述协议包包括的所述字段及所述字段的字段类型得到所述测试数据模型。

4.根据权利要求1所述的协议程序测试模型自动生成方法,其特征在于,所述对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列,包括:对协议程序在不同运行场景下运行的网络流量进行抓取,记录描述不同运行场景下网络协议参与方之间的数据交换的至少一个协议包序列。

5.根据权利要求4所述的协议程序测试模型自动生成方法,其特征在于,所述不同运行场景包括样例程序运行场景。

6.根据权利要求1所述的协议程序测试模型自动生成方法,其特征在于,在所述获取所述协议包序列中的协议包的数据模型信息之前,所述方法还包括:对基于相同会话得到的所述协议包序列进行去重处理。

7.根据权利要求1所述的协议程序测试模型自动生成方法,其特征在于,在所述根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型之后,所述方法还包括:获取所述协议程序的启动方式,将所述启动方式加入所述测试模型。

8.一种协议程序测试模型自动生成装置,其特征在于,包括:

网络流量抓取模块,用于:对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列;

数据模型信息获取模块,用于:获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构;

测试状态模型获取模块,用于:根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序;

测试数据模型获取模块,用于:获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型;

测试模型生成模块,用于:根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。

9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述协议程序测试模型自动生成方法的步骤。

10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述协议程序测试模型自动生成方法的步骤。

说明书 :

协议程序测试模型自动生成方法及装置

技术领域

[0001] 本发明实施例涉及计算机技术领域,具体涉及一种协议程序测试模型自动生成方法及装置。

背景技术

[0002] 在实际使用中,网络协议程序是网络系统的重要组成部分,它起着为系统内各个部件建立通讯连接的重要作用,除了用于交换数据、交换信息等基本功能,部分协议更是具备控制远端设备的权限。因此,协议程序中的潜在漏洞一旦被恶意利用,往往会带来较为严重的后果,如重要信息泄漏、物理机遭受恶意攻击导致瘫痪等等。
[0003] 在网络协议的应用过程中,国际上对于一些常用的协议进行了标准制定,如著名的FTP、SSL等,因而出现了一些专用于某个协议标准的安全保障工具。但是,在协议的实际使用中,厂商可能会根据其需要对标准协议进行定制,此外,还有许多不公开的厂商内部使用的私有协议。因此,对于广泛的网络协议安全保障,面临着各种挑战。
[0004] 在软件安全领域中,模糊测试技术是一种重要且有效的软件安全保障机制,其通过提前挖掘目标软件中潜在的异常或漏洞,并将其报告给软件开发人员以及时进行补救,以此确保软件的安全。由于所挖掘漏洞的真实可触发性和可复现性,模糊测试目前已成为软件安全保障过程中不可或缺的环节。
[0005] 模糊测试是一种自动化的程序测试技术,它通过不断的产生测试用例(测试用例又常称为“种子”,对于协议程序,协议包就是种子),将这些测试用例作为输入运行目标程序并监视程序异常来挖掘程序漏洞。目前,有许多模糊测试工具可用于软件的缺陷检测,如American Fuzzy Lop(简称为 AFL),Defencis,Peach等。从它们产生新测试用例的方式而言,它们可以被分为两类:基于变异的和基于生成的。基于变异的模糊测试工具通过对现有种子的变异(字节或比特位上的随机修改)来产生新的测试输入,如AFL;相反,基于生成的模糊测试工具需要用户提供输入文件的格式说明,它们通过利用这份格式说明来生成新的种子。
[0006] 近年来,诸如AFL的基于变异的模糊测试工具凭借其易用性和高效性广受用户欢迎。但是,由于它们缺少目标程序的相关信息而进行随机变异,因此,对于协议程序这种使用高度结构化的协议包作为输入的程序,这些模糊测试器产生的种子大多数是无效的,这使得它们在测试过程中难以深入程序内部并实现较高的代码覆盖率。为了解决这一问题,最近有一些研究引入了诸如符号执行技术等代码分析技术来优化模糊测试工具,包括Driller,KLEE,SAFL,MoWF等。符号执行技术能够为模糊测试工具提供目标程序的语义信息,以此来提升测试效率。符号执行是一种静态代码分析技术,在集成进模糊测试工具时,符号执行能够收集某条程序执行路径上所有的限制条件,并通过对这些限制条件进行求解来产生新种子,以此触发该程序路径。因此,模糊测试工具可以利用这项技术帮助触发所期望的程序状态(如帮助覆盖那些未被覆盖到的代码段),进而,它们更有可能触发隐藏在程序深处的漏洞。这种优化同样可以应用于协议程序,由于协议包通常具有特定的格式规范,因此利用符号执行技术可以帮助模糊测试器尽可能多的产生合法的协议包。这项技术对于产生一些格式简单的协议包十分有效,但是对于那些具有复杂格式的协议包,其可扩展性无法保证,因为目前符号执行技术仍存在路径爆炸以及复杂限制条件难以求解等技术难题,并且该技术的实施通常需要严格的执行环境支持。因此,对于像在工业环境中使用的网络协议这样的复杂程序,符号执行技术的应用仍是一个挑战。
[0007] 基于变异的模糊测试器将输入文件视为字节的向量,因此对种子的变异操作主要集中在比特/字节上。为了更好的对以结构化文件为输入的程序进行模糊测试,基于生成的模糊测试器在文件结构层面上工作,它们将输入文件结构视为树形结构,树的各个叶子结点称为数据块,不同的数据块符合其自身的构造规则,这些构造规则通常由用户写在测试数据模型中。对于协议程序,每个协议包对应一个树形结构,或称层次结构,每个叶子节点对应一个字段。
[0008] 基于生成的模糊测试工具的运行是基于用户提供的测试模型(如Peach工具的Peach Pit)。基于生成的模糊测试工具由于拥有用户提供的测试模型(里面包含测试状态模型和测试数据模型),因此能够生成合法的种子,这些工具更加适用于协议测试。然而,这种测试模型由于其编写复杂性以及需要人为理解协议,因此自动化程度低,而纯人工编写测试模型是一个巨大的工作量,需要认真阅读协议标准以及协议实现代码,而且非常容易出错。

发明内容

[0009] 针对现有技术存在的缺陷,本发明实施例提供一种协议程序测试模型自动生成方法及装置。
[0010] 本发明实施例提供一种协议程序测试模型自动生成方法,包括:对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列;获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构;根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序;获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型;根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。
[0011] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,所述根据所述协议包序列及所述协议包的类型获取测试状态模型,包括:根据所述协议包的所述字段间层次结构确定所述协议包的类型;根据所述协议包序列及所述协议包的类型合并获取不同类型协议包的协议包发送序列,根据所述协议包发送序列确定所述测试状态模型。
[0012] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,所述获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型,包括:获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包;根据所述协议包序列中的协议包包括的所述字段及所述字段的取值,确定所述测试状态模型中相应所述协议包的字段的至少一种字段类型,根据测试状态模型中所述协议包包括的所述字段及所述字段的字段类型得到所述测试数据模型。
[0013] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,所述对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列,包括:对协议程序在不同运行场景下运行的网络流量进行抓取,记录描述不同运行场景下网络协议参与方之间的数据交换的至少一个协议包序列。
[0014] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,所述不同运行场景包括样例程序运行场景。
[0015] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,在所述获取所述协议包序列中的协议包的数据模型信息之前,所述方法还包括:对基于相同会话得到的所述协议包序列进行去重处理。
[0016] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,在所述根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型之后,所述方法还包括:获取所述协议程序的启动方式,将所述启动方式加入所述测试模型。
[0017] 本发明实施例还提供一种协议程序测试模型自动生成装置,包括:网络流量抓取模块,用于:对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列;数据模型信息获取模块,用于:获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构;测试状态模型获取模块,用于:根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序;测试数据模型获取模块,用于:获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型;测试模型生成模块,用于:根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。
[0018] 本发明实施例还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述协议程序测试模型自动生成方法的步骤。
[0019] 本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述协议程序测试模型自动生成方法的步骤。
[0020] 本发明实施例还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述协议程序测试模型自动生成方法的步骤。
[0021] 本发明实施例提供的协议程序测试模型自动生成方法及装置,通过对协议程序运行的网络流量进行抓取得到协议包序列,获取协议包序列中的协议包的数据模型信息,根据协议包序列及协议包的类型获取测试状态模型,根据测试状态模型中的协议包对应的协议包序列中的协议包的数据模型信息获取测试数据模型,根据测试状态模型和测试数据模型生成协议程序的测试模型,实现了协议程序测试模型的自动化生成,提高了协议程序测试模型的生成效率及生成质量。

附图说明

[0022] 为了更清楚地说明本发明的技术方案,下面将对实施例描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0023] 图1是本发明实施例提供的协议程序测试模型自动生成方法的流程示意图;
[0024] 图2是本发明实施例提供的协议程序测试模型自动生成方法中字段间层次结构示意图;
[0025] 图3是本发明实施例提供的协议程序测试模型自动生成方法中测试状态模型的示意图;
[0026] 图4是本发明实施例提供的协议程序测试模型自动生成装置的结构示意图;
[0027] 图5是本发明实施例提供的电子设备的结构示意图。

具体实施方式

[0028] 为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0029] 本发明实施例为了克服基于生成的模糊测试工具的测试模型人为编写困难的问题,在深入研究网络协议程序的特征后,在此基础上提出了一种自动化生成流程。本发明实施例引入了网络流量抓取、网络流量分析的技术,结合测试模型必要的元素和模糊测试的原理,来高效、准确地自动化生成测试模型。
[0030] 构造高效、精确的协议程序测试模型可以从协议程序实际运行场景获得的已有数据包入手,对抓取的网络流量进行分析:分析协议包的出现顺序以确定测试状态模型,分析协议包的数据格式来确定测试数据模型,以此来构造协议程序的测试模型。
[0031] 图1是本发明实施例提供的协议程序测试模型自动生成方法的流程示意图。如图1所示,该方法包括:
[0032] 步骤S1、对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列。
[0033] 可以通过tcpdump等抓包工具对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的协议包序列,记录的协议包序列可以保存在.pcap文件中。网络协议参与方可以是协议程序运行时发生数据交换的各个设备。
[0034] 协议包序列和会话相对应。比如,比如TCP中建立连接至断开连接这个会话对应一个协议包序列。通常抓取的网络流量包含多个会话。抓取的网络流量中若包括多个会话,则包括多个协议包序列。
[0035] 步骤S2、获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构。
[0036] 可以利用协议包分析程序(如Wireshark)获取协议包序列中的协议包的数据模型信息。数据模型信息包括协议包包括的字段、字段的取值及字段间层次结构。
[0037] 图2是本发明实施例提供的协议程序测试模型自动生成方法中字段间层次结构示意图。
[0038] 步骤S3、根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序。
[0039] 协议包序列描述了不同会话中协议包的发送序列。比如,会话1的协议包序列为A‑B‑C,会话2的协议包序列为A‑B‑D。测试状态模型用于描述协议程序的不同类型协议包的发送顺序,测试状态模型中的协议包发送顺序是不区分会话的,也即适用于协议程序运行的所有会话过程。而协议包的类型可以基于协议包的字段间层次结构获取。可以通过整合所获取的至少一个协议包序列中的协议包的发送顺序,得到不同类型协议包的发送顺序,进而得到测试状态模型。
[0040] 步骤S4、获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型。
[0041] 测试状态模型描述协议程序不同类型协议包的发送顺序,测试状态模型中的协议包来自于协议包序列。协议包序列中的协议包均已获取到数据模型信息,其中,数据模型信息包括协议包包括的字段及字段的取值。
[0042] 测试数据模型用于描述测试状态模型中的协议包包括的字段及字段的字段类型。由于数据模型信息包括协议包包括的字段及字段的取值,测试状态模型中的协议包对应于至少一个协议包序列中的至少一个协议包。因此,可以根据协议包序列中的协议包的数据模型信息获取测试状态模型中的协议包包括字段的字段类型,由此,根据测试状态模型中的协议包的数据模型信息获取测试数据模型。
[0043] 步骤S5、根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。
[0044] 得到测试状态模型和测试数据模型后,可以将测试状态模型和测试数据模型进行整合自动生成协议程序的测试模型。
[0045] 本发明实施例提供的协议程序测试模型自动生成方法,通过对协议程序运行的网络流量进行抓取得到协议包序列,获取协议包序列中的协议包的数据模型信息,根据协议包序列及协议包的类型获取测试状态模型,根据测试状态模型中的协议包对应的协议包序列中的协议包的数据模型信息获取测试数据模型,根据测试状态模型和测试数据模型生成协议程序的测试模型,实现了协议程序测试模型的自动化生成,提高了协议程序测试模型的生成效率及生成质量。
[0046] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,所述根据所述协议包序列及所述协议包的类型获取测试状态模型,包括:根据所述协议包的所述字段间层次结构确定所述协议包的类型;根据所述协议包序列及所述协议包的类型合并获取不同类型协议包的协议包发送序列,根据所述协议包发送序列确定所述测试状态模型。
[0047] 测试状态模型用于描述协议程序不同类型协议包的发送顺序,适用于所有会话,属于协议程序通用的协议包发送顺序。根据协议程序运行获取的协议包序列描述了不同会话下协议包的发送序列,是对应于会话的。可以根据协议包的字段间层次结构获取协议包的类型,进而根据至少一个协议包序列中的协议包发送顺序及协议包的类型合并获取不同类型协议包的发送序列,进而确定测试状态模型。
[0048] 比如,会话1的协议包序列1为A1‑B‑C,会话2的协议包序列2为A2‑B‑D。其中,A1和A2为不同的协议包,但是属于同一类型的协议包A、B、C、D均为不同类型的协议包。则在根据这两个协议包序列合并获取不同类型协议包的协议包发送序列时,将A1、A2统一替代为A,然后两个协议包序列合并,得到不同类型协议包的发送序列,进而确定测试状态模型。
[0049] 图3是本发明实施例提供的协议程序测试模型自动生成方法中测试状态模型的示意图。图3示出了上述根据协议包序列1和协议包序列2得到的测试状态模型的结果。
[0050] 本发明实施例提供的协议程序测试模型自动生成方法,通过根据协议包的字段间层次结构确定协议包的类型,根据协议包序列及协议包的类型合并获取不同类型协议包的协议包发送序列,根据协议包发送序列确定测试状态模型,实现了测试状态模型的准确获取。
[0051] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,所述获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型,包括:获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包;根据所述协议包序列中的协议包包括的所述字段及所述字段的取值,确定所述测试状态模型中相应所述协议包的字段的至少一种字段类型,根据测试状态模型中所述协议包包括的所述字段及所述字段的字段类型得到所述测试数据模型。
[0052] 测试状态模型是基于协议包序列及协议包的类型获取的,描述了协议程序不同类型协议包的发送顺序。测试状态模型中的协议包可能对应于多个协议包序列中的协议包。如上述示例中,测试状态模型中的协议包A对应于协议包序列1中的协议包A1,并且对应于协议包序列2中的协议包A2。
[0053] 在根据测试状态模型中的协议包对应的协议包序列中的协议包的数据模型信息获取测试数据模型时,首先获取与测试状态模型中的协议包对应的协议包序列中的协议包。如上述示例中的测试状态模型中,获取协议包A对应的协议包序列1中的协议包A1及协议包序列2中的协议包A2,获取协议包B对应的协议包序列1中的协议包B或协议包序列2中的协议包B,获取协议包C对应的协议包序列1中的协议包C,获取协议包D对应的协议包序列2中的协议包D。
[0054] 同一类型协议包的字段间层次结构相同,但字段类型可能不同,比如在协议包A1中字段Z的类型为整型,协议包A2中字段Z的类型为字符型。
[0055] 根据协议包序列中的协议包包括的字段及字段的取值,确定测试状态模型中相应协议包的字段的至少一种字段类型。比如,根据协议包A1中字段Z的类型为整型,协议包A2中字段Z的类型为字符型,确定协议包A中字段Z的类型为整型或字符型。由此,得到测试状态模型中各个协议包的字段的至少一种字段类型。根据测试状态模型中协议包包括的字段及字段的字段类型得到测试数据模型。
[0056] 本发明实施例提供的协议程序测试模型自动生成方法,通过获取与测试状态模型中的协议包对应的协议包序列中的协议包,根据协议包序列中的协议包包括的字段及字段的取值,确定测试状态模型中相应协议包的字段的至少一种字段类型,根据测试状态模型中协议包包括的字段及字段的字段类型得到测试数据模型,实现了测试数据模型的准确获取。
[0057] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,所述对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列,包括:对协议程序在不同运行场景下运行的网络流量进行抓取,记录描述不同运行场景下网络协议参与方之间的数据交换的至少一个协议包序列。
[0058] 可以对协议程序在不同运行场景下运行的网络流量进行抓取,记录描述不同运行场景下网络协议参与方之间的数据交换的至少一个协议包序列。运行场景越多,得到的测试模型越准确。
[0059] 本发明实施例提供的协议程序测试模型自动生成方法,通过对协议程序在不同运行场景下运行的网络流量进行抓取,记录描述不同运行场景下网络协议参与方之间的数据交换的至少一个协议包序列,提高了测试模型的准确性。
[0060] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,所述不同运行场景包括样例程序运行场景。
[0061] 对于一个陌生的协议,寻找/构造协议的真实运行场景可能比较困难,这种情况下可以运行协议程序的一些demo程序(样例程序),通常这些demo程序包含建立连接与基本的数据交换,对这些demo程序抓包可以获得一些基本的数据交换序列(协议包序列)供参考。
[0062] 本发明实施例提供的协议程序测试模型自动生成方法,通过加入样例程序运行场景,满足了新出现的网络协议的协议程序的测试需求。
[0063] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,在所述获取所述协议包序列中的协议包的数据模型信息之前,所述方法还包括:对基于相同会话得到的所述协议包序列进行去重处理。
[0064] 基于相同会话得到的协议包序列相同。通过对协议程序运行的网络流量进行抓取,得到的至少一个协议包序列中可能存在基于相同会话的相同协议包序列。相同的协议包序列只需保留一个进行后续的测试状态模型和测试数据模型的获取。因此,在获取协议包序列中的协议包的数据模型信息之前,可以先对基于相同会话得到的协议包序列进行去重处理。
[0065] 本发明实施例提供的协议程序测试模型自动生成方法,通过对基于相同会话得到的协议包序列进行去重处理,去除了协议包序列的冗余,提高了处理的简便性。
[0066] 根据本发明实施例提供的一种协议程序测试模型自动生成方法,在所述根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型之后,所述方法还包括:获取所述协议程序的启动方式,将所述启动方式加入所述测试模型。
[0067] 测试模型中协议程序的启动方式不是必需的。比如,远端程序的控制则不需要协议程序的启动方式。若某个协议程序的测试需要协议程序的启动方式,则可以获取协议程序的启动方式,并将启动方式加入测试模型。协议程序的启动方式可以从协议程序的描述文件获取。
[0068] 本发明实施例提供的协议程序测试模型自动生成方法,通过获取协议程序的启动方式,将启动方式加入测试模型,提高了测试模型的可靠性。
[0069] 需要说明的是,本实施例所给出的多个优选实施方式,在逻辑或结构相互不冲突的前提下,可以自由组合,本发明对此不做限定。
[0070] 下面对本发明实施例提供的协议程序测试模型自动生成装置进行描述,下文描述的协议程序测试模型自动生成装置与上文描述的协议程序测试模型自动生成方法可相互对应参照。
[0071] 图4是本发明实施例提供的协议程序测试模型自动生成装置的结构示意图。如图4所示,该装置包括网络流量抓取模块10、数据模型信息获取模块20、测试状态模型获取模块30、测试数据模型获取模块40及测试模型生成模块50,其中:网络流量抓取模块10用于:对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列;数据模型信息获取模块20用于:获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构;测试状态模型获取模块30用于:根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序;测试数据模型获取模块40用于:获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型;测试模型生成模块50用于:根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。
[0072] 本发明实施例提供的协议程序测试模型自动生成装置,通过对协议程序运行的网络流量进行抓取得到协议包序列,获取协议包序列中的协议包的数据模型信息,根据协议包序列及协议包的类型获取测试状态模型,根据测试状态模型中的协议包对应的协议包序列中的协议包的数据模型信息获取测试数据模型,根据测试状态模型和测试数据模型生成协议程序的测试模型,实现了协议程序测试模型的自动化生成,提高了协议程序测试模型的生成效率及生成质量。
[0073] 根据本发明实施例提供的一种协议程序测试模型自动生成装置,测试状态模型获取模块30在用于根据所述协议包序列及所述协议包的类型获取测试状态模型时,具体用于:根据所述协议包的所述字段间层次结构确定所述协议包的类型;根据所述协议包序列及所述协议包的类型合并获取不同类型协议包的协议包发送序列,根据所述协议包发送序列确定所述测试状态模型。
[0074] 本发明实施例提供的协议程序测试模型自动生成装置,通过根据协议包的字段间层次结构确定协议包的类型,根据协议包序列及协议包的类型合并获取不同类型协议包的协议包发送序列,根据协议包发送序列确定测试状态模型,实现了测试状态模型的准确获取。
[0075] 根据本发明实施例提供的一种协议程序测试模型自动生成装置,测试数据模型获取模块40在用于获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型时,具体用于:获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包;根据所述协议包序列中的协议包包括的所述字段及所述字段的取值,确定所述测试状态模型中相应所述协议包的字段的至少一种字段类型,根据测试状态模型中所述协议包包括的所述字段及所述字段的字段类型得到所述测试数据模型。
[0076] 本发明实施例提供的协议程序测试模型自动生成装置,通过获取与测试状态模型中的协议包对应的协议包序列中的协议包,根据协议包序列中的协议包包括的字段及字段的取值,确定测试状态模型中相应协议包的字段的至少一种字段类型,根据测试状态模型中协议包包括的字段及字段的字段类型得到测试数据模型,实现了测试数据模型的准确获取。
[0077] 根据本发明实施例提供的一种协议程序测试模型自动生成装置,网络流量抓取模块10在用于对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列时,具体用于:对协议程序在不同运行场景下运行的网络流量进行抓取,记录描述不同运行场景下网络协议参与方之间的数据交换的至少一个协议包序列。
[0078] 本发明实施例提供的协议程序测试模型自动生成装置,通过对协议程序在不同运行场景下运行的网络流量进行抓取,记录描述不同运行场景下网络协议参与方之间的数据交换的至少一个协议包序列,提高了测试模型的准确性。
[0079] 根据本发明实施例提供的一种协议程序测试模型自动生成装置,所述不同运行场景包括样例程序运行场景。
[0080] 本发明实施例提供的协议程序测试模型自动生成装置,通过加入样例程序运行场景,满足了新出现的网络协议的协议程序的测试需求。
[0081] 根据本发明实施例提供的一种协议程序测试模型自动生成装置,数据模型信息获取模块20在用于获取所述协议包序列中的协议包的数据模型信息之前,还用于:对基于相同会话得到的所述协议包序列进行去重处理。
[0082] 本发明实施例提供的协议程序测试模型自动生成装置,通过对基于相同会话得到的协议包序列进行去重处理,去除了协议包序列的冗余,提高了处理的简便性。
[0083] 根据本发明实施例提供的一种协议程序测试模型自动生成装置,测试模型生成模块50在用于根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型之后,还用于:获取所述协议程序的启动方式,将所述启动方式加入所述测试模型。
[0084] 本发明实施例提供的协议程序测试模型自动生成装置,通过获取协议程序的启动方式,将启动方式加入测试模型,提高了测试模型的可靠性。
[0085] 图5是本发明实施例提供的电子设备的结构示意图,如图5所示,该电子设备可以包括:处理器(processor)510、通信接口(Communications Interface)520、存储器(memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行协议程序测试模型自动生成方法,该方法包括:对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列;获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构;根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序;获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型;根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。
[0086] 此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0087] 另一方面,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的协议程序测试模型自动生成方法,该方法包括:对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列;获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构;根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序;获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型;根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。
[0088] 又一方面,本发明实施例还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的协议程序测试模型自动生成方法,该方法包括:对协议程序运行的网络流量进行抓取,记录描述网络协议参与方之间的数据交换的至少一个协议包序列;获取所述协议包序列中的协议包的数据模型信息;其中,所述数据模型信息包括所述协议包包括的字段、所述字段的取值及字段间层次结构;根据所述协议包序列及所述协议包的类型获取测试状态模型;其中,所述测试状态模型用于描述所述协议程序不同类型协议包的发送顺序;获取与所述测试状态模型中的协议包对应的所述协议包序列中的协议包,根据所述协议包序列中的协议包的所述数据模型信息获取测试数据模型;其中,所述测试数据模型用于描述所述测试状态模型中的所述协议包包括的字段及所述字段的字段类型;根据所述测试状态模型和所述测试数据模型生成所述协议程序的测试模型。
[0089] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0090] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0091] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。