一种模拟服务的方法及系统与流程

文档序号:11407019阅读:275来源:国知局
一种模拟服务的方法及系统与流程

本发明涉及软件测试技术领域,更为具体而言,涉及一种模拟服务的方法和系统。



背景技术:

随着软件开发的不断发展,开发人员正在追求兼容性强、高效、便捷且准确的数据处理方式。然而,如图1所示,现在很多linux后台服务类模块测试中,经常会遇到被测模块需要通过接口调用其它模块的情况,大多数时候,我们可以直接连接被调用的模块来进行测试。但是,有时这并不是个好主意,例如:被调用的模块部署成本很高、操作比较繁琐、数据构造困难、性能不够好等,更重要的是一些接口的异常情况可能根本无法直接模拟。

所以,在实际测试中,开发人员不得不自己编写一些桩程序来模拟被调用模块的行为。然而,所有的桩程序都大同小异,只是具体的接口协议不同而已,而像链接管理、配置管理、日志管理等工作,完全都是一样的。因此,开发人员正在寻求某种方式,在构造一个桩程序时,将相同的部分抽离出来,只需要考虑接口的逻辑,从而节省大量重复的工作。



技术实现要素:

为了解决现有技术中测试程序开发中对后端接口联调调用的依赖所导致的开发成本高、不易管理和维护的问题,本发明的实施方式提供了一种用于消息处理方法和系统。

一方面,本发明实施方式提供了一种模拟服务的方法,所述方法包括:

接收客户端发送的请求;

根据所述接收的请求获取模拟环境中对应的独立环境名;

根据获得的独立环境名获取模拟规则;

根据获得的模拟规则返回预定义的模拟响应。

在本发明的一些实施方式中,所述模拟环境为根据不同请求的源ip区分的不同的模拟规则分组。

在本发明的一些实施方式中,所述模拟规则定义了请求与相应的模拟响应的描述。

在本发明的一些实施方式中,所述请求的源ip到所述模拟环境的映射存储于模拟配置文件中。

在本发明的一些实施方式中,根据所述请求获取模拟环境中对应的独立环境名包括:

解析所述接收的请求解析出该请求的源ip;

根据所述模拟配置文件中源ip到模拟环境的映射获取所述解析出的源ip对应的模拟环境的独立环境名。

在本发明的一些实施方式中,所述根据获得的独立环境名获取模拟规则包括:

获取所述解析出的源ip对应的模拟环境中的所有模拟规则;

遍历所有模拟规则以查找出与所述接收的请求匹配的模拟规则。

在本发明的一些实施方式中,所述遍历所有模拟规则以查找出与所述接收的请求匹配的模拟规则包括:

选择所有模拟规则中的一条模拟规则;

判断所述接收的请求是否符合所选择的模拟规则;

如果所述接收的请求符合所选择的模拟规则,则执行所述根据获得的模拟规则返回预定义的模拟响应的处理。

在本发明的一些实施方式中,所述遍历所有模拟规则以查找出与所述接收的请求匹配的模拟规则还包括:

如果所述接收的请求不符合所选择的模拟规则,则判断是否还有其他模拟规则;

如果还有其他模拟规则,则选择另一条模拟规则,并回到执行所述判断所述接收的请求是否符合所选择的模拟规则的处理;

如果没有其他模拟规则,则向客户端返回预定义错误的提示。

相应的,本发明实施方式还提供了一种模拟范围系统,所述系统包括:

请求接收模块,用于接收客户端发送的请求;

第一获取模块,用于根据所述接收的请求获取模拟环境中对应的独立环境名;

第二获取模块,用于根据获得的独立环境名获取模拟规则;

响应返回模块,用于根据获得的模拟规则返回预定义的模拟响应。

在本发明的一些实施方式中,所述模拟环境为根据不同请求的源ip区分的不同的模拟规则分组。

在本发明的一些实施方式中,所述模拟规则定义了请求与相应的模拟响应的描述。

在本发明的一些实施方式中,所述请求的源ip到所述模拟环境的映射存储于模拟配置文件中。

在本发明的一些实施方式中,所述第一获取模块包括:

解析单元,用于解析所述接收的请求解析出该请求的源ip;

第一获取单元,用于根据所述模拟配置文件中源ip到模拟环境的映射获取所述解析出的源ip对应的模拟环境的独立环境名。

在本发明的一些实施方式中,所述第二获取模块包括:

第二获取单元,用于获取所述解析出的源ip对应的模拟环境中的所有模拟规则;

查找单元,用于遍历所有模拟规则以查找出与所述接收的请求匹配的模拟规则。

在本发明的一些实施方式中,所述查找单元包括:

第一选择子单元,用于选择所有模拟规则中的一条模拟规则;

第一判断子单元,用于判断所述接收的请求是否符合所选择的模拟规则;

第一执行子单元,用于如果所述接收的请求符合所选择的模拟规则,则执行所述根据获得的模拟规则返回预定义的模拟响应的处理。

在本发明的一些实施方式中,所述查找单元还包括:

第二判断子单元,用于如果所述接收的请求不符合所选择的模拟规则,则判断是否还有其他模拟规则;

第二执行子单元,用于如果还有其他模拟规则,则选择另一条模拟规则,并回到执行所述判断所述接收的请求是否符合所选择的模拟规则的处理;

错误返回子单元,用于如果没有其他模拟规则,则向客户端返回预定义错误的提示。

实施本发明的各种实施方式具有以下有益效果:可解决对后端接口联调调用的依赖,大大提高前后端开发联调效率,更加灵活、简单、方便的管理模拟接口。

附图说明

图1是现有技术中被测系统与各依赖服务的联调关系图;

图2是应用本发明所述模拟服务的方法时被测系统与各依赖服务的联调关系图;

图3是根据本发明一种实施方式的模拟服务方法的流程示意图;

图4是根据本发明实施例二的模拟服务方法的流程示意图;

图5是根据本发明实施例三的模拟服务方法的流程示意图;

图6是根据本发明实施例四的模拟服务方法的流程示意图

图7是根据本发明实施例五的模拟服务方法的流程示意图

图8是根据本发明实施方式的一种模拟服务系统的结构示意图;

图9是图8所示系统中所述第一获取模块的结构示意图;

图10是图8所示系统中所述第二获取模块的结构示意图;

图11是图8所示系统中所述查找单元的结构示意图。

具体实施方式

以下结合附图和具体实施方式对本发明的各个方面进行详细阐述。其中,众所周知的模块、单元及其相互之间的连接、链接、通信或操作没有示出或未作详细说明。并且,所描述的特征、架构或功能可在一个或一个以上实施方式中以任何方式组合。本领域技术人员应当理解,下述的各种实施方式只用于举例说明,而非用于限制本发明的保护范围。还可以容易理解,本文所述和附图所示的各实施方式中的模块或单元或处理方式可以按各种不同配置进行组合和设计。

术语解释:

stub:桩程序,指用来替换一部分功能的程序段。桩程序可以用来模拟已有程序的行为(比如一个远端机器的过程)或是对将要开发的代码的一种临时替代。因此,打桩技术在程序移植、分布式计算、通用软件开发和测试中用处很大。

mock:模拟,是以可控的方式模拟真实对象行为的假的对象。通常创造模拟对象来测试其他对象的行为。

mock规则:定义http/httpsapi请求及相应模拟响应的一份描述。

mock环境:根据请求来源ip来区分的mock规则分组。mockserver可以定义多套mock环境,各套环境间相互隔离。同一个ip只能对应一个mock环境,不同的ip可以对应同一个mock环境。

nginx:一个高性能的http和反向代理服务器。

图2是应用本发明所述模拟服务的方法时被测系统与各依赖服务的联调关系图;参见图2可知,mockserver是一个模拟的服务器,能针对不同接口构建各种假数据(即属被测系统与依赖服务的中间层,提供依赖服务的模拟构造),再利用构建的假数据进行开发,最终帮助开发工程师实现低成本、高回报的前后端分离开发工程。mockserver的前端应用html/css/js,而后端逻辑主要应用java+apachehttpclient实现,包含几个核心组件:协议(http/https/rpc)、存储,编译成war包部署在tomcat运行提供服务。开发mockserver,提供基于request(请求)及相应response(响应)的灵活配置方法,丰富的mock规则,真实的请求延时,不同的mock环境,实现通用的mock服务,例如:模拟请求、模拟请求延时、模拟请转发和模拟回调等。

在实际应用中,对于某些不容易构造、获取的对象,创建一个虚拟的对象调用以便测试的方法。mockserver由admin管理配置web页面和通用stub组成。admin提供webui配置页面,增加/删除请求源ip到mock环境的映射关系,对不同环境中的mock规则提供增删改查操作。stub提供通用桩服务,对被测系统的各类httpapi请求调用,返回预先定义的模拟响应。为了提高桩服务的通吐能力,让桩服务能在被测系统压力测试中有好的性能表现,可开启多个桩服务,通过nginx做负载均衡。

实施例1:

图3是根据本发明一种实施方式的模拟服务方法的流程示意图;参见图3,所述方法包括:

步骤s11,接收客户端发送的请求;

步骤s12,根据所述接收的请求获取模拟环境中对应的独立环境名;

步骤s13,根据获得的独立环境名获取模拟规则;

步骤s14,根据获得的模拟规则返回预定义的模拟响应。

在本发明的一些实施方式中,所述模拟环境为根据不同请求的源ip区分的不同的模拟规则分组。

在本发明的一些实施方式中,所述模拟规则定义了请求与相应的模拟响应的描述。

在本发明的一些实施方式中,所述请求的源ip到所述模拟环境的映射存储于模拟配置文件中。将请求源ip到mock环境的映射存储到mockenv.conf中,mockenv.conf的每一行定义了一条映射,如:10.0.0.1测试环境这条映射表明来源是10.0.0.1的请求,使用mock环境名为test的测试环境的mock规则。将配置的mock规则存放到<对应mock环境名>.xml中,如:test.xml规则的存储的是test环境的mock规则。

在实际应用中,模拟(mock)规则包含规则名称、请求、响应、环境等,请求需关联url、method。对于请求,如果是符合特定规则的请求才被mock,则需定义匹配的headers/parameters/body,以正则匹配的形式。对于响应,如果选择“返回真实响应”,则需要关注延时(返回请求所需的sleep时间,单位毫秒)。statuscode对应返回码,如200、404。format指数据返回格式,如json、html、xml等。mock规则是自定义且丰富的,即接口数据定义的规则,具体的计算机编译程序如下:

mock规则的名称是test,url匹配路径是/api/test/.*,请求方法包含get/post/put/delete,paramters参数的名称是name,值是test.*,请求header名称是nb_testid,值是1b[0-9a-za-z]+,reponse请求响应时间延迟1000ms,请求响应状态码为200,返回数据格式为json。定义规则,生成标准的xml格式文件。规则适应于各种数据类型接口,只需在如上图xml文件定义即可。

实施例2:

图4是根据本发明实施例二的模拟服务方法的流程示意图;参见图4,根据本实施例,所述模拟服务方法包括:

步骤s21,接收客户端发送的请求;

步骤s221,解析所述接收的请求解析出该请求的源ip;

步骤s222,根据所述模拟配置文件中源ip到模拟环境的映射获取所述解析出的源ip对应的模拟环境的独立环境名;

步骤s23,根据获得的独立环境名获取模拟规则;

步骤s24,根据获得的模拟规则返回预定义的模拟响应。

实施例3:

图5是根据本发明实施例三的模拟服务方法的流程示意图。根据本实施例,所述模拟服务方法包括:

步骤s31,接收客户端发送的请求;

步骤s32,根据所述接收的请求获取模拟环境中对应的独立环境名;

步骤s331,获取所述解析出的源ip对应的模拟环境中的所有模拟规则;

步骤s332,遍历所有模拟规则以查找出与所述接收的请求匹配的模拟规则

步骤s34,根据获得的模拟规则返回预定义的模拟响应。

当一个请求发送到mockstub时,mockstub会根据请求的源ip找到匹配的独立环境名,再根据独立环境名获取所有预定义的mock规则,遍历这些mock规则,如果找到一条规则与接受的请求匹配,那么返回预定义的模拟响应。如果找不到规则匹配,则返回404错误。规则匹配是根据请求中的uri/method/headers/parameters/body是否与mock规则中定义的对应字段正则匹配来定的。

实施例4:

图6是根据本发明实施例四的模拟服务方法的流程示意图,参见图6,根据本实施例,所述模拟服务方法包括:

步骤s41,接收客户端发送的请求;

步骤s42,根据所述接收的请求获取模拟环境中对应的独立环境名;

步骤s431,选择所有模拟规则中的一条模拟规则;

步骤s432,判断所述接收的请求是否符合所选择的模拟规则;

步骤s433,如果所述接收的请求符合所选择的模拟规则,则执行所述根据获得的模拟规则返回预定义的模拟响应的处理;步骤s44,根据获得的模拟规则返回预定义的模拟响应。

实施例5:

图7是根据本发明实施例五的模拟服务方法的流程示意图,参见图7,其中,根据本实施例,所述模拟服务方法包括:

步骤s51,接收客户端发送的请求;

步骤s52,根据所述接收的请求获取模拟环境中对应的独立环境名;

步骤s531,如果所述接收的请求不符合所选择的模拟规则,则判断是否还有其他模拟规则;

步骤s532,如果还有其他模拟规则,则选择另一条模拟规则,并回到执行所述判断所述接收的请求是否符合所选择的模拟规则的处理;

步骤s533,如果没有其他模拟规则,则向客户端返回预定义错误的提示;

步骤s54,根据获得的模拟规则返回预定义的模拟响应。

在实际应用中,客户端发送http请求至mockserver,解析请求来源ip,获取mockserver本地对应的独立环境。获取环境定义的所有mock规则,默认选择第一条mock规则。判断http请求是否符合第一条规则,符合,则返回预先定义的模拟响应。不符合,则返回预定义错误,如:404。对于mock规则的创建、删除,除页面配置外,mockserver提供sdk方式,用户可通过编码方式调用mockserver。

实施本发明所述方法的实施方式,可得到如下有益效果:解决前后端分离开发中接口调用和数据构造依赖,将大大提高前后端开发的效率;化繁为简,将复杂繁琐的桩模块开发变得简单、灵活和配置管理化。

实施例6:

图8是根据本发明实施方式的模拟服务系统的结构示意图;参见图8,所述系统包括:

请求接收模块100,用于接收客户端发送的请求;

第一获取模块200,用于根据所述接收的请求获取模拟环境中对应的独立环境名;

第二获取模块300,用于根据获得的独立环境名获取模拟规则;

响应返回模块400,用于根据获得的模拟规则返回预定义的模拟响应。

在本发明的实施方式中,所述模拟环境为根据不同请求的源ip区分的不同的模拟规则分组。

在本发明的实施方式中,所述模拟规则定义了请求与相应的模拟响应的描述。

在本发明的实施方式中,所述请求的源ip到所述模拟环境的映射存储于模拟配置文件中。将请求源ip到mock环境的映射存储到mockenv.conf中,mockenv.conf的每一行定义了一条映射,如:10.0.0.1测试环境这条映射表明来源是10.0.0.1的请求,使用mock环境名为test的测试环境的mock规则。将配置的mock规则存放到<对应mock环境名>.xml中,如:test.xml规则的存储的是test环境的mock规则。

在实际应用中,模拟(mock)规则包含规则名称、请求、响应、环境等,请求需关联url、method。对于请求,如果是符合特定规则的请求才被mock,则需定义匹配的headers/parameters/body,以正则匹配的形式。

对于响应,如果选择“返回真实响应”,则需要关注延时(返回请求所需的sleep时间,单位毫秒)。statuscode对应返回码,如200、404。format指数据返回格式,如json、html、xml等。mock规则是自定义且丰富的,即接口数据定义的规则,如下:

mock规则的名称是test,url匹配路径是/api/test/.*,请求方法包含get/post/put/delete,paramters参数的名称是name,值是test.*,请求header名称是nb_testid,值是1b[0-9a-za-z]+,reponse请求响应时间延迟1000ms,请求响应状态码为200,返回数据格式为json。定义规则,生成标准的xml格式文件。规则适应于各种数据类型接口,只需在如上图xml文件定义即可。

实施例7:

根据本实施例,所述模拟服务系统包括:

请求接收模块100,用于接收客户端发送的请求;

第一获取模块200,用于根据所述接收的请求获取模拟环境中对应的独立环境名;

第二获取模块300,用于根据获得的独立环境名获取模拟规则;

响应返回模块400,用于根据获得的模拟规则返回预定义的模拟响应。

图9是图8所示系统中所述第一获取模块的结构示意图;其中,如图9所示,所述第一获取模块200包括:

解析单元210,用于解析所述接收的请求解析出该请求的源ip;

第一获取单元220,用于根据所述模拟配置文件中源ip到模拟环境的映射获取所述解析出的源ip对应的模拟环境的独立环境名。

实施例8:

根据本实施例,所述模拟服务系统包括:

请求接收模块100,用于接收客户端发送的请求;

第一获取模块200,用于根据所述接收的请求获取模拟环境中对应的独立环境名;

第二获取模块300,用于根据获得的独立环境名获取模拟规则;

响应返回模块400,用于根据获得的模拟规则返回预定义的模拟响应。

图10是图8所示系统中所述第二获取模块的结构示意图;其中,如图10所示,所述第二获取模块300包括:

第二获取单元310,用于获取所述解析出的源ip对应的模拟环境中的所有模拟规则;

查找单元320,用于遍历所有模拟规则以查找出与所述接收的请求匹配的模拟规则。

实施例9:

根据本实施例,所述模拟服务系统包括:

请求接收模块100,用于接收客户端发送的请求;

第一获取模块200,用于根据所述接收的请求获取模拟环境中对应的独立环境名;

第二获取模块300,用于根据获得的独立环境名获取模拟规则;

响应返回模块400,用于根据获得的模拟规则返回预定义的模拟响应。

其中,所述根据获得的独立环境名获取模拟规则可包括:

获取所述解析出的源ip对应的模拟环境中的所有模拟规则;遍历所有模拟规则以查找出与所述接收的请求匹配的模拟规则。当一个请求发送到mockstub时,mockstub会根据请求的源ip找到匹配的独立环境名,再根据独立环境名获取所有预定义的mock规则,遍历这些mock规则,如果找到一条规则与接受的请求匹配,那么返回预定义的模拟响应。如果找不到规则匹配,则返回404错误。规则匹配是根据请求中的uri/method/headers/parameters/body是否与mock规则中定义的对应字段正则匹配来定的。

实施例10:

根据本实施例,所述模拟服务系统包括:

请求接收模块100,用于接收客户端发送的请求;

第一获取模块200,用于根据所述接收的请求获取模拟环境中对应的独立环境名;

第二获取模块300,用于根据获得的独立环境名获取模拟规则;

响应返回模块400,用于根据获得的模拟规则返回预定义的模拟响应。

其中,所述第二获取模块300包括:

第二获取单元310,用于获取所述解析出的源ip对应的模拟环境中的所有模拟规则;

查找单元320,用于遍历所有模拟规则以查找出与所述接收的请求匹配的模拟规则。

图11是图5所示系统中所述查找单元320的结构示意图,其中,如图11所示,所述查找单元320包括:

第一选择子单元321,用于选择所有模拟规则中的一条模拟规则;

第一判断子单元322,用于判断所述接收的请求是否符合所选择的模拟规则;

第一执行子单元323,用于如果所述接收的请求符合所选择的模拟规则,则执行所述根据获得的模拟规则返回预定义的模拟响应的处理。

另外,所述查找单元还可包括:

第二判断子单元,用于如果所述接收的请求不符合所选择的模拟规则,则判断是否还有其他模拟规则;

第二执行子单元,用于如果还有其他模拟规则,则选择另一条模拟规则,并回到执行所述判断所述接收的请求是否符合所选择的模拟规则的处理;

错误返回子单元,用于如果没有其他模拟规则,则向客户端返回预定义错误的提示。

需要说明的是,在实际应用中,客户端发送http请求至mockserver,解析请求来源ip,获取mockserver本地对应的独立环境。获取环境定义的所有mock规则,默认选择第一条mock规则。判断http请求是否符合第一条规则,符合,则返回预先定义的模拟响应。不符合,则返回预定义错误,如:404。对于mock规则的创建、删除,除页面配置外,mockserver提供sdk方式,用户可通过编码方式调用mockserver。

实施本发明所述方法的实施方式,可得到如下有益效果:解决前后端分离开发中接口调用和数据构造依赖,将大大提高前后端开发的效率;化繁为简,将复杂繁琐的桩模块开发变得简单、灵活和配置管理化。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件结合硬件平台的方式来实现,当然也可以全部通过硬件来实施。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,智能手机或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

本发明说明书中使用的术语和措辞仅仅为了举例说明,并不意味构成限定。本领域技术人员应当理解,在不脱离所公开的实施方式的基本原理的前提下,对上述实施方式中的各细节可进行各种变化。因此,本发明的范围只由权利要求确定,在权利要求中,除非另有说明,所有的术语应按最宽泛合理的意思进行理解。

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