首页 / 专利库 / 资料储存系统 / 树遍历 / 基于代数规约的Web服务测试执行方法

基于代数规约的Web服务测试执行方法

阅读:174发布:2020-05-11

专利汇可以提供基于代数规约的Web服务测试执行方法专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种基于代数规约的Web服务测试执行方法,在使用单线测试技术生成Web服务测试序列的 基础 上,首先对测试序列进行解析,生成待测操作序列;然后依次执行序列中的每个待测操作,若待测操作类型是服务 请求 ,则调用相应远程待测服务,并根据返回状态信息自适应动态调整下一个服务请求;若待测操作类型是本地比较,则构造两个待比较数据的Json有序树,基于深度遍历技术进行结果比较,并根据比较结果输出测试报告。本发明解决了现有基于代数规约的测试技术无法适用于Web服务测试预言执行问题。,下面是基于代数规约的Web服务测试执行方法专利的具体信息内容。

1.一种基于代数规约的Web服务测试执行方法,其特征在于,包括如下步骤:
步骤1,基于代数规约对测试序列进行解析生成待测操作序列;
步骤2,针对待测操作序列中的服务请求操作调用相应远程待测服务,并根据返回的状态信息自适应动态调整下一个服务请求;
步骤3,当生成两个待比较数据时,执行本地比较器,保存测试结果。
2.根据权利要求1所述的基于代数规约的Web服务测试执行方法,其特征在于,步骤1生成待测操作序列的具体过程如下:
判断测试序列中每个操作类型,若操作类型是服务请求,则将序列中的服务请求参数与服务接口进行一致性校验,校验成功后生成一个服务的调用请求;如果操作类型是本地比较,则生成相应断言
3.根据权利要求1所述的基于代数规约的Web服务测试执行方法,其特征在于,步骤2自适应调整服务请求的具体过程如下:
若服务执行时间单调递增,需对请求发送的频率进行限制,则采用流量控制策略;若服务请求过程出现超时,并且服务请求已重发的次数仍小于重发次数阈值,则采用重试策略;
若服务重复请求的次数已达到阈值,则采用队列缓存策略。
4.根据权利要求1所述的基于代数规约的Web服务测试执行方法,其特征在于,步骤3本地比较的具体方法如下:
首先对两个待比较数据分别构造基于优先级规则的Json有序树;然后基于深度遍历技术对两棵Json有序树进行比较;最后根据比较结果输出测试报告。
5.根据权利要求4所述的基于代数规约的Web服务测试执行方法,其特征在于,构造基于优先级规则的Json有序树的具体方法为:
构建Json树,并初始化根结点Root,根据Json键的不同类型构造键的子树:
1)若为简单数据键,则新建叶子结点,结点的值为简单数据;
2)若为数组键,则新建m个数组索引结点,并将索引作为对象键来迭代3)步构建这m个结点的子树;
3)若为对象键:遍历对象值中的键,若为简单数据键,迭代1)步新建叶子结点,若为数组键,迭代2)步,否则迭代3)步;
在构造的Json树基础上重构为有序树,即对于相同双亲的兄弟结点,按照其子树的高度进行排序。

说明书全文

基于代数规约的Web服务测试执行方法

技术领域

[0001] 本发明涉及Web服务自动化测试技术领域,特别是一种基于形式化规约的Web服务自动化测试执行方法。

背景技术

[0002] Web服务由于自治性、平台独立性以及服务技术的广泛性得到了迅速地发展,然而并没有获得预期的广泛应用,其主要原因是服务消费者和服务提供者之间存在着信任问题,尤其在服务动态选择和使用时,服务提供者能否提供可靠的Web服务给服务消费者是一个关键问题。测试是建立信任的一种有解决途径,是保证Web服务功能正确的重要技术。
[0003] 面向微服务架构(MSA)的特性使得Web服务测试比传统软件测试更加困难,面临一些新的挑战。一方面,测试人员很难获得服务的设计文档、源代码甚至是可执行代码,这使得测试人员只能根据服务提供商发布的服务描述文档进行基于规约的测试,服务规约的多样性以及规约的不完整性给测试带来了极大挑战,很难进行充分和有效的测试活动。另一方面,服务运行架构的独立性使得测试人员缺乏对服务运行时的控制以及有效的观察手段,组合服务执行中Web服务的动态性和自适应性也使得测试人员很难离线确定被激活的服务,这些动态特性要求测试人员实施在线测试。和传统测试不同的是,这种在线测试不可能手工进行,所有在线测试活动必须是高度自动化的。因此,如何在缺乏被测服务完整规约信息以及有效观察手段的情况下,对Web服务进行完全自动化测试是一个非常具有挑战性的问题。
[0004] 作为一种基于数学的方法,形式化规约是实现自动化测试的重要基础。形式化规约不仅可以消除歧义减少软件开发中引入错误的机会,而且自动生成测试用例以及检验软件输出结果的正确性。和其他形式化规约相比,代数规约高度抽象,完全独立于软件实现细节,能够在不暴露被测系统实现细节的前提下描述系统的可观察行为,且支持自动化测试。这些特点使得Web服务测试在缺乏服务实现细节的情况下可以描述服务可观察行为,支持服务动态发现和组合时进行自动化在线测试。
[0005] 基于代数规约的测试技术的基本思路是检测公理中的等式是否成立,这有效地缓解了测试预言问题,但在实际测试执行过程中,一方面由于服务调用过程中网络的不稳定性,对测试序列的可执行性提出了新的挑战,另一方面由于服务运行结果的复杂性和动态性,对服务响应结果可能难以进行比较。

发明内容

[0006] 本发明的目的在于提供一种基于代数规约的Web服务测试执行方法。
[0007] 实现本发明目的的技术解决方案为:一种基于代数规约的Web服务测试执行方法,包括如下步骤:
[0008] 步骤1,基于代数规约对测试序列进行解析生成待测操作序列;
[0009] 步骤2,针对待测操作序列中的服务请求操作调用相应远程待测服务,并根据返回的状态信息自适应动态调整下一个服务请求;
[0010] 步骤3,当生成两个待比较数据时,执行本地比较器,保存测试结果。
[0011] 与现有技术相比,本发明的显著优点为:(1)本发明通过解析测试序列得到序列操作与服务请求之间的映射关系,并进行参数的一致性校验,避免参数类型不匹配带来的服务出错问题,使得测试人员能够较好地控制服务执行,提高了Web服务的可测试性;(2)在服务驱动模引入自适应调度策略,以服务的状态信息为依据,动态调整下一次服务请求,避免因网络状态不佳导致服务执行中断,使得测试序列能够按序执行完毕,提高了Web服务的测试效率;(3)Json比较器不仅包含数据之间的相等关系,还包含更多的诸如子集、全集、交集关系,从多个维度对服务接口进行测试,并且通过构造Json有序树来进行深度遍历极大降低了比较的复杂度。附图说明
[0012] 图1为本发明基于代数规约的Web服务测试执行方法流程图
[0013] 图2为自适应动态调整服务请求的流程图。
[0014] 图3为本地比较器的类图。
[0015] 图4为实施例中待比较Json数据示意图。
[0016] 图5为实施例中Json树示意图。
[0017] 图6为实施例中重构的Json树示意图。

具体实施方式

[0018] 如图1所示,一种基于代数规约的Web服务测试执行方法,包括如下步骤:
[0019] 步骤1,基于代数规约对测试序列进行解析生成待测操作序列;
[0020] 步骤2,针对待测操作序列中的服务请求操作调用相应远程待测服务,并根据返回的状态信息自适应动态调整下一个服务请求;
[0021] 步骤3,当生成两个待比较数据时,执行本地比较器,保存测试结果。
[0022] 进一步的,所述步骤1生成待测操作序列的具体过程如下:
[0023] 首先判断测试序列中每个操作类型,若操作类型是服务请求,则将序列中的服务请求参数与服务接口进行一致性校验,校验成功后生成一个服务的调用请求;如果操作类型是本地比较,则生成相应断言
[0024] 进一步的,所述步骤2自适应调整服务请求的具体过程如下:
[0025] 若服务执行时间单调递增,需对请求发送的频率进行限制,则采用流量控制策略;若服务请求过程出现超时,并且服务请求已重发的次数仍小于重发次数阈值,则采用重试策略;若服务重复请求的次数已达到阈值,则采用队列缓存策略。
[0026] 进一步的,所述步骤3本地比较的具体过程如下:
[0027] 首先对两个待比较数据分别构造基于优先级规则的Json有序树;然后基于深度遍历技术对两棵Json有序树进行比较;最后根据比较结果输出测试报告。
[0028] 进一步的,构造基于优先级规则的Json有序树的具体过程为:
[0029] 构建Json树,并初始化根结点Root,根据Json键的不同类型构造键的子树:
[0030] 1)若为简单数据键,则新建叶子结点,结点的值为简单数据;
[0031] 2)若为数组键,则新建m个数组索引结点,并将索引作为对象键来迭代3)步构建这m个结点的子树;
[0032] 3)若为对象键:遍历对象值中的键,若为简单数据键,迭代1)步新建叶子结点,若为数组键,迭代2)步,否则迭代3)步;
[0033] 在构造的Json树基础上重构为有序树,即对于相同双亲的兄弟结点,按照其子树的高度进行排序。
[0034] 下面结合附图和实施例对发明的具体实施方式进行详细说明。
[0035] 实施例
[0036] 结合图1,对本发明基于代数规约的Web服务测试执行方法进行具体说明:(1)测试序列解析器
[0037] 1)待测操作定义如下
[0038] Operation:=
[0039] CompareOp:=
[0040] ServiceReq:=
[0041] ①AssertType:=<
[0042] isEq|isSub|isGr|isLess|isCom|isSame|isDiff|AssertTrue>:8
[0043] 种断言类型,即相等、子集、大于、小于、交集、等价、差集或恒真;
[0044] ②Inputs:=<{Parameteri}>:输入参数集合;
[0045] ③Return:=:返回值;
[0046] ④Sname:服务请求名称;
[0047] ⑤Header:=:服务请求头,包含服务的请求地址以及方式。
[0048] 在生成服务请求之前,需将规约描述的服务信息同服务接口进行一致性校验,具体而言有请求头校验和请求参数校验。
[0049] 2)操作序列定义如下
[0050] OpSeq:=
[0051] ①TCId:测试用例标识
[0052] ②PId:序列操作标识;
[0053] ③Description:操作描述信息。
[0054] (2)服务执行驱动器
[0055] 图2给出了自适应调整服务调度策略的流程图。
[0056] 在进行服务调用的过程中,需要利用一些变量来保存服务执行的状态信息和控制器的配置信息。本发明将这些变量用两个类来记录,一个记录服务的状态信息,另一个用于记录控制器的配置信息。简化数据类的伪码为:
[0057]
[0058] 本发明中服务状态信息的定义如下:
[0059] ①服务响应时间STi:STi=TEi-TSi,其中TSi是发送服务请求的时刻,TEi是服务返回响应的时刻。
[0060] ②服务吞吐量SCi: 其中N是服务实例接受的请求数量。
[0061] ③拒绝访问率SRi: 其中NR是发送请求时由于服务崩溃而遭到拒绝的数量。
[0062] 本发明中配置信息的含义如下:
[0063] 配置信息 含义 缺省值Tmax 服务响应时间STi的上限 5
R 服务已重发的次数 0
Rmax 服务请求重试的上限 5
SRmax 服务拒绝访问率的上限 95%
[0064] 由于在服务调用过程中网络的不稳定性,可能会出现网络中断、服务崩溃、延迟过高等问题,因此本发明提出一种自适应调整服务请求的方法,具体过程如下:
[0065] 1)若STi≥Tmax,R
[0066] 2)若STi>Tmax,R≥Rmax,SRi≥SRmax,此时的服务可能已经出现了崩溃,则终止当前测试用例的执行。随后将此次测试序列保存到缓存队列中。最后统一对缓存队列的测试序列重新发起服务请求,若服务仍为崩溃状态,则输出错误测试报告;
[0067] 3)若STi
[0068] (3)基于有序树的迭代比较器
[0069] 图3给出了测试预言比较器的类图。
[0070] 为方便对服务响应结果进行描述,本发明对JSON数据的定义如下:
[0071] {Sk1:Sv1,
[0072] Ok2:{Sk21:Sv21,
[0073] Ok22:{Sk221:Sv221,Sk222:Sv222,…,Sk22n:Sv22n},
[0074] Ak23:[{Sk231:Sv231},{Sk232:Sk232},…,{Sk23m:Sk23m}]}
[0075] Ak3:[{Sk31:Sv31},{Sk32:Sv32},…,{Sk3p:Sv3p}]}
[0076] 其中,Sk、Ok和Ak分别表示简单数据键、对象键和数组键,Sv、Ov和Av分别表示简单数据键、对象键和数组键对应的值。简单数据Sv可以为数字、字符串、布尔或日期,数组值Av包含若干Ok/Ov,Ov是Sk/Sv、Ak/Av和Ok/Ov的组合。
[0077] 比较器用来判断两待测数据是否满足操作所定义的关系,若待测操作为断言AssertTrue,且执行结果为false,则此测试用例执行终止。
[0078] 若待比较数据是简单数据类型,则直接进行比较即可,否则比较器执行过程如下:
[0079] 步骤1:构建Json树:首先初始化根结点Root,然后根据Json键的不同类型构造键的子树过程如下:
[0080] 1)简单数据键:新建叶子结点,结点的值为简单数据Sval;
[0081] 2)数组键:新建m个数组索引结点,并将索引作为对象键来迭代3)步构建这m个结点的子树。
[0082] 3)对象键:遍历对象值中的键,若为简单数据键,迭代1)步新建叶子结点,若为数组键,迭代2)步,否则迭代3)步;
[0083] 步骤2:重构Json有序树,对于相同双亲的兄弟结点,按照其子树的高度进行排序。
[0084] 步骤3:深度遍历比较:根据调用相应的比较器模块对两棵树进行深度遍历,出现不一致则代表待测数据不满足操作定义的关系,并将不一致的数据写入到测试报告中;若遍历完子树数据仍保持一致性,则代表待比较的数据满足操作定义的关系,并将测试用例Pass结果写入到测试报告中。
[0085] 为了方便描述,我们假设有如下简化的应用实例:
[0086] 对于病历管理服务CaseService,包含如下公理等式:
[0087] cs.AddCase(areq);DelCase(creq)=cs,
[0088] ifareq.pid=creq.pid,cs.AddCase(areq).data.cid=creq.cid
[0089] 其中cs是病历管理微服务,AddCase和DelCase分别表示添加病历和删除病历操作,GetPCases是不改变状态的查询病历操作,应用单线测试序列生成技术,最终生成的测试执行序列如下所示:
[0090]
[0091] 根据前面所述的基于代数规约的Web服务测试执行技术,测试序列执行的步骤如下:
[0092] 1)对测试序列中的服务请求同接口进行一致性校验;
[0093]
[0094] 2)服务请求通过一致性校验之后,生成待测操作序列,其中B1-B9是比较操作的返回结果,R1-R4是服务请求的响应结果;
[0095]
[0096] 3)本发明选用GetPCase服务请求最近四次的服务状态信息进行分析。结果表明,该服务请求出现了超时,并且拒绝访问率仍低于默认值,服务请求认定为是临时故障,采用重试策略对请求重新发送即可;
[0097]  Req1 Req2 Req3 Req4 GetPCase
ST 0.48 0.63 5 0.7 5
SC 2.08 1.8 0.49 0.59 0.42
SR 0 0 33% 25% 33%
[0098] 4)本发明以序列14为例说明对复杂数据类型的比较。待比较Json数据、Json树以及重构的Json树分别如图4、图5、图6所示。调用比较器的Equal模块,基于深度遍历技术对两棵Json树进行比较。遍历到“cases”键结点的子树,两棵树数据出现不一致,该测试用例Fail,并将比较结果写入到测试报告中。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈