动态字段数据返回接口的测试系统、方法、电子设备和可读存储介质与流程

文档序号:15685982发布日期:2018-10-16 21:03阅读:157来源:国知局

本发明涉及动态字段数据返回接口的测试系统、方法、电子设备和可读存储介质。



背景技术:

一个电商网站需要展示不同种类的商品信息,供消费者查看并选择购买,而这些商品信息在电商网站的后台系统通常以接口服务的形式提供给前台页面做展示。不同种类的商品,商品信息的内容和组织也不同。不同的商品信息字段名称不同,字段数量不同,字段间的结构关系不同。这就导致了动态结构字段数据返回接口服务的诞生。例如,一个电商平台有数千种商品类目,前台的商品详细页面会向商品服务接口发出请求,请求商品的详细信息数据。这种服务接口被称为为动态字段数据返回接口服务。

在现有技术中,动态字段数据返回接口返回的数据是对象(object),如利用json串表示。对于这种复杂的数据结构,测试处理的实现是比较困难的。

目前,用于处理java接口服务的主流自动化测试框架是junit和testng。testng自动化测试框架对被调用接口返回的object类型处理,主要有如下2种方法:(1)assertequals(stringmessage,objectunexpected,objectactual)断言接口返回object是否跟预期object相同,若不同,校验失败,并且返回message信息;(2)assertnotequals(stringmessage,objectunexpected,objectactual)断言接口返回object是否跟预期object不同,若相同,校验失败,并且返回message信息。testng的处理方法是将接口返回待测json和期望json当成对象(object)来比较。为了不对接口返回object和预期object进行地址比较,需要重写object的equals方法,进而对每个字段进行比较。junit对接口返回为object类型的处理与testng是相同的。

现有技术有如下缺点:(1)对于动态字段数据返回接口服务返回的较复杂的json格式,重写object的equal方法对各字段做比较,这要求自动化代码书写人员有很强的编码能力;(2)自动化代码对业务依赖度高,要求自动化代码编写人员必须详细了解各种业务,造成开发周期长,成本高,相应地对于业务变更等,维护成本,维护周期也会较长;(3)代码复用程度低,每分出一种业务,就需要维护相应的自动化测试代码;(4)对于一些无需校验的字段,比如数据库流水id号等字段,不做断言处理的需求,难以实现;(5)对于现有断言,无法准确给出精确到具体字段的失败信息,导致当测试用例执行失败时,排查问题困难。



技术实现要素:

为了解决上述问题,提出本发明。

根据本发明的一个方面,提供一种动态字段数据返回接口的测试系统,所述动态字段数据返回接口返回待测数据,所述待测数据包含字段集,每个字段是键-值对,每个字段根据对应的预定义期望字段数据来校验,根据一个字段的键能够确定对应的期望字段数据,所述系统包括:

期望数据存储模块,用于存储所述期望字段数据;

测试模块,用于接收动态字段数据返回接口返回的待测数据,根据设定的遍历顺序对该待测数据的字段集执行遍历,并且在遍历中对每个当前字段执行如下步骤:取得该当前字段的键和值;根据所述键确定与该当前字段对应的期望字段数据;提取该期望字段数据中包含的校验信息;根据提取的校验信息执行对该当前字段的校验,并且当校验失败时记录该当前字段的键和相关的失败信息,以及

测试结果输出模块,用于输出所述测试模块记录的校验失败的字段的键和相关的失败信息。

根据本发明的另一方面,提供一种动态字段数据返回接口的测试方法,所述动态字段数据返回接口返回待测数据,所述待测数据包含字段集,每个字段是键-值对,每个字段根据对应的预定义期望字段数据来校验,根据一个字段的键能够确定对应的期望字段数据,所述方法包括:

接收动态字段数据返回接口返回的待测数据,

根据设定的遍历次序对该待测数据的字段集执行遍历,并且在遍历中对每个当前字段执行如下步骤:

取得该当前字段的键和值;

根据所述键确定与该当前字段对应的期望字段数据;

提取该期望字段数据中包含的校验信息;

根据提取的校验信息执行对该当前字段的校验,并且当校验失败时记录该当前字段的键和相关的失败信息。

根据本发明的又一方面,提供一种电子设备,其特征在于,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行上述的方法。

根据本发明的又一方面,提供一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行上述的方法。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:

图1是根据本发明实施例的动态字段数据返回接口的测试系统的框图;

图2是根据本发明实施例的动态字段数据返回接口的测试方法的流程图。

具体实施方式

以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。

图1示出根据本发明实施例的示意性框图。本发明的动态字段数据返回接口的测试系统10包括测试模块101、期望数据存储模块102和测试结果输出模块103。

测试模块101与业务系统的动态字段数据返回接口40相连接以接收所述动态字段数据返回接口40返回的待测试数据。

待测数据包含待测试的字段集,每个字段具有键-值对的形式。

每个字段根据对应的预定义期望字段数据来校验。预定义期望字段数据保存在期望数据存储模块102的存储器中。对于给定的一个字段,根据该字段的键能够在期望数据存储模块102的存储器中定位该字段对应的期望字段数据。期望字段数据中包含相应的校验信息,如字段类型、字段期望值和字段校验规则。测试系统10的测试模块101根据这些信息执行对待测数据的相应数据字段的校验。

期望数据存储模块102中保存的期望字段数据采用键-值(<key,value>)结构,其中键(key)存字段名称并且与相应的被测字段相同,值(value)存的是期望值、期望值类型、期望值断言规则。

测试模块101接收动态字段数据返回接口40返回的待测数据,按照设定的遍历顺序对该待测数据的字段集执行遍历。并且在遍历中对每个当前字段执行如下步骤:取得该当前字段的键和值,根据所述键确定与该当前字段对应的期望字段数据,提取该期望字段数据中包含的校验信息,根据提取的校验信息执行对该当前字段的校验,并且当校验失败时记录该当前字段的键和相关的失败信息。

根据本发明的实施例,所述待测数据的格式可以是下述之一:class,list<class>,map,json。

根据本发明的实施例,在遍历中,对待测数据中的数组可执行循环遍历,对待测数据中的对象执行递归遍历。

根据本发明的实施例,对每个动态字段数据返回接口设置相应的遍历规则,使得在遍历过程中略去所述遍历规则中指定的当前字段而不对其执行校验。这样,可以选择验证字段,可以避免无需断言的字段,例如数据库流水id号。

根据本发明的实施例,可以对字段进行不同种类的数据验证。通过设置字段校验规则,使得执行不同种类的数据验证,比如:空验证,等于,大于,小于,包含等等,而不局限于等于验证。

根据本发明,测试结果输出模块103输出测试模块101所记录的校验失败的当前字段的键和相关的失败信息,使得测试人员可快速定位问题。

目前的动态字段数据返回接口服务返回的数据的数据格式通常为json格式或者map格式。

json使用4种基本类型:

字符串(strings),如"a";

数字(numbers),如1,1.02;

布尔型(booleans),包括true和false,以及

null值(null)。

并且json使用两种构造数据类型:

(1)对象,用大括号限定,是名称-值对的无序集合,如{"name":"zhangsan","age":18},在对象中的每个名称-值对中,名称和值用“:”分隔;

(2)数组,如[1,2,3],是值的有序集合。

每个值可以是基本类型的数据,也可以是对象或数组。对象可包含下一层级的对象或数组,这样的对象-子对象关系形成分层结构,即树形结构。

一个json串的例子例下:

[

{"cartresponses":[{"cartsummaryinfo":

{"centfactor":"integer$50$avaluegreater",

"currency":{"symbol":"string$¥$avalueequal"}}}],

"success":"boolean$true$avalueequal"},

{"cartresponses":[{"cartsummaryinfo":

{"centfactor":"integer$150$avaluegreater",

"currency":{"symbol":"string$¥$avalueequal"}}}],

"success":"boolean$false$avalueequal"}

]。

该json串表示的数据本身是一个数组,用最外层的中括号限定,其中有两个元素,用逗号分开。这两个元素是同类的对象,用大括号限定,各具有两个名称-值对。

上面例子中的分行和缩进是为了便于阅读,实际上,这个json串是连续的字符串。

上述的json可表示分层结构即树形结构的数据,可依据预定的策略,如深度优先或宽度优先,执行对树的各节点的遍历。json串本身带有数据的结构信息,并且支持对各数据字段的遍历。

图2示出了根据本发明的方法的基本过程的流程图。下面结合图2详细说明本发明方法的各步骤。

测试过程开始后,在步骤s1接收一动态字段数据返回接口返回的待测数据。所述待测数据包含字段集,每个字段具有键-值对的形式,每个字段根据对应的预定义期望字段数据来校验,根据一字段的键能够确定对应的期望字段数据。

在接收待测数据之后,要遍历该待测数据包含的字段集,使得对字段集中的每个字段执行测试。

在步骤s2,判断该字段集是否为空。当字段集空,则过程结束,否则转步骤s3。

在步骤s3,按照预定的遍历顺序,取所述字段集中的第一个字段作为当前字段。

在步骤s4,提取该当前字段的键和值。

接着,在步骤s5,根据所取得的键确定与该当前字段对应的期望字段数据。

在步骤s6,从所确定的期望字段数据中提取校验信息,包括字段类型、字段期望值和字段校验规则。

在步骤s7,根据提取的字段类型、字段期望值和字段校验规则执行对该当前字段的校验。

在步骤s8,确定所执行的校验是否成功。当校验成功时,转步骤s10以使得按遍历顺序进行下一个字段的校验。当校验失败时,转步骤s9,记录该当前字段的键和相关的失败信息,然后转步骤s10。

在步骤s10,判断按照预定遍历顺序是否还存在当前字段的下一个字段。

如果存在下一个字段,则转步骤s11,取该下一个字段作为当前字段,开始新字段的校验。否则,测试过程结束。

根据本发明的实施例,待测数据对象的格式是下述之一:class,list<class>,map,json。根据这些格式的数据中包含的结构信息可直接对待测数据进行遍历。在遍历中,包括对相应结构中的数组执行循环遍历,和对子对象执行递归遍历。

根据本发明的实施例,根据实际的应用情况,可对不同的每个动态字段数据返回接口设置相应的遍历规则,使得在遍历过程中略去所述遍历规则中指定的字段而不对其执行校验。从而省略对无需校验的字段的处理,提高了整体的处理效率。

根据本发明的实施例,本发明的方法还可包括输出所记录的校验失败的字段的键和相关的失败信息。这样,使得测试人员可快速定位发生错误的字段。

根据本发明,业务逻辑都放在了测试用例层,从而提高了代码的复用度,减少了要处理各个业务的复杂度。由于测试过程本身对相应的业务依赖度不高,可以将业务测试人员和自动化代码编写人员分开,缩短自动化代码的开发周期和维护周期、节约开发成本和维护成本。当业务变更时,只需要修改测试用例即可,因此提高了代码的可复用性。

本发明的方法可以灵活选择验证字段,可以避免无需断言的字段,如数据库流水id号。另外,本发明的方法可以对字段进行不同种类的数据验证,比如:空验证,等于,大于,小于,包含等等,不局限于等于验证。

本发明的方法对错误信息指示明确,测试用例一旦执行失败,可立刻向测试人员指示,以使得测试人员快速定位问题。

根据本发明的实施例,本发明还提供了一种电子设备和一种可读存储介质。

本发明的电子设备包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行本发明的上述方法。

本发明的非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行本发明的上述方法。

上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。

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