System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于确定性事件注入的分布式系统回归测试方法及系统技术方案_技高网
当前位置: 首页 > 专利查询>南京大学专利>正文

基于确定性事件注入的分布式系统回归测试方法及系统技术方案

技术编号:41318164 阅读:5 留言:0更新日期:2024-05-13 14:58
本发明专利技术公开了一种基于确定性事件注入的分布式系统回归测试方法及系统。所述回归测试方法提供了一套开放可自定义的环境部署方法和测试事件注入逻辑,在此基础上,程序设计人员可以自行搭建通用的分布式测试环境,模拟常见的网络事件、节点事件、时钟事件,自行封装新的事件,组装事件执行顺序和约束关系,从而生成一个稳定可靠,确定可信的分布式系统回归测试流程,完成对分布式系统的通用回归测试设计。本发明专利技术目的在于解决目前分布式系统回归测试存在的困难,以及缺乏统一的确定性分布式回归测试框架的问题,帮助程序设计人员在更短的时间内确定对已有代码的修改没有引入新的错误,更好地保障程序的可靠性。

【技术实现步骤摘要】

本专利技术涉及一种基于确定性事件注入的分布式系统回归测试方法及系统,属于软件测试,尤其适用于软件测试中的分布式系统回归测试领域。


技术介绍

1、分布式系统已经成为当今计算机技术的重要组成部分,越来越多的大型软件公司使用分布式集群来托管、处理和分析海量的用户数据,这些云系统由成千上万的商品机组成,并使用复杂的算法来保持一致性,极大的降低了部署成本,提高了运行效率。但与此同时,数以千计的进程和线程的并行性,不可预见的网络和节点故障也为分布式系统发现和复现缺陷带来了很大的困难。尽管学界与工业界都设计了复杂的容错算法,但分布式系统还是出现了大量的故障,如数据丢失、数据不一致等,极大地影响了系统的可用性。

2、目前,针对分布式系统测试,主流的方法大体可以分为三类:(1)只关注系统在测试环境中的部署;(2)专注于特定类型的故障(例如网络分区);(3)使用随机搜索方法自动注入故障;(4)基于分布式系统模型尽可能地探索故障注入的状态空间。对于探索部署状态和发现缺陷来说,上述方法具有一定的价值,但对于稳定的回归测试而言,随机化的故障注入会导致测试案例的不稳定。同时,自动故障注入和基于模型的方法在时间效率上缺乏优势,对回归测试的领域并不理想。实践中,不同的分布式系统有自己的分布式测试框架和测试工具库。大型分布式系统,如cassandra、hadoop、hbase、elasticsearch等有自己独立的回归测试框架。一些小型的分布式系统只在方法层面测试代码,或者连接到物理集群进行测试。尽管所有提到的框架都有共同的部分,但每个框架都与它们所测试的系统紧密耦合,这使得测试人员熟悉特定系统的测试框架费时费力,此外,这些专用框架很少支持环境故障的确定性注入。


技术实现思路

1、为了解决开发人员正确测试他们的分布式系统过程中遇到的困难,特别是以确定的方式对系统进行回归测试中存在的困难,本专利技术提出了一种基于确定性事件注入的分布式系统回归测试方法及系统。本专利技术的基本设计为:通过构建事件间的先后顺序约束,保证在代码级上事件能以确定的方式交错运行,将回归测试期间的事件运行随机性降到最低,保证回归测试场景的稳定性和有效性,提高回归测试的效率。

2、本专利技术允许开发者编写测试用例,以确保计算事件在多个不同节点之间的确定性排序。此外,本专利技术允许未来重复使用这些测试以防止回归测试中的问题。本专利技术允许短时间高效的测试,而不需要长期运行和随机的故障注入来期待随机注入能重现特定的场景。此外,本专利技术可以提供一个统一的测试环境,这样多个分布式系统的开发团队可以使用它,而不需要每个团队重新创建他们自己的定制的测试解决方案。

3、为达成上述目标,本专利技术提供了基于确定性事件注入的分布式系统回归测试方法及系统。该方法基于容器技术部署分布式系统服务,程序开发人员可以基于通用的领域特定语言(domain specific language,dsl)构造系统节点、服务部署和运行事件内容及顺序;然后,系统基于面向切面编程(aspect oriented programming,aop)思想,为特定事件和代码创建aspect并在编译期间织入(weave)特定代码,确保运行过程中,事件执行的先后顺序的确定性;最后,系统在运行结束后输出日志和容器最终状态,帮助判定回归测试的执行结果和过程。

4、本专利技术具体采用如下技术方案:基于确定性事件注入的分布式系统回归测试方法,包括如下步骤:

5、步骤ss1:场景构造步骤,包括:基于通用的领域特定语言dsl使用builder设计模式的分层版本,构建分布式系统节点、服务和交互场景的回归测试框架;

6、步骤ss2:环境配置步骤,包括:通过领域特定语言dsl实现配置即代码的功能,借助层级的建造者模式允许开发人员逐层实现系统的部署,所述配置即代码通过环境引擎转化为docker容器的生成和配置;

7、步骤ss3:序列生成步骤,包括:所述回归测试框架首先生成事件注入点序列,用户配置事件序列后,回归测试框架生成条件约束供事件服务器使用,然后使用语言特定的断点工具将事件注入断点位置;

8、步骤ss4:测试执行步骤,包括:框架基于构造的事件序列脚本,将会环境配置和场景事件转化为docker容器能直接执行的命令脚本。

9、作为一种较佳的实施例,所述步骤ss1中的场景构造步骤包括:对于每个服务,所述回归测试框架都需要定义如下内容:1)一个dockerfile地址,所述dockerfile地址将被用来为相应的服务创建一个docker镜像,所述docker镜像其中是服务安装所需的库或应用程序;2)服务所需要的二进制文件和依赖项将被添加到服务所在的docker容器中,并被绑定到一个特定的目标路径,被添加的二进制文件和依赖项包括:调度过程中需要使用的库,执行负载所需的外部文件,以及被压缩或已经解压缩的分布式系统文件;3)服务的编程语言和可能需要被调度的特定路径,所述特定路径是docker容器内的地址;以及4)启动服务的shell命令,用户能在此处定义停止服务的shell命令、工作目录、一组环境变量、为服务收集的日志文件或目录,以及为部署暴露的udp和tcp端口,以后可以由使用部署的测试案例使用。

10、作为一种较佳的实施例,所述步骤ss1中的场景构造步骤具体包括:步骤ss11:起始状态;步骤ss12:输入节点部署情况;步骤ss13:输入服务部署情况;步骤ss14:输入网络部署情况;步骤ss15:输入待执行事件;步骤ss16:输入事件执行序列;步骤ss17:结束状态。

11、作为一种较佳的实施例,所述步骤ss2中的环境引擎包括:

12、部署验证模块,具体执行:回归测试框架根据约束判断能否从dsl生成一套系统构建的脚本,所述部署验证模块会迭代执行configuration中的配置,每次执行配置的过程中,都会校验配置是否符合配置项的要求、是否符合回归测试框架预设的配置需要,是否符合系统本身的约束,如果顺利运行完成,即证明在configuration上无错,能转入实体构建模块继续构建系统;

13、实体构建模块,具体执行:回归测试框架开始根据dsl的内容新建相应的容器,所述容器的基础环境根据dockerfile生成,回归测试框架会根据系统所需的服务,将相应的服务打包文件解压到docker容器对应的地址中,并使用对应的脚本对服务进行初始化,对于每一组节点和服务,都采用上述方式进行系统的部署;

14、网络分配模块,具体执行:回归测试框架会将给每一个容器按顺序分配一个虚拟的网络地址,并将这些网络地址写入到路由表变量中,用于架设集群网络供运行时系统进一步使用;

15、工作空间生成模块,具体执行:回归测试框架创建共享文件夹用于一些额外信息的同步,并设定每个文件夹的工作路径,回归测试框架在部署系统后,将所有的初始化变量信息存储在自己的部署对象中,并将该对象传递给运行时系统。

16、作为一种较佳的实施例,所述步骤ss2本文档来自技高网...

【技术保护点】

1.基于确定性事件注入的分布式系统回归测试方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤SS1中的场景构造步骤包括:对于每个服务,所述回归测试框架都需要定义如下内容:1)一个Dockerfile地址,所述Dockerfile地址将被用来为相应的服务创建一个Docker镜像,所述Docker镜像其中是服务安装所需的库或应用程序;2)服务所需要的二进制文件和依赖项将被添加到服务所在的Docker容器中,并被绑定到一个特定的目标路径,被添加的二进制文件和依赖项包括:调度过程中需要使用的库,执行负载所需的外部文件,以及被压缩或已经解压缩的分布式系统文件;3)服务的编程语言和可能需要被调度的特定路径,所述特定路径是Docker容器内的地址;以及4)启动服务的shell命令,用户能在此处定义停止服务的shell命令、工作目录、一组环境变量、为服务收集的日志文件或目录,以及为部署暴露的UDP和TCP端口,以后可以由使用部署的测试案例使用。

3.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤SS1中的场景构造步骤具体包括:步骤SS11:起始状态;步骤SS12:输入节点部署情况;步骤SS13:输入服务部署情况;步骤SS14:输入网络部署情况;步骤SS15:输入待执行事件;步骤SS16:输入事件执行序列;步骤SS17:结束状态。

4.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤SS2中的环境引擎包括:

5.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤SS2中的环境配置步骤具体包括:步骤SS21:起始状态;步骤SS22:将领域特定语言DSL转化为系统构建脚本;步骤SS23:验证脚本中是否存在冲突,若不存在冲突则执行步骤SS24,否则报错,终止构造流程;步骤SS24:从节点组中选择一个节点根据Dockerfile生成基础容器环境;步骤SS25:构建节点内服务;步骤SS26:分配节点虚拟IP地址;步骤SS27:判断节点组内节点是否全部构造完成,如是则进入步骤SS28,否则返回步骤SS24;步骤SS28:将虚拟IP地址写入路由表;步骤SS29:设置共享文件夹;步骤SS210:结束状态。

6.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤SS3中的序列生成步骤包括:回归测试框架根据运行序列生成一系列的事件注入点,然后基于语言特定的断点工具将事件注入断点位置;基于运行时系统提供的接口,回归测试框架能进行一系列的事件注入,包括网络事件、节点事件和时钟事件,回归测试框架还根据事件注入点构造事件条件约束;用户使用锁等机制配置事件序列后,回归测试框架自动生成相应的条件约束供事件服务器使用;当部署定义的DSL中包含一个运行序列时,事件服务器会被启动,在获取事件序列之后,事件服务器会根据序列和约束条件执行该序列,并且对序列的执行情况进行监控,事件服务器知道运行序列中所有事件的阻塞条件,依赖关系以及事件的当前状态。

7.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤SS3中的序列生成步骤具体包括:步骤SS31:起始状态;步骤SS32:输入事件序列OrderE和事件对应代码CodeE;步骤SS33:构造序列约束关系Constraint;步骤SS34:判断约束关系是否存在冲突,如是则报错,否则进入步骤SS35;步骤SS35:基于面向切面编程AOP注入事件E;步骤SS36:结束状态。

8.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤SS4中的测试执行步骤具体包括:命令翻译器读取部署对象中的变量参数并根据id进行对应的查找,获取环境参数之后,命令翻译器把用户的命令改写为一个脚本并写入到工作目录下;接下来,命令翻译器将脚本的id和执行的功能对应并交给序列执行器,序列执行器接受节点管理器和命令翻译器提供的操作方法,根据事件服务器提供的接口获取事件的执行状态和下一步待执行的事件,序列执行器调用相应的方法在部署的系统上对序列进行执行,事件序列完成后,序列执行器将部署系统的文件和日志打包并存入宿主机工作目录下;状态检测器检测回归测试框架和部署系统的状态,状态检测器在部署系统内将日志整理输入到专门的日志目录,便于测试结束后输出系统内的工作日志,同时,状态检测器检测回归测试框架的运行情况,将框架的运行环境写入到本机日志中,在框架出现异常崩溃的情况下,状态检测器将当前的状态记录到日志中,便于开发人员查询...

【技术特征摘要】

1.基于确定性事件注入的分布式系统回归测试方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤ss1中的场景构造步骤包括:对于每个服务,所述回归测试框架都需要定义如下内容:1)一个dockerfile地址,所述dockerfile地址将被用来为相应的服务创建一个docker镜像,所述docker镜像其中是服务安装所需的库或应用程序;2)服务所需要的二进制文件和依赖项将被添加到服务所在的docker容器中,并被绑定到一个特定的目标路径,被添加的二进制文件和依赖项包括:调度过程中需要使用的库,执行负载所需的外部文件,以及被压缩或已经解压缩的分布式系统文件;3)服务的编程语言和可能需要被调度的特定路径,所述特定路径是docker容器内的地址;以及4)启动服务的shell命令,用户能在此处定义停止服务的shell命令、工作目录、一组环境变量、为服务收集的日志文件或目录,以及为部署暴露的udp和tcp端口,以后可以由使用部署的测试案例使用。

3.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤ss1中的场景构造步骤具体包括:步骤ss11:起始状态;步骤ss12:输入节点部署情况;步骤ss13:输入服务部署情况;步骤ss14:输入网络部署情况;步骤ss15:输入待执行事件;步骤ss16:输入事件执行序列;步骤ss17:结束状态。

4.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤ss2中的环境引擎包括:

5.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤ss2中的环境配置步骤具体包括:步骤ss21:起始状态;步骤ss22:将领域特定语言dsl转化为系统构建脚本;步骤ss23:验证脚本中是否存在冲突,若不存在冲突则执行步骤ss24,否则报错,终止构造流程;步骤ss24:从节点组中选择一个节点根据dockerfile生成基础容器环境;步骤ss25:构建节点内服务;步骤ss26:分配节点虚拟ip地址;步骤ss27:判断节点组内节点是否全部构造完成,如是则进入步骤ss28,否则返回步骤ss24;步骤ss28:将虚拟ip地址写入路由表;步骤ss29:设置共享文件夹;步骤ss210:结束状态。

6.根据权利要求1所述的基于确定性事件注入的分布式系统回归测试方法,其特征在于,所述步骤ss3中的序列生成步骤包括:回归测试框架根据运行序列生成一系列的事件注入点,然后基于语言特定的断点工具将事件注入断点位置;基于运行时...

【专利技术属性】
技术研发人员:冯洋林哲远周孟博赵东辰
申请(专利权)人:南京大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1