一种生成Protobuf格式测试数据的方法及装置的制造方法

文档序号:10697576阅读:466来源:国知局
一种生成Protobuf格式测试数据的方法及装置的制造方法
【专利摘要】本发明公开了一种生成protobuf格式测试数据的方法及装置,可以针对每个根据预设规则生成的Protobuf Message执行下述步骤:A、遍历Protobuf Message中包含的每一属性,判断当前属性是否为基本类型;如果是,执行步骤B;否则,执行步骤C;B、根据Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足属性的数据;C、根据Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足属性的Protobuf Message,并执行步骤A。应用本发明,可以提高生成Protobuf格式测试数据的效率。
【专利说明】
-种生成Protobuf格式测试数据的方法及装置
技术领域
[0001] 本发明设及测试数据生成领域,特别是设及一种生成Protobuf格式数据的方法及 装置。
【背景技术】
[0002] 在企业中,为了保证应用软件的质量,测试人员需要根据业务场景设计和生成大 量的测试数据进行应用软件的功能测试和压力测试。因此,能够提供一种质量好、生成效率 高的数据及其生成方法显得非常重要。
[0003] Protocol Buffers(简称Protobuf)是一种轻便高效的结构化数据存储格式。使用 Protobuf格式数据Protobuf Message,可W有效地减少传输带宽需求,节省存储空间,因而 在通讯、数据存储、软件测试等领域得到了广泛的应用。
[0004] 目前,生成测试数据的方法存在两种情况:
[0005] 第一种,通过手工或者一些定制的代码来生成测试数据。但是采用手工或者定制 方式生成Protobuf运种复杂、多变的数据格式时,开发和维护成本都很高。一旦有变更,需 要重新制作数据,或者调整代码,生成过程耗时长。
[0006] 第二种,针对特定设备来模拟用户操作,或者针对特定应用来设计,采用脚本的方 式自动生成测试数据。但该方法不适用于Protobuf运种结构复杂的数据格式。
[0007] 现有技术,对于结构简单的测试数据的生成是可行的。对于Protobuf运种结构复 杂的数据格式,生成效率低且不易维护。

【发明内容】

[0008] 本发明实施例的目的在于提供一种生成protobuf格式测试数据的方法及装置,W 提高Protobuf格式测试数据生成效率。
[0009] 为达到上述目的,本发明实施例公开了一种生成protobuf格式测试数据的方法, 包括如下步骤:
[0010] 根据预设规则,生成至少一个Protobuf Message,针对每个Protobuf Message执 行下述步骤:
[0011 ] A、针对当前Protobuf Message,遍历所述Protobuf Message中包含的每一属性, 判断当前属性是否为基本类型;如果是,执行步骤B;否则,执行步骤C;
[0012] B、根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生 成规则,生成满足所述属性的数据;
[0013] C、根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生 成规则,生成满足所述属性的Protobuf Message,并执行步骤A。
[0014] 优选的,所述根据所述Protobuf Message中该属性对应的客户化规则标签中封装 的数据生成规则,生成满足所述属性的数据包括:
[001引判断当前属性的限定修饰符类型;
[0016]如果当前属性的限定修饰符类型为必须类型,根据所述Protobuf Message中该属 性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数据;
[0017] 如果当前属性的限定修饰符类型为可选类型,使用一个随机函数判断是否生成满 足该属性的数据,如果是,根据所述Protobuf MeSsage中该属性对应的客户化规则标签中 封装的数据生成规则,生成满足所述属性的数据;
[0018] 如果当前属性的限定修饰符类型为重复类型,读取当前属性对应的客户化规则标 签中封装的数据生成规则,获得该数据生成规则中包含的重复次数,并根据读取的所述数 据生成规则及获得的所述重复次数,重复生成满足该属性的数据。
[0019]优选的,所述根据所述Protobuf Message中该属性对应的客户化规则标签中封装 的数据生成规则,生成满足所述属性的Protobuf Message包括:
[0020] 判断当前属性的限定修饰符类型;
[0021] 如果当前属性的限定修饰符类型为必须类型,根据所述Protobuf Message中该属 性对应的的客户化规则标签中封装的数据生成规则,生成满足所述属性的Protobuf Message;
[0022] 如果当前属性的限定修饰符类型为可选类型,使用一个随机函数判断是否需要生 成满足该属性的Protobuf Message,如果是,根据所述Protobuf Message中该属性对应的 客户化规则标签中封装的数据生成规则,生成满足所述属性的Protobuf Message;
[0023] 如果当前属性的限定修饰符类型为重复类型,读取当前属性对应的客户化规则标 签中封装的数据生成规则,获得该数据规则中包含的重复次数,并根据读取的所述数据生 成规则及获得的所述重复次数,重复生成满足所述属性的Protobuf Message。
[0024] 优选的,所述根据所述Protobuf Message中该属性对应的客户化规则标签中封装 的数据生成规则,生成满足所述属性的数据包括:
[0025] 当所述属性的数据生成规则为ascii时,则生成的数据为长度在该ascii中定义的 最小长度和最大长度之间的随机字符串;
[0026] 当所述属性的数据生成规则为ran加寸,则生成的数据为在该rand中定义的最小值 和最大值之间的随机整数;
[0027] 当所述属性的数据生成规则为ran壯时,则生成的数据为在该ran壯中定义的最小 值和最大值之间的随机浮点数;
[002引当所述属性的数据生成规则为charfile时,则生成的数据为长度在该charfile中 定义的最小长度和最大长度之间的字符串;
[0029] 当所述属性的数据生成规则为3付門16时,则生成的数据为在该3付門1日中定义的 最小个数和最大个数之间的字符串或列表;
[0030] 当所述属性的数据生成规则为list时,则生成的数据为元素的数量在该list中定 义的最小个数和最大个数之间的列表,所述列表中每一元素对应的值由该list中定义的函 数来生成;
[0031] 当所述属性的数据生成规则为bound时,则生成的数据为数量在该bound中定义的 最小个数和最大个数之间的列表。
[0032] 优选的,所述客户化规则标签为根据化tions选项定义的标签。
[0033] 为实现上述目的,本发明实施例还提供了一种生成Protobuf格式测试数据的装 置,所述装置包括:Message生成模块、判断模块、第一数据生成模块和第二数据生成模块, [0034] 所述Message生成模块,用于根据预设规则,生成至少一个Protobuf Message,并 针对每个Protobuf Message触发一次所述第一判断模块和所述数据生成模块;
[OO%] 所述判断模块,用于针对当前Protobuf Message,遍历所述Protobuf Message中 包含的每一属性,判断当前属性是否为基本类型;
[0036] 所述数据生成模块,用于在所述判断模块获得的结果为是时,根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数 据;
[0037] 所述第二数据生成模块,用于在所述判断模块获得的结果为否时,根据所述 Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成Protobuf Message,并触发所述判断模块。
[0038] 优选的,所述第一数据生成模块包括:第一判断模块子模块、第一数据生成子模 块、第二数据生成子模块和第Ξ数据生成子模块,
[0039] 所述第一判断模块子模块,用于在所述判断模块获得的结果为是时,判断当前属 性的限定修饰符类型;
[0040] 所述第一数据生成子模块,用于在当前属性的限定修饰符类型为必须类型时,根 据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满 足所述属性的数据;
[0041] 所述第二数据生成子模块,用于在当前属性的限定修饰符类型为可选类型时,使 用一个随机函数判断是否生成满足该属性的数据,如果是,根据所述Protobuf Message中 该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数据;
[0042] 所述第Ξ数据生成子模块,用于在当前属性的限定修饰符类型为重复类型时,读 取当前属性对应的客户化规则标签中封装的数据生成规则,获得该数据生成规则中包含的 重复次数,并根据读取的所述数据生成规则及获得的所述重复次数,重复生成满足该属性 的数据。
[0043] 优选的,所述第二数据生成模块包括:第二判断模块子模块、第一message生成子 模块、第二message生成子模块和第^message生成子模块,
[0044] 所述第二判断模块子模块,用于在所述判断模块获得的判断结果为否时,判断当 前属性的限定修饰符类型;
[0045] 所述第一 message生成子模块,用于在当前属性的限定修饰符类型为必须类型时, 根据所述Protobuf Message中该属性对应的的客户化规则标签中封装的数据生成规则,生 成满足所述属性的Protobuf Message;
[0046] 所述第二message生成子模块,用于在当前属性的限定修饰符类型为可选类型时, 使用一个随机函数判断是否需要生成满足该属性的Protobuf Message,如果是,根据所述 Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述 属性的Protobuf Message;
[0047] 所述第Smessage生成子模块,用于在当前属性的限定修饰符类型为重复类型时, 读取当前属性对应的客户化规则标签中封装的数据生成规则,获得该数据规则中包含的重 复次数,并根据读取的所述数据生成规则及获得的所述重复次数,重复生成满足所述属性 的Protobuf Message。
[0048] 优选的,所述第一数据生成模块具体用于,
[0049] 当所述属性的数据生成规则为ascii时,则生成的数据为长度在该ascii中定义的 最小长度和最大长度之间的随机字符串;
[0050] 当所述属性的数据生成规则为rand时,则生成的数据为在该ran d中定义的最小值 和最大值之间的随机整数;
[0051 ]当所述属性的数据生成规则为ran壯时,则生成的数据为在该ran壯中定义的最小 值和最大值之间的随机浮点数;
[0052] 当所述属性的数据生成规则为charfile时,则生成的数据为长度在该charfile中 定义的最小长度和最大长度之间的字符串;
[0053] 当所述属性的数据生成规则为3付門16时,则生成的数据为在该3付門1日中定义的 最小个数和最大个数之间的字符串或列表;
[0054] 当所述属性的数据生成规则为list时,则生成的数据为元素的数量在该list中定 义的最小个数和最大个数之间的列表,所述列表中每一元素对应的值由该list中定义的函 数来生成;
[0055] 当所述属性的数据生成规则为bound时,则生成的数据为数量在该bound中定义的 最小个数和最大个数之间的列表。
[0056] 优选的,所述客户化规则标签为根据化tions选项定义的标签。
[0057] 本发明实施例提供的一种生成protobuf格式测试数据的方法及装置,可W根据预 设规则,生成至少一个Protobuf Message,针对每个Protobuf Message执行下述步骤:A、针 对当前Protobuf Message,遍历所述Protobuf Message中包含的每一属性,判断当前属性 是否为基本类型;如果是,执行步骤B;否则,执行步骤C;B、根据所述Protobuf Message中该 属性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数据;C、根据所 述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所 述属性的Protobuf Message,并执行步骤A。由于是将每一Protobuf Message中的各属性对 应的数据生规则作为该属性的扩展内容,封装在该属性的客户化规则标签中,运样在生成 该属性对应的数据时,可W直接调用该属性的客户化规则标签中封装的数据生成规则,因 此,本发明实施例提供的生成Protobuf格式测试数据的方法及装置,可W自动批量生成 Protobuf格式测试数据,提高了生成Protobuf格式测试数据的效率。当然,实施本发明的任 一产品或方法必不一定需要同时达到W上所述的所有优点。
【附图说明】
[0058] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可W 根据运些附图获得其他的附图。
[0059] 图1为本发明实施例提供的一种生成protobuf格式测试数据的方法的流程图;
[0060] 图2为图1所示的实施例中的步骤S103的具体流程图;
[0061] 图3为图1所示的实施例中的步骤S104的具体流程图;
[0062] 图4为本发明实施例提供的一种生成protobuf格式测试数据的结构图;
[0063] 图5为图4所示的实施例中的数据生成模块103的具体结构图;
[0064] 图6为图4所示的实施例中的数据生成模块104的具体结构图。
【具体实施方式】
[0065] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0066] 本发明实施例提供了一种生成Protobuf格式测试数据的方法及装置,首先对本发 明实施例所提供的一种生成Protobuf格式测试数据的方法进行说明。
[0067] 如图1所示,本发明实施例提供了一种生成Protobuf格式测试数据的方法,该方法 可W包括:
[006引 S101、根据预设规则,生成至少一个Protobuf Message,针对每个Protobuf Message执行步骤S102至步骤S104;
[0069] 上述预设规则是根据Protobuf Message(简称message)自身的结构,W及用户实 际测试需要的数据的基本信息来确定的;
[0070] 其中,每一Protobuf Message由至少一个属性(也可W称为字段)构成;而每一属 性至少由W下四部分构成:①限定修饰符类型、②数据类型、③属性名称和④属性编码值; [0071 ] ①限定修饰符类型包括:必须类型(required )、可选类型(optional )、重复类型 (repeated);
[0072] ②数据类型包括:int32、string、和float等;其中,每一数据类型几乎都可W映射 到C++VJava等语言的基础数据类型;
[0073] ③属性名称的命名,与C、C++Java等语言的变量命名方式基本相同,例如age、 name 等;
[0074] ④属性编码值为取值范围为1~232(4294967296)的整数,属性编码值越大,其编 码的时间和空间效率就越低,其中1~15运个范围内的属性编码值的编码时间和空间效率 是最高的,当然一般情况下可W认为相邻的2个属性编码值的编码效率是相同的,除非运2 个属性编码值值恰好是在4字节,12字节,20字节等临界区,例如15和16运两个属性编码值 的时间效率和空间效率相差就比较大。
[0075] 其中,用户实际测试需要的数据的基本信息由用户预先定义,运些基本信息至少 包括:1)数据的大类名称、2)数据的小类名称、3)小类数据的具体类型、4)小类数据的客户 化规则标签和5)小类数据的数据生成规则;
[0076] 运样,在生成message时:
[0077] 1)数据的大类名称可W对应为message自身的名称,例如,当数据的大类名称为 Student(学生)时,表明需要生成一个名为Student的message,当数据的大类名称为 Teacher(老师)时,表明需要生成一个名为Teacher的message;
[0078] 2)数据的小类名称可W对应为message中的属性名称,例如,age可W作为message S化dent的一个属性的名称,表明需要生成学生的年龄的测试数据;age也可W作为message Teacher的一个属性的名称,表明需要生成老师的年龄的测试数据;
[0079] 3)小类数据的具体类型可W对应为message中的属性的数据类型,例如int32、 string 等;
[0080] 4)小类数据的客户化规则标签可W对应为message中的属性的扩展内容;运些客 户化规则标签由用户利用Protocol Buffers的自定义选项预先定义,例如用户利用选项 Options定义的一个客户化规则标签的具体示例可W为:
[0081] extend google.Protobuf.MessageOptionsi
[0082] optional string gen = 50001;
[0083] }
[0084] 其中gen就是客户化规则标签,在实际应用中,当使用上述客户化规则标签gen时, 需要将客户化规则标签gen用圆括号包裹起来,W表明它是对message的属性的扩展;
[0085] 5)小类数据的数据生成规则可W对应为meS sage中的属性对应的生成规则,并作 为客户化规则标签的值,即将小类数据的数据生成规则封装在属性的客户化规则标签中; 例如,age[(gen)="rand(7,100)"],其中,age是属性名称,gen是客户化规则标签,rand(7, 100)为属性age对应的数据生成规则,该生成规则表明需要生成最小值为7,最大值为100的 随机整数。
[0086] 具体的,根据预设规则,生成的一个message的示例可W为:
[0087]
[008引正是由于每一 message中的属性的扩展部分(客户化规则标签)中封装了该属性对 应的数据生成规则,运样在生成该属性对应的数据时,可W直接调用该属性的客户化规则 标签中封装的数据生成规则,从而使得本发明提供的生成Protobuf格式测试数据的方法能 够提高Protobuf格式测试数据生成效率。
[0089] 步骤S102、针对当前Protobuf Message,遍历所述Protobuf Message中包含的每 一属性,判断当前属性是否为基本类型;在判断结果为是时,执行步骤S103;否则执行步骤 S104;
[0090] 具体的,可W根据当前属性的名称识别该属性是否为基本类型。当当前属性的名 称为步骤S101中生成的message自身的名称时,则该属性为复合类型,即嵌套在message中 的message属于复合类型的属性;否则,该属性为基本类型。
[0091 ] 例如,当步骤S101中生成一个名为Student的message时,下述名为Teacher的 message中的属性Student即为复合类型,而名为name的属性为基本类型;
[0092]
[0093] 步骤S103、根据所述Protobuf Message中该属性对应的客户化规则标签中封装的 数据生成规则,生成满足所述属性的数据;
[0094] 具体的,根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数 据生成规则,生成满足所述属性的数据可W包括:
[0095] 当该属性的扩展部分封装的数据生成规则为ascii时,则生成的数据为长度在该 ascii中定义的最小长度和最大长度之间的随机字符串;
[0096] 例如,当该属性的扩展部分封装的数据生成规则为ascii (min, max, pattern)时, 则生成最小长度为min,最大长度为max,符合pattern定义模式的随机字符串,如果pattern 为空,则生成任意字符串。
[0097] 当该属性的扩展部分封装的数据生成规则为ran加寸,则生成的数据为在该rand中 定义的最小值和最大值之间的随机整数;
[0098] 例如,当该属性的扩展部分封装的数据生成规则为rand(min,max)时,则生成最小 值为min,最大值为max的随机整数。
[0099] 当该属性的扩展部分封装的数据生成规则为ran壯时,则生成的数据为在该ran壯 中定义的最小值和最大值之间的随机浮点数;
[0100] 例如,当该属性的扩展部分封装的数据生成规则为randf (min,max)时,则生成最 小值为min,最大值为max的随机浮点数。
[0101] 当该属性的扩展部分封装的数据生成规则为charfile时,则生成的数据为长度在 该char f i 1 e中定义的最小长度和最大长度之间的字符串;
[0102] 例如,当该属性的扩展部分封装的数据生成规则为charf i 1 e (f i 1 ename, min, max) 时,则生成最小长度为min,最大长度为max的字符串。
[0103] 当该属性的扩展部分封装的数据生成规则为stWile时,则生成的数据为在该 strfile中定义的最小个数和最大个数之间的字符串或列表;
[0104] 例如,当该属性的扩展部分封装的数据生成规则为stofi 1 e (f i 1 ename, min, max) 时,则生成最小个数为min,最大个数为max的字符串或列表。
[0105] 当该属性的扩展部分封装的数据生成规则为list时,则生成的数据为元素的数量 在该list中定义的最小个数和最大个数之间的列表,所述列表中每一元素对应的值由该 list中定义的函数来生成;
[0106] 例如,当该属性的扩展部分封装的数据生成规则为list(min,max,化η)时,则生成 最小个数为min,最大个数为max的列表,列表中的值由化η函数来生成。
[0107] 当该属性的扩展部分封装的数据生成规则为bound时,则生成的数据为数量在该 bound中定义的最小个数和最大个数之间的列表;
[010引例如,当该属性的扩展部分封装的数据生成规则为bound (min, max)时,则生成个 数最小为min,最大为max的属性列表。
[0109] 步骤S104、根据所述Protobuf Message中该属性对应的客户化规则标签中封装的 数据生成规则,生成满足所述属性的Protobuf Message,并执行步骤A。
[0110] 例如,当当前属性为步骤S103中所述的message Teacher中的属性"Student"时, 根据该属性的客户化规则标签gen中封装的数据生成规则"bound(10,2〇r,生成最少为10 个最多为20个message Student,然后针对每一个message Sl:udent再返回执行步骤A。
[0111] 在本发明图1所示的实施例中,由于是将每一Protobuf Message中的每一属性对 应的数据生规则作为该属性的扩展内容,封装在该属性的客户化规则标签中,因此,在应用 本发明图1所示的实施例提供的生成Protobuf格式测试数据的方法时,可W直接调用当前 属性的扩展部分封装的数据生成规则生成数据,自动批量地生成Protobuf格式的测试数 据,进而提高了生成Protobuf格式测试数据的效率。
[0112] 进一步,在图1所示的实施例的基础上,为了使生成的测试数据更符合用户的测试 需求,在确定当前属性是否为基本类型的属性后,在生成该属性对应的数据前,还可W判断 该属性的限定修饰符类型。
[0113] 因此,如图2所示,步骤S103中所述的"对于基本类型的属性,根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数 据"可W包括:
[0114] S201、判断当前属性的限定修饰符类型;
[0115] 根据Protobuf Message中的属性的组成内容可知,限定修饰符类型包括:必须类 型(required)、可选类型(optional)和重复类型(repeated)。
[0116] S202、如果当前属性的限定修饰符类型为必须类型(required),根据所述 Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述 属性的数据;
[0117] 例如,如果当前属性为步骤S101中定义的message Student中的属性name,则直接 调用gen标签中封装的规则"cha;rf ile(name , 1, l)+charfile(f irstname, 1,2)",生成由名 和姓组成的字符串。
[0118] S203、如果当前属性的限定修饰符类型为可选类型(optional),使用一个随机函 数判断是否生成满足该属性的数据,如果是,根据所述Protobuf Message中该属性对应的 客户化规则标签中封装的数据生成规则,生成满足所述属性的数据;
[0119] 例如,如果当前属性为步骤S101中定义的message S化dent中的属性gae,首先使 用随机函数判断是否需要生成该属性对应的数据,如果需要,则调用gen标签中封装的规则 "rand(7,10〇r,生成值在7~100之间的一个随机整数。
[0120] S204、如果当前属性的限定修饰符类型为重复类型(repeated),读取当前属性对 应的客户化规则标签中封装的数据生成规则,获得该数据生成规则中包含的重复次数,并 根据读取的所述数据生成规则及获得的所述重复次数,重复生成满足该属性的数据。
[0121 ] 例如,如果当前属性为步骤S101中定义的message SUident中的属性lesson,则调 用邑611标签中的规则"3付^16(1633〇]1,2,5)",首先生成最小为2最大为5的重复次数,然后 生成相应重复次数的"lesson",组成一个列表。
[0122] 同样的,在图1所示的实施例的基础上,为了使生成的测试数据更符合用户的测试 需求,如图3所示,步骤S104中所述的"对于复合类型的属性,根据所述Protobuf Message中 该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的Protobuf Message"可 W 包括:
[0123] S301、判断当前属性的限定修饰符类型;
[0124] 限定修饰符的类型与步骤S201中的描述一致,此处不再寶述。
[01巧]S302、如果当前属性的限定修饰符类型为必须类型,根据所述Protobuf Message 中该属性对应的的客户化规则标签中封装的数据生成规则,生成满足所述属性的Protobuf Mess曰ge;
[01%] 具体方法同步骤S202。
[0127] S303、如果当前属性的限定修饰符类型为可选类型,使用一个随机函数判断是否 需要生成满足该属性的Protobuf Message,如果是,根据所述Protobuf Message中该属性 对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的Protobuf Message;
[0128] 具体方法同步骤S203。
[0129] S304、如果当前属性的限定修饰符类型为重复类型,读取当前属性对应的客户化 规则标签中封装的数据生成规则,获得该数据规则中包含的重复次数,并根据读取的所述 数据生成规则及获得的所述重复次数,重复生成满足所述属性的Protobuf Message。
[0130] 具体方法同步骤S204。
[0131] 需要说明的是,本发明实施例提供的一种生成Protobuf格式测试数据的方法可W 应用于个人电脑、服务器等电子设备中。
[0132] 本发明实施例提供的一种生成Protobuf格式测试数据的方法,可W根据预设规 则,生成至少一个Protobuf Message,针对每个Protobuf Message执行下述步骤:A、针对当 前Protobuf Message,遍历所述Protobuf Message中包含的每一属性,判断当前属性是否 为基本类型;如果是,执行步骤B;否则,执行步骤C;B、根据所述Protobuf Message中该属性 对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数据;C、根据所述 Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述 属性的Protobuf Message,并执行步骤A。由于所述方法是将每一Protobuf Message中的各 属性对应的数据生规则作为该属性的扩展内容,封装在该属性的客户化规则标签中,运样 在生成该属性对应的数据时,可W直接调用该属性的客户化规则标签中封装的数据生成规 贝1J,因此,本发明实施例提供的生成Protobuf格式测试数据的方法,可W自动批量生成 Protobuf格式测试数据,提高了生成Protobuf格式测试数据的效率。
[0133] 相应于图1所示的方法实施例,如图4所示,本发明实施例还提供了一种生成 Protobuf格式测试数据的装置,所述装置包括:message生成模块101、判断模块102、第一数 据生成模块103和第二数据生成模块104,
[0134] message生成模块101,用于根据预设规则,生成至少一个Protobuf Message,并针 对每个Protobuf Message触发一次所述第一判断模块和所述数据生成模块;
[0135] 上述预设规则是根据Protobuf Message(简称message)自身的结构,W及用户实 际测试需要的数据的基本信息来确定的;
[0136] 其中,Protobuf Message自身的结构与图1所示的方法实施例的步骤SlOl中所述 的一致,此处不再寶述;
[0137] 其中,用户实际测试需要的数据的基本信息由用户预先定义,运些基本信息至少 包括:1)数据的大类名称、2)数据的小类名称、3)小类数据的具体类型、4)小类数据的客户 化规则标签和5)小类数据的数据生成规则;
[0138] 运样,message生成模块101在生成message时:
[0139] 1)数据的大类名称可W对应为message自身的名称,例如,当数据的大类名称为 Student(学生)时,表明需要生成一个名为Student的message,当数据的大类名称为 Teacher(老师)时,表明需要生成一个名为Teacher的message;
[0140] 2)数据的小类名称可W对应为message中的属性名称,例如,age可W作为message S化dent的一个属性的名称,表明需要生成学生的年龄的测试数据;age也可W作为message Teacher的一个属性的名称,表明需要生成老师的年龄的测试数据;
[0141] 3)小类数据的具体类型可W对应为message中的属性的数据类型,例如int32、 string 等;
[0142] 4)小类数据的客户化规则标签可W对应为message中的属性的扩展内容;运些客 户化规则标签由用户利用Protocol Buffers的自定义选项预先定义,例如用户利用选项 Options定义的一个客户化规则标签的具体示例可W为:
[0143] extend 邑〇〇邑le.Protobuf.Messa邑eOptionsj
[0144] optional string gen = 50001;
[0145] }
[0146] 其中gen就是客户化规则标签,在实际应用中,当使用上述客户化规则标签gen时, 需要将客户化规则标签gen用圆括号包裹起来,W表明它是对message的属性的扩展;
[0147] 5)小类数据的数据生成规则可W对应为meSsage中的属性对应的生成规则,并作 为客户化规则标签的值,即将小类数据的数据生成规则封装在属性的客户化规则标签中; 例如,age[(gen)="rand(7,100)"],其中,age是属性名称,gen是客户化规则标签,rand(7, 100)为属性age对应的数据生成规则,该生成规则表明需要生成最小值为7,最大值为100的 随机整数。
[0148] 具体的,message生成模块101,根据预设规则,生成的一个message的示例可W为:
[0149]
[0150] 正是由于每一 message中的属性的扩展部分(客户化规则标签)中封装了该属性对 应的数据生成规则,运样在生成该属性对应的数据时,可W直接调用该属性的客户化规则 标签中封装的数据生成规则,从而使得本发明提供的生成Protobuf格式测试数据的方法能 够提高Protobuf格式测试数据生成效率。
[0151 ] 判断模块102,用于针对当前Protobuf Message,遍历所述Protobuf Message中包 含的每一属性,判断当前属性是否为基本类型;
[0152] 具体的,可W根据当前属性的名称识别该属性是否为基本类型。当当前属性的名 称为message生成模块101生成的message的名称时,则该属性为复合类型,即嵌套在 message中的message属于复合类型的属性;否则,该属性为基本类型。
[0153] 第一数据生成模块103,用于在所述判断模块102获得的结果为是时,根据所述 Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述 属性的数据;
[0154] 具体的,第一数据生成模块103,用于当该属性的扩展部分封装的数据生成规则为 ascii时,则生成的数据为长度在该ascii中定义的最小长度和最大长度之间的随机字符 串;
[0155] 当该属性的扩展部分封装的数据生成规则为ran加寸,则生成的数据为在该rand中 定义的最小值和最大值之间的随机整数;
[0156] 当该属性的扩展部分封装的数据生成规则为ran壯时,则生成的数据为在该ran壯 中定义的最小值和最大值之间的随机浮点数;
[0157] 当该属性的扩展部分封装的数据生成规则为charfile时,则生成的数据为长度在 该charfile中定义的最小长度和最大长度之间的字符串;
[0158] 当该属性的扩展部分封装的数据生成规则为stWile时,则生成的数据为在该 strfile中定义的最小个数和最大个数之间的字符串或列表;
[0159] 当该属性的扩展部分封装的数据生成规则为list时,则生成的数据为元素的数量 在该list中定义的最小个数和最大个数之间的列表,所述列表中每一元素对应的值由该 list中定义的函数来生成;
[0160] 当该属性的扩展部分封装的数据生成规则为bound时,则生成的数据为数量在该 bound中定义的最小个数和最大个数之间的列表。
[0161] 第二数据生成模块104,用于在所述判断模块102获得的结果为否时,根据所述 Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成Protobuf Message,并触发所述判断模块102。
[0162] 例如,当当前属性为图1所示的实施例中所述的message Teacher中的属性 "Student"时,根据该属性的客户化规则标签gen中封装的数据生成规则"bound(10,20)", 生成最少为10个最多为20个message Student,然后针对每一个message SUident再触发所 述判断模块102。
[0163] 在本发明图4所示的实施例中,由于是将每一Protobuf Message中的每一属性对 应的数据生规则作为该属性的扩展内容,封装在该属性的客户化规则标签中,因此,在应用 本发明图4所示的实施例提供的生成Protobuf格式测试数据的装置时,可W直接调用当前 属性的扩展部分封装的数据生成规则生成数据,自动批量地生成Protobuf格式的测试数 据,进而提高了生成Protobuf格式测试数据的效率。
[0164] 进一步,在图4所示的实施例的基础上,为了使生成的测试数据更符合用户的测试 需求,如图5所示,第一数据生成模块103可W包括:第一判断模块子模块201、第一数据生成 子模块202、第二数据生成子模块203和第Ξ数据生成子模块204,
[0165] 第一判断模块子模块201,用于在所述判断模块102获得的结果为是时,判断当前 属性的限定修饰符类型;
[0166] 其中,根据Protobuf Message中的属性的组成内容可知,限定修饰符类型包括:必 须类型(required)、可选类型(optional)和重复类型(repeated)。
[0167] 第一数据生成子模块202,用于在当前属性的限定修饰符类型为必须类型时,根据 所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足 所述属性的数据;
[0168] 第二数据生成子模块203,用于在当前属性的限定修饰符类型为可选类型时,使用 一个随机函数判断是否生成满足该属性的数据,如果是,根据所述Protobuf Message中该 属性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数据;
[0169] 第Ξ数据生成子模块204,用于在当前属性的限定修饰符类型为重复类型时,读取 当前属性对应的客户化规则标签中封装的数据生成规则,获得该数据生成规则中包含的重 复次数,并根据读取的所述数据生成规则及获得的所述重复次数,重复生成满足该属性的 数据。
[0170] 同样的,在图4所示的实施例的基础上,为了使生成的测试数据更符合用户的测试 需求,如图6所示,第二数据生成模块104可W包括:第二判断模块子模块301、第一 message 生成子模块302、第二message生成子模块303和第^message生成子模块304,
[0171] 第二判断模块子模块301,用于在所述判断模块102获得的判断结果为否时,判断 当前属性的限定修饰符类型;
[0172] 第一message生成子模块302,用于在当前属性的限定修饰符类型为必须类型时, 根据所述Protobuf Message中该属性对应的的客户化规则标签中封装的数据生成规则,生 成满足所述属性的Protobuf Message;
[0173] 第二message生成子模块303,用于在当前属性的限定修饰符类型为可选类型时, 使用一个随机函数判断是否需要生成满足该属性的Protobuf Message,如果是,根据所述 Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述 属性的Protobuf Message;
[0174] 第Smessage生成子模块304,用于在当前属性的限定修饰符类型为重复类型时, 读取当前属性对应的客户化规则标签中封装的数据生成规则,获得该数据规则中包含的重 复次数,并根据读取的所述数据生成规则及获得的所述重复次数,重复生成满足所述属性 的Protobuf Message。
[0175] 需要说明的是,本发明实施例提供的一种生成Protobuf格式测试数据的装置可W 应用于个人电脑、服务器等电子设备中。
[0176] 本发明实施例提供的一种生成Protobuf格式测试数据的装置,可W根据预设规 则,生成至少一个Protobuf Message,并针对每个Protobuf Message触发一次判断模块、第 一数据生成模块和第二数据生成模块;判断模块针对当前Protobuf Message,遍历 Protobuf Message中包含的每一属性,判断当前属性是否为基本类型;第一数据生成模块 在判断模块获得的结果为是时,根据Protobuf Message中该属性对应的客户化规则标签中 封装的数据生成规则,生成满足属性的数据;第二数据生成模块在判断模块获得的结果为 否时,根据Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生 成Protobuf Message,并触发判断模块。由于所述装置是将每一Protobuf Message中的各 属性对应的数据生规则作为该属性的扩展内容,封装在该属性的客户化规则标签中,运样 在生成该属性对应的数据时,可W直接调用该属性的客户化规则标签中封装的数据生成规 贝1J,因此,本发明实施例提供的生成Protobuf格式测试数据的装置,可W自动批量生成 Protobuf格式测试数据,提高了生成Protobuf格式测试数据的效率。
[0177] 需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实 体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示运些实体或操作之间存 在任何运种实际的关系或者顺序。而且,术语"包括"、"包含"或者其任何其他变体意在涵盖 非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要 素,而且还包括没有明确列出的其他要素,或者是还包括为运种过程、方法、物品或者设备 所固有的要素。在没有更多限制的情况下,由语句"包括一个……"限定的要素,并不排除在 包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0178] 本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部 分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实 施例而言,由于其基本相似于方法实施例,所W描述的比较简单,相关之处参见方法实施例 的部分说明即可。
[0179] W上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在 本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围 内。
【主权项】
1. 一种生成Protobuf格式测试数据的方法,其特征在于,所述方法包括步骤: 根据预设规则,生成至少一个Protobuf Message,针对每个Protobuf Message执行下 述步骤: A、 针对当前Protobuf Message,遍历所述Protobuf Message中包含的每一属性,判断 当前属性是否为基本类型;如果是,执行步骤B;否则,执行步骤C; B、 根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规 贝1J,生成满足所述属性的数据; C、 根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规 贝1J,生成满足所述属性的Protobuf Message,并执行步骤A。2. 根据权利要求1所述的生成Protobuf格式测试数据的方法,其特征在于,所述根据所 述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所 述属性的数据包括: 判断当前属性的限定修饰符类型; 如果当前属性的限定修饰符类型为必须类型,根据所述Protobuf Message中该属性对 应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数据; 如果当前属性的限定修饰符类型为可选类型,使用一个随机函数判断是否生成满足该 属性的数据,如果是,根据所述Protobuf Message中该属性对应的客户化规则标签中封装 的数据生成规则,生成满足所述属性的数据; 如果当前属性的限定修饰符类型为重复类型,读取当前属性对应的客户化规则标签中 封装的数据生成规则,获得该数据生成规则中包含的重复次数,并根据读取的所述数据生 成规则及获得的所述重复次数,重复生成满足该属性的数据。3. 根据权利要求1所述的生成Protobuf格式测试数据的方法,其特征在于,所述根据所 述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所 述属性的Protobuf Message包括: 判断当前属性的限定修饰符类型; 如果当前属性的限定修饰符类型为必须类型,根据所述Protobuf Message中该属性对 应的的客户化规则标签中封装的数据生成规则,生成满足所述属性的Protobuf Message; 如果当前属性的限定修饰符类型为可选类型,使用一个随机函数判断是否需要生成满 足该属性的Protobuf Message,如果是,根据所述Protobuf Message中该属性对应的客户 化规则标签中封装的数据生成规则,生成满足所述属性的Protobuf Message; 如果当前属性的限定修饰符类型为重复类型,读取当前属性对应的客户化规则标签中 封装的数据生成规则,获得该数据规则中包含的重复次数,并根据读取的所述数据生成规 则及获得的所述重复次数,重复生成满足所述属性的Protobuf Message。4. 根据权利要求1或2所述的生成Protobuf格式测试数据的方法,其特征在于,所述根 据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满 足所述属性的数据包括: 当所述属性的数据生成规则为ascii时,则生成的数据为长度在该ascii中定义的最小 长度和最大长度之间的随机字符串; 当所述属性的数据生成规则为rand时,则生成的数据为在该rand中定义的最小值和最 大值之间的随机整数; 当所述属性的数据生成规则为randf时,则生成的数据为在该randf中定义的最小值和 最大值之间的随机浮点数; 当所述属性的数据生成规则为charf i 1 e时,则生成的数据为长度在该charf i 1 e中定义 的最小长度和最大长度之间的字符串; 当所述属性的数据生成规则为strfile时,则生成的数据为在该strfile中定义的最小 个数和最大个数之间的字符串或列表; 当所述属性的数据生成规则为list时,则生成的数据为元素的数量在该list中定义的 最小个数和最大个数之间的列表,所述列表中每一元素对应的值由该list中定义的函数来 生成; 当所述属性的数据生成规则为bound时,则生成的数据为数量在该bound中定义的最小 个数和最大个数之间的列表。5. 根据权利要求1-4中任一项所述的生成Protobuf格式测试数据的方法,其特征在于, 所述客户化规则标签为根据Options选项定义的标签。6. -种生成Protobuf格式测试数据的装置,其特征在于,所述装置包括:Message生成 模块、判断模块、第一数据生成模块和第二数据生成模块, 所述Message生成模块,用于根据预设规则,生成至少一个Protobuf Message,并针对 每个Protobuf Message触发一次所述第一判断模块和所述数据生成模块; 所述判断模块,用于针对当前Protobuf Message,遍历所述Protobuf Message中包含 的每一属性,判断当前属性是否为基本类型; 所述数据生成模块,用于在所述判断模块获得的结果为是时,根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数 据; 所述第二数据生成模块,用于在所述判断模块获得的结果为否时,根据所述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成Protobuf Message, 并触发所述判断模块。7. 根据权利要求6所述的生成Protobuf格式测试数据的装置,其特征在于,所述第一数 据生成模块包括:第一判断模块子模块、第一数据生成子模块、第二数据生成子模块和第三 数据生成子模块, 所述第一判断模块子模块,用于在所述判断模块获得的结果为是时,判断当前属性的 限定修饰符类型; 所述第一数据生成子模块,用于在当前属性的限定修饰符类型为必须类型时,根据所 述Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所 述属性的数据; 所述第二数据生成子模块,用于在当前属性的限定修饰符类型为可选类型时,使用一 个随机函数判断是否生成满足该属性的数据,如果是,根据所述Protobuf Message中该属 性对应的客户化规则标签中封装的数据生成规则,生成满足所述属性的数据; 所述第三数据生成子模块,用于在当前属性的限定修饰符类型为重复类型时,读取当 前属性对应的客户化规则标签中封装的数据生成规则,获得该数据生成规则中包含的重复 次数,并根据读取的所述数据生成规则及获得的所述重复次数,重复生成满足该属性的数 据。8. 根据权利要求6所述的生成Protobuf格式测试数据的装置,其特征在于,所述第二数 据生成模块包括:第二判断模块子模块、第一 message生成子模块、第二message生成子模块 和第三message生成子模块, 所述第二判断模块子模块,用于在所述判断模块获得的判断结果为否时,判断当前属 性的限定修饰符类型; 所述第一 message生成子模块,用于在当前属性的限定修饰符类型为必须类型时,根据 所述Protobuf Message中该属性对应的的客户化规则标签中封装的数据生成规则,生成满 足所述属性的Protobuf Message; 所述第二message生成子模块,用于在当前属性的限定修饰符类型为可选类型时,使用 一个随机函数判断是否需要生成满足该属性的Protobuf Message,如果是,根据所述 Protobuf Message中该属性对应的客户化规则标签中封装的数据生成规则,生成满足所述 属性的Protobuf Message; 所述第三message生成子模块,用于在当前属性的限定修饰符类型为重复类型时,读取 当前属性对应的客户化规则标签中封装的数据生成规则,获得该数据规则中包含的重复次 数,并根据读取的所述数据生成规则及获得的所述重复次数,重复生成满足所述属性的 Protobuf Message〇9. 根据权利要求6或7所述的生成Protobuf格式测试数据的装置,其特征在于,所述第 一数据生成模块具体用于, 当所述属性的数据生成规则为ascii时,则生成的数据为长度在该ascii中定义的最小 长度和最大长度之间的随机字符串; 当所述属性的数据生成规则为rand时,则生成的数据为在该rand中定义的最小值和最 大值之间的随机整数; 当所述属性的数据生成规则为randf时,则生成的数据为在该randf中定义的最小值和 最大值之间的随机浮点数; 当所述属性的数据生成规则为charf i 1 e时,则生成的数据为长度在该charf i 1 e中定义 的最小长度和最大长度之间的字符串; 当所述属性的数据生成规则为strfile时,则生成的数据为在该strfile中定义的最小 个数和最大个数之间的字符串或列表; 当所述属性的数据生成规则为list时,则生成的数据为元素的数量在该list中定义的 最小个数和最大个数之间的列表,所述列表中每一元素对应的值由该list中定义的函数来 生成; 当所述属性的数据生成规则为bound时,则生成的数据为数量在该bound中定义的最小 个数和最大个数之间的列表。10. 根据权利要求6-9任一项所述的生成Protobuf格式测试数据的装置,其特征在于, 所述客户化规则标签为根据Options选项定义的标签。
【文档编号】G06F11/36GK106066828SQ201610371677
【公开日】2016年11月2日
【申请日】2016年5月30日 公开号201610371677.5, CN 106066828 A, CN 106066828A, CN 201610371677, CN-A-106066828, CN106066828 A, CN106066828A, CN201610371677, CN201610371677.5
【发明人】李雄锋, 郑程
【申请人】北京奇艺世纪科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1