一种模拟服务的方法、装置及集中管理平台与流程

文档序号:18685004发布日期:2019-09-13 23:54阅读:339来源:国知局
一种模拟服务的方法、装置及集中管理平台与流程

本发明涉及测试领域,特别涉及一种模拟服务的方法、装置及集中管理平台。



背景技术:

随着社会科学技术的发民,企业的管理内部服务的系统涉及到的业务场景和联调测试数据非常复杂,企业应用平台很少孤立存在,大部分应用平台都是对接有不同供应商的平台,以拼装服务于一体。而现有多种服务模拟框架或者系统基本都是需要编写代码而且主要是研发仅限于单元测试或者集成测,且只支持HTTP、SOCKS等通用协议的模拟。而对于测试人员主要做是是黑盒测试,但编码能力有限制和业务压力大,要编写一个mock去模拟外部服务困难重重,非常影响工作效率。特别是,一些大型互联网公司,一个系统往往是依赖多个外部系统,涉及到的业务场景和联调测试数据非常复杂,如果每个业务场景和联调测试数据一一编码,测试工作量大,而且测试工作效率差。



技术实现要素:

本发明的主要目的是提出一种模拟服务的方法、装置及集中管理平台,旨在通过实时抓取外系统的已完成模拟区配数据或本系统匹配不成功的请求数据及响应自动录制成公共桩,既减少测试任务的工作量提高了联调测试的工作效率,又节省了流量,节约了成本。

为实现上述目的,本发明提出的一种模拟服务的方法,包括步骤:抓取已完成模拟匹配的数据,从已完成模拟匹配的数据中提取模拟匹配条件和响应录制为公共桩;配置公共桩的IP地址,控制与公共桩具有同一IP地址的链路调用公共桩;运用所调用的公共桩中的模拟匹配条件,执行由与所述链路具有同一IP地址的被测服务发出的当前模拟匹配命令;若当前模拟匹配成功,返回所述响应至被测服务。

优选地,所述抓取已完成模拟匹配的数据,从已完成模拟匹配的数据中提取模拟匹配条件和响应录制为公共桩的步骤包括:抓取外系统的已完成模拟匹配的数据,将所抓取的数据录制为第一公共桩;抓取本系统已完成的模拟匹配中匹配失败的数据,将所抓取的数据录制为第二公共桩。

优选地,redis是由外系统采集已完成模拟匹配的数据生成的缓存,且可被网络公用,所述抓取外系统的已完成模拟匹配的数据,将所抓取的数据录制为第一公共桩的步骤包括:建立与外系统的通信连接关系,约定第一公共桩的录制规则;根据所述约定的第一公共桩的录制规则,抓取由外系统生成的redis;解析所抓取的redis,从redis中提取已完成的模拟匹配条件和响应;录制所提取的模拟匹配条件和响应为第一公共桩。

优选地,所述抓取本系统已完成的模拟匹配中匹配失败的数据,从所述匹配失败的数据中提取模拟匹配条件和响应录制为第二公共桩的步骤包括:约定第二公共桩的录制规则;根据所述约定的第二公共桩的录制规则,抓取本系统已完成的模拟匹配中匹配失败的数据;从所抓取的数据中提取模拟匹配条件和响应;录制所提取的模拟匹配条件和响应为第二公共桩。

优选地,所述运用所述模拟匹配条件,执行所述链路接收的同一IP地址的当前模拟匹配命令的步骤包括:接收与所述链路同一IP地址的当前模拟匹配的请求;解析所调用的公共桩,以释放模拟匹配条件和响应;运用所释放的模拟匹配条件,执行所述请求的当前模拟匹配命令。

本发明还公开了一种模拟服务的装置,包括:抓取模块,用于抓取已完成模拟匹配的数据;录制模块,用于将所抓取的数据录制为公共桩;解析模块,用于解析所调用的公共桩,以释放模拟匹配条件和响应;IP配置模块,用于配置所述公共桩的IP地址;控制模块,用于控制与公共桩具有同一IP地址的链路调用公共桩;接收模块,用于接收与所述链路同一IP地址的当前模拟匹配的请求;执行模块,用于运用所述模拟匹配条件,执行所述链路接收的同一IP地址的当前模拟匹配命令;响应模块,用于若当前模拟匹配成功,返回所述响应至被测服务。

优选地,所述抓取模块包括第一抓取单元和第二抓取单元,所述录制模块包括第一录制单元和第二录制单元;第一抓取单元,用于抓取外系统的已完成模拟匹配的数据;第二抓取单元,用于抓取本系统已完成的模拟匹配中匹配失败的数据;第一录制单元,用于将第一抓取单元所抓取的数据录制为第一公共桩;第二录制单元,用于将第二抓取单元所抓取的数据录制为第二公共桩。

优选地,所述第一抓取单元包括:建立子单元,用于建立与外系统的通信连接关系;第一约定子单元,用于约定第一公共桩的录制规则;第一抓取子单元,用于根据所述约定的第一公共桩的录制规则,抓取由外系统的已完成模拟匹配的数据生成的redis;第一提取子单元,用于解析所述redis,从所抓取的数据中提取模拟匹配条件和响应。

优选地,所述第二抓取单元包括:第二约定子单元,用于约定第二公共桩的录制规则;第二抓取子单元,用于根据所述约定的第二公共桩的录制规则,抓取本系统已完成的模拟匹配中匹配失败的数据;第二提取子单元,用于从所述匹配失败的数据中提取本系统已完成的模拟匹配条件和响应。

本发明还公开了一种模拟服务的集中管理平台,包括一个或多个不同协议的如上所述的模拟服务的装置;及模拟多种协议服务平台,用于接收请求,模拟多种协议服务功能平台处理服务请求;及UI交互测试模块,用于建立UI交互测试模型及交互规范,编辑静态HTML,以负责所有模拟服务的交互对接;及模拟测试架构,用于模拟不同的测试类型建立模拟测试框架;及日志管理模块,用于提供日志管理功能,可对模拟测试的结果进行日志的记录、查看、下载及清理;及模拟数据库,用于存储模拟服务的所有数据。

本发明通过实时抓取外系统的已完成的模拟匹配数据或本系统匹配不成功的请求数据及响应自动录制成公共桩,既减少测试任务的工作量提高了联调测试的工作效率,又节省了流量,节约了成本。

附图说明

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

图1为本发明模拟服务的方法一实施例的流程示意图;

图2为本发明抓取已完成模拟匹配的数据,从已完成模拟匹配的数据中提取模拟匹配条件和响应录制为公共桩的流程示意图;

图3为本发明抓取外系统的已完成模拟匹配的数据,将所抓取的数据录制为第一公共桩的流程示意图;

图4为本发明抓取本系统已完成的模拟匹配中匹配失败的数据,将所抓取的数据录制为第二公共桩的流程示意图;

图5为本发明所述运用所述模拟匹配条件,执行所述链路接收的同一IP地址的当前模拟匹配命令的流程示意图;

图6为本发明模拟服务的装置的功能模块示意图;

图7为本发明一实施例中抓取模块的功能细化示意图;

图8为本发明一实施例中录制模块的功能细化示意图;

图9为本发明一实施例中第一抓取单元的功能细化示意图;

图10为本发明一实施例中第二抓取单元的功能细化示意图;

图11为本发明一实施例中模拟服务的集中管理平台的结构示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术配置进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

参照图1,图1为本发明一种模拟服务的方法一实施例的流程示意图,本发明提供了一种模拟服务的方法,步骤如下:

步骤S10,抓取已完成模拟匹配的数据,从已完成模拟匹配的数据中提取模拟匹配条件和响应录制为公共桩;

在步骤S10中,本系统通过抓取已完成模拟匹配的数据,从已完成模拟匹配的数据中提取模拟匹配条件和响应录制为可调用的公共桩,无需在另行配置公共桩,即节省流量,又提高自动化配置的智能性。

步骤S20,配置公共桩的IP地址,控制与公共桩具有同一IP地址的链路调用公共桩;

在步骤S20中,通过公共桩的IP配置,建立与公共桩具有同一IP地址(是Internet Protocol Address,又译为网际协议地址)的链路联接关系,以便控制所述链路调用所述公共桩。应该理解地是,在本步骤中,默认模拟器已完成初始化操作。模拟器初始化操作需要完成两个方面的预备,第一,需要部署测试环境(主要指硬件环境),以为模拟器的模拟服务提供稳定而可控的环境,提高模拟器的工作质量和效率。预先运行构建或部署与被测服务和外部服务之间网络通信服务接口的对接、建立WEB UI交互测试模型、构建多种测试类型框架、封装有不同协议的链路配置,根据被测服务的协议服务部署被测服务的服务端口配置及呈现解耦依赖情况时,执行解耦依赖,以绕开所依赖的外部服务的端口。而这些测试环境的部署均有一个集中管理数个模拟器的模拟服务平台来完成,首先建立模拟器与被测服务和外部服务之间的网络通信;接着建立WEB UI界面交互测试模型及交互规范,以下的步骤均在界面操作,而无需编码;再针对被测服务的需求构建多种测试类型的框架,比如:单元测试、集成测试、自动化测试、功能测试及压力测试,每种测试类型的框架内存储有模拟外部服务行为的测试用例的测试模块;根据不同协议服务给每个模拟器封装不同协议的链路配置;根据被测服务的协议服务修改被测服务的目标服务端口配置,被测的A服务(即被测服务)原来是依赖外部的B服务(即外部服务),现在A服务的目标服务不指向B服务而改为指向模拟器。第二,需要部署测试服务(主要指软件环境),以为本发明的测试方法提供测试对象。测试服务包括测试管理单元和测试执行单元,模拟器等同于测试管理单元,所述模拟器管理单次模拟测试的运行,而模拟器中虚拟一个桩匹配器(Stub Matcher)等同于测试执行单元,所述桩匹配器实行模拟测试执行控制,具体来说是,模拟器中的测试模块存储模拟外部服务行为的测试用例,桩匹配器用于模拟测试模块的调用条件的元件,以代替测试模块的接口,接受或传递测试模块的数据,其中,所述测试模块的调用条件即为在桩匹配器中编辑的模拟匹配条件,或者是,通过注册自定义服务事件的API函数编辑自定义服务的模拟测试匹配条件。桩匹配器根据模拟测试匹配条件实行测试控制。

本发明模拟器的初始化还包括创建模拟器,所述模拟器用于模拟与被测的A服务进行真实交互的外部B服务。所述模拟器可以采用JETTY服务器,该JETTY服务器为一个开源的servelet容器(servelet是用JAVA编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态WEB内容),是基于JAVA的WEB容器。JETTY服务器可以作为嵌入式服务器使用,JETTY服务器的运行速度较快,而且是轻量级的,JETTY服务器是使用Java语言编写的,它的API以一组JAR包的形式发布。JAR包(JAVA的封装包)管理用于RPC协议模拟(Remote Procedure Call Protocol--远程过程调用协议),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议),统一管理客户端的JAR包,可以理解地,JAR包可用于解析不同协议服务。则测试中当被测的A服务通过接口调用外部的B服务进行交互时,改为调用模拟器模拟该交互,即把原本被测的A服务请求修改指向,不再指向B服务而改为指向模拟器。

步骤S30,运用所调用的公共桩中的模拟匹配条件,执行所述链路接收的同一IP地址的当前模拟匹配命令;

在步骤S30中,所述运用所调用的公共桩中的模拟匹配条件的步骤,应该理解地是,调用公共桩之后还存在一个对公共桩解参/析参的过程,才能得到模拟匹配条件被之运用。整个步骤为一种特殊的模拟匹配过程,该模拟匹配过程通过调用的抓取数据自动生成的公共桩,得到已完成的模拟匹配条件,执行当前的模拟匹配命令,即实现了一种模拟服务的智能配置,又为本系统节省了流量,节约了成本。

步骤S40,若当前模拟匹配成功,返回所述响应至被测服务。

在步骤S40中,是模拟匹配的响应措施之一,若当前模拟匹配成功,返回所调用的公共桩中的响应至被测服务,完成这种模拟服务的任务。

具体地,参照图2,在本实施例中,步骤S10包括:

步骤S11,抓取外系统的已完成模拟匹配的数据,将所抓取的数据录制为第一公共桩;

步骤S12,抓取本系统已完成的模拟匹配中匹配失败的数据,将所抓取的数据录制为第二公共桩。

在步骤S10中,公共桩的数据来源有两大源头,一个来源于外系统,另一个来源于本系统。应该理解地是,所述外系统是即非被测服务又非外部服务的系统,分别将来源于外系统的已完成模拟匹配的数据录制为第一公共桩,将数据来源于本系统的已完成的模拟匹配中匹配失败的数据录制为第二公共桩。因为数据内容不同,故公共桩的命名不同,以便区分。

可以理解的是,所述本系统是指进行当前模拟匹配的模拟服务系统,所述外系统是指即非被测服务方又非外部服务方,是本系统通信连接的其他系统。所述本系统的普通模拟匹配的过程是:本系统启动的监听链路的端口开始监听,当监听到具有与模拟器相同IP的请求时,拦截该请求,报文解析请求,并将解析后的请求发送至桩匹配器,桩匹配器接收请求后,根据模拟匹配条件执行匹配命令,桩匹配器开始测试控制,若匹配成功,桩匹配器推出模拟测试的预设响应返回至被测服务;若匹配失败,桩匹配器转发请求给外部服务,并接收外部服务对请求的真实响应,返回至被测服务。这样,所述本系统已完成的模拟匹配中匹配失败的数据也应该算是一次匹配成功所得数据。所以外系统的已完成模拟匹配的数据和本系统已完成的模拟匹配中匹配失败的数据都可以为已完成的模拟匹配数据,而匹配成功的数据已存入本系统中,故无需再抓取。

在本实施例中,参照图3,所述步骤S11包括以下步骤:

步骤S111,建立与外系统的通信连接关系,约定第一公共桩的录制规则;

在步骤S111中,建立与外系统的通信连接,是能抓取外系统数据的前提条件,而约定第一公共桩的录制规则,是为了保证能正确地抓取到外系统中的所需数据,所述所需数据是指当前模拟匹配的所需匹配条件和响应。

步骤S112,根据所述约定的第一公共桩的录制规则,抓取由外系统生成的redis;

步骤S112是正确地抓取到外系统中所需数据的执行步骤。所述redis(redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API),是由外系统采集已完成模拟匹配的数据生成的缓存,且可被网络公用。所述的redis,在测试领域,是测试人员通常会使用所有的正常的接口请求和响应发送的一个公共缓存。

步骤S113,解析所抓取的redis,从redis中提取已完成的模拟匹配条件和响应;

步骤S113是从所抓取的redis中,获取已完成的模拟匹配条件和响应的步骤。值得一提地是,因为redis内部存在的代码规则,所以还需要先解析所抓取的redis,解析后才能提取到所需数据。

步骤S114,录制所提取的模拟匹配条件和响应为第一公共桩。

步骤S114是将提取的模拟匹配条件和响应录制为第一公共桩的步骤。应该理解地是,所述的录制步骤是个自动录制过程,是由本系统内置的第一录制单元来执行的。

在本实施例中,参照图4,所述步骤S12包括以下步骤:

步骤S121,约定第二公共桩的录制规则;

在步骤S121中,约定第二公共桩的录制规则是为了保证能正确地抓取到本系统中的所需数据,所述所需数据是指当前模拟匹配的所需匹配条件和响应。

步骤S122,根据所述约定的第二公共桩的录制规则,抓取本系统已完成的模拟匹配中匹配失败的数据;

在步骤S122中,根据第二公共桩的录制规则,才能在本系统的数据库中正确地抓取到本系统已完成的模拟匹配的数据。所述本系统已完成的模拟匹配中匹配失败的数据,应该理解地是,本系统已完成的模拟匹配中,若匹配失败,本系统把请求转发给外部服务,且接收外部服务对请求的响应,通过这个补偿措施,本系统已完成的模拟匹配中匹配失败的数据也应该算是一次成功的模拟匹配后的数据。所述匹配失败的数据应当包括请求、已完成模拟匹配条件及响应等数据。

步骤S123,从所抓取的数据中提取模拟匹配条件和响应;

在步骤S123中,因为数据均是从本系统的数据库中所抓取的,由本系统的内部代码规则,所以需要对所抓取的数据进行技术处理才能提取到模拟匹配条件和响应。

步骤S124,录制所提取的模拟匹配条件和响应为第二公共桩。

步骤S124是将提取的模拟匹配条件和响应录制为第二公共桩的步骤。应该理解地是,所述的录制步骤也是个自动录制过程,是由本系统内置的第二录制模块来执行的。

在本实施例中,参照图5,所述步骤S30包括以下步骤:

步骤S31,接收与所述链路同一IP地址的当前模拟匹配的请求;

在步骤S31中,是本申请所述模拟器的常规模拟服务步骤的开始。启动的监听链路的端口开始监听,当监听到具有与模拟器相同IP的请求时,拦截该请求。

步骤S32,解析所调用的公共桩,以释放模拟匹配条件和响应;

在步骤S32中,所调用的公共桩是由与公共桩具有同一IP的链路所调用的,而在步骤S31中,所述链路拦截是与所述链路同一IP地址的当前模拟匹配的请求。由此可知,所调用的公共桩与当前模拟匹配的请求的IP都是所述同一IP,这样,公共桩中的模拟匹配条件和响应才能与所述当前模拟匹配的请求相适配。

步骤S33,运用所释放的模拟匹配条件,执行所述请求的当前模拟匹配命令。

步骤S33是当前模拟匹配的执行步骤。只有当所调用的公共桩中的模拟匹配条件和响应与所述当前模拟匹配的请求相适配时,所述公共桩所释放的模拟匹配条件才能成为当前模拟匹配的的调用条件,才能执行当前模拟匹配命令。

步骤S31-33,具体讲述了当前模拟匹配的详细步骤,也是本申请模拟器启动后,模拟器的常规模拟服务步骤。

需要说明的是,所述模拟器的常规模拟服务步骤:首先,在模拟器初始化的过程中,模拟器中的桩匹配器调用存储于模拟器内的测试用例数据,判断所调用的测试用例数据的意图,并依据该测试用例数据中的特定数据编辑模拟的匹配条件及预设响应生成为桩;进一步地,所述参数化桩,应该理解的是,外部服务的多变性决定了模拟匹配条件及预设响应的多变,即桩可以是一个常量,也可以是一个变量,这样,把桩理解为一个桩函数,模拟的匹配条件为函数式,预设响应为返回值,而参数化桩就是在函数定义时候传入形参,而相对地,解析参数就是调用函数时传入实参,这样,把桩定义为一个函数,函数定义时候传入的参数叫形参,而调用函数时传入的参数叫实参,桩参数化的过程是:配置桩的参数的格式,添加桩参数,完成参数化,生成桩参数。桩的参数化用以适配多种协议的不同外部服务,故桩函数可以自动生成,也可自定义,但自动生的桩函数与自定义的桩函数其主要差别在于:自定义的桩函数调用优先级别高于原函数,原函数的优先级别高于自动生成的桩函数。举个例子,假定在代码中能够找到某个函数的原本定义,此时自动生成的桩函数是无效的,因为原函数优先级别高于自动生成的桩函数。而自定义桩函数可以带来的好处在于:调用原函数可能其返回值为一个固定值,不能返回一个期望值,以使得测试不同的代码分支。而桩函数的返回值,可由用户自由控制,因而具备更大的灵活性。故在本实施例中,这个桩函数的返回值即预设响应,采用beanshell(一种JAVA源码解释器)动态生成。

而本发明的参数化桩也是智能匹配功能的一种体现。桩的匹配条件和模拟响应也都随之参数化,应该理解地是,如果桩配置的参数格式是${参数名},当设置了参数格式后,桩参数也必须设置,否则被测服务请求均会匹配不成功,只有重新设置了桩参数,让桩参数替换掉匹配条件和模拟响应的格式化参数,这时再请求一次,才可以看到应该得到的响应。

在本发明中,需要说明的是,桩根据测试用例数据中的特定数据的不同区分为公共桩和私有桩,所述特定数据是根据模拟外部服务的意图不同而由本系统内部特定的数据,所述公共桩即可在该链路里新建并被调用,也可以是抓取redis的数据自动生成,可被与公共桩关联于同一个IP地址下的链路调用,所述私有桩只能在该链路里新建,并只为该链路私有。这里所说的新建桩包括自定义桩函数和原函数。

特别需要说明地是,所述公共桩的录制途径有两种:1、从外部服务系统抓取流量进行录制,场景:平台与ApiTester(接口测试平台)和DCT(造数据平台))对接时,因为ApiTester和DCT的测试时,所有正常的接口请求和响应会发送一个公共的redis做缓存,平台会定时从redis提取这些数据自动生成公共桩;2、当模拟器不匹配请求时,通过桩录制器(Stub Recorder)录制模拟器拦截且不匹配直接转发的请求和响应生成为公共桩。公共桩还具有录制规则,所述公共桩录制规则可以由内部代码预先建立默认规则后自动生成录制规则,也可以在页面人为设置。所述由内部代码预先建立默认规则后自动生成的公共桩与所述在页面自定设置的公共桩的差别就是上述自动生的桩函数与自定义的桩函数的差别。

所述的模拟匹配具有丰富的多种匹配规则,所述匹配规则逻辑上支持多个桩之间的AND,OR和NOT关系,匹配的操作符支持equals(值相等)、contains(值包含)和regex(值正则表达式匹配),如表示HTTP请求的URI包含Stock/Wms/add并且是POST请求则返回预设响应的操作是:先选择匹配规则,输入表示HTTP请求的URI,再选择匹配的操作符contains,值为Stock/Wms/add,而所述的预设响应根据选择匹配规则,通过beanshell动态生成。

模拟器的初始化完成后,启动监听链路,监听到与链路同一IP地址的请求,模拟器拦截请求,解析请求生成请求参数,提取请求参数转换为统一的封装不同协议的请求对象,传送请求对象至桩匹配器,桩匹配器接收请求对象,调用桩参数,解析桩参数,以释放模拟器的匹配条件和预设响应,根据模拟匹配条件执行匹配命令,返回相应的响应。

模拟器普通模拟匹配执行之前被测服务请求接收的过程,链路启动的时候会启动一个InboundChannel(InboundChannel专门用于A服务和模拟器间通信的通道),用于监听收到的来自A服务的请求,收到请求后,通过Request Extrator(请求出口)对请求的参数进行提取(如uri,body的参数),转为一个RequestElement(请求对象)如,HTTP,OSP等不同协议的请求内容统一转换为RequestElement请求对象即封装有不同协议的请求参数。模拟器再把RequestElement传入Stub Matcher(桩匹配器)与用户预设的桩进行匹配。整个把请求解析为RequestElement的操作均是由模拟器的内部代码实现。

在本发明中,模拟器常规模拟匹配执行之前还有桩参数解参的过程,桩可以是一个常量,也可以是一个变量,这样,把桩定义为一个函数,函数定义时候传入的参数叫形参,而调用函数时传入的参数叫实参,模拟器先替换掉桩里区配条件和预设响应的参数,然后再做匹配。若匹配成功,模拟器返回预设响应至被测服务;或者是,若匹配失败,模拟器转发请求至外部服务,接收外部服务对请求的真实响应返回至被测服务。

所述模拟器拦截由被测服务发出的请求的步骤之后,所述解析请求并发送至桩匹配器的步骤之前还包括:模拟器监测请求,根据请求的监测情况判断匹配命令的执行情况;若监测请求需要执行匹配命令,解析请求并发送至桩匹配器;或者是,若监测请求不需要返回预设响应时,暂停模拟器的链路,不执行匹配,直接转发被测服务请求并返回外部服务对请求的真实响应;或者是,若监测请求不需要使用模拟器时,停止模拟器的链路,模拟服务关闭监听端口,返回报错信息。

应该理解的是,根据企业用户业务的复杂性,为了满足用户各种匹配及转发的需要,所述模拟器通过链路状态的控制来完成监测请求的功能,应该理解地是,监测请求的同时是结合用户的需求,如果用户不需要匹配直接转发的时候可以暂停模拟器的链路,如果用户不使用模拟器,可以停止模拟器的链路,模拟服务关闭监听端口,用户再发起请求到模拟器,会收到连接失败的报错信息。

参照图6,本发明还公开了一种模拟服务的装置,包括:

抓取模块10,用于抓取已完成模拟匹配的数据;

录制模块20,用于将所抓取的数据录制为公共桩;

本系统通过抓取已完成模拟匹配的数据,从已完成模拟匹配的数据中提取模拟匹配条件和响应录制为可调用的公共桩,无需在另行配置公共桩,即节省流量,又提高自动化配置的智能性。

解析模块30,用于解析所调用的公共桩,以释放模拟匹配条件和响应;

IP配置模块40,用于配置所述公共桩的IP地址;

通过公共桩的IP配置,建立与公共桩具有同一IP地址(是Internet Protocol Address,又译为网际协议地址))的链路联接关系,以便控制所述链路调用所述公共桩。应该理解地是,在本步骤中,默认模拟器已完成初始化操作。模拟器初始化操作需要完成两个方面的预备,第一,需要部署测试环境(主要指硬件环境),以为模拟器的模拟服务提供稳定而可控的环境,提高模拟器的工作质量和效率。预先运行构建或部署与被测服务和外部服务之间网络通信服务接口的对接、建立WEB UI交互测试模型、构建多种测试类型框架、封装有不同协议的链路配置,根据被测服务的协议服务部署被测服务的服务端口配置及呈现解耦依赖情况时,执行解耦依赖,以绕开所依赖的外部服务的端口。而这些测试环境的部署均有一个集中管理数个模拟器的模拟服务平台来完成,首先建立模拟器与被测服务和外部服务之间的网络通信;接着建立WEB UI界面交互测试模型及交互规范,以下的步骤均在界面操作,而无需编码;再针对被测服务的需求构建多种测试类型的框架,比如:单元测试、集成测试、自动化测试、功能测试及压力测试,每种测试类型的框架内存储有模拟外部服务行为的测试用例的测试模块;根据不同协议服务给每个模拟器封装不同协议的链路配置;根据被测服务的协议服务修改被测服务的目标服务端口配置,被测的A服务(即被测服务)原来是依赖外部的B服务(即外部服务),现在A服务的目标服务不指向B服务而改为指向模拟器。第二,需要部署测试服务(主要指软件环境),以为本发明的测试方法提供测试对象。测试服务包括测试管理单元和测试执行单元,模拟器等同于测试管理单元,所述模拟器管理单次模拟测试的运行,而模拟器中虚拟一个桩匹配器(Stub Matcher)等同于测试执行单元,所述桩匹配器实行模拟测试执行控制,具体来说是,模拟器中的测试模块存储模拟外部服务行为的测试用例,桩匹配器用于模拟测试模块的调用条件的元件,以代替测试模块的接口,接受或传递测试模块的数据,其中,所述测试模块的调用条件即为在桩匹配器中编辑的模拟匹配条件,或者是,通过注册自定义服务事件的API函数编辑自定义服务的模拟测试匹配条件。桩匹配器根据模拟测试匹配条件实行测试控制。

本发明模拟器的初始化还包括创建模拟器,所述模拟器用于模拟与被测的A服务进行真实交互的外部B服务。所述模拟器可以采用JETTY服务器,该JETTY服务器为一个开源的servelet容器(servelet是用JAVA编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态WEB内容),是基于JAVA的WEB容器。JETTY服务器可以作为嵌入式服务器使用,JETTY服务器的运行速度较快,而且是轻量级的,JETTY服务器是使用Java语言编写的,它的API以一组JAR包的形式发布。JAR包(JAVA的封装包)管理用于RPC协议模拟(Remote Procedure Call Protocol--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议),统一管理客户端的JAR包,可以理解地,JAR包可用于解析不同协议服务。则测试中当被测的A服务通过接口调用外部的B服务进行交互时,改为调用模拟器模拟该交互,即把原本被测的A服务请求修改指向,不再指向B服务而改为指向模拟器。

控制模块50,用于控制与公共桩具有同一IP地址的链路调用公共桩;

控制模块50用于控制链路调用公共桩,值得一提地是,只有当所调用的公共桩中的模拟匹配条件和响应与所述当前模拟匹配的请求相适配时,所述公共桩所释放的模拟匹配条件才能成为当前模拟匹配的的调用条件,才能执行当前模拟匹配命令。

所述调用公共桩之后还存在一个对公共桩解参/析参的过程,才能得到模拟匹配条件被之运用。整个步骤为一种特殊的模拟匹配过程,该模拟匹配过程通过调用的抓取数据自动生成的公共桩,得到已完成的模拟匹配条件,执行当前的模拟匹配命令,即实现了一种模拟服务的智能配置,又为本系统节省了流量,节约了成本。

接收模块60,用于接收与所述链路同一IP地址的当前模拟匹配的请求;

接收模块60启动的监听链路的端口开始监听,当监听到具有与模拟器相同IP的请求时,拦截该请求。此时,是所述模拟器的常规模拟服务步骤的开始。

执行模块70,用于运用所述模拟匹配条件,执行所述链路接收的同一IP地址的当前模拟匹配命令;

执行模块70完成了当前模拟匹配的常规模拟执行。值得一提地是,只有当所调用的公共桩中的模拟匹配条件和响应与所述当前模拟匹配的请求相适配时,所述公共桩所释放的模拟匹配条件才能成为当前模拟匹配的的调用条件,才能执行当前模拟匹配命令。

需要说明地是,所述模拟器的常规模拟服务步骤:首先,在模拟器初始化的过程中,模拟器中的桩匹配器调用存储于模拟器内的测试用例数据,判断所调用的测试用例数据的意图,并依据该测试用例数据中的特定数据编辑模拟的匹配条件及预设响应生成为桩;进一步地,所述参数化桩,应该理解的是,外部服务的多变性决定了模拟匹配条件及预设响应的多变,即桩可以是一个常量,也可以是一个变量,这样,把桩理解为一个桩函数,模拟的匹配条件为函数式,预设响应为返回值,而参数化桩就是在函数定义时候传入形参,而相对地,解析参数就是调用函数时传入实参,这样,把桩定义为一个函数,函数定义时候传入的参数叫形参,而调用函数时传入的参数叫实参,桩参数化的过程是:配置桩的参数的格式,添加桩参数,完成参数化,生成桩参数。桩的参数化用以适配多种协议的不同外部服务,故桩函数可以自动生成,也可自定义,但自动生的桩函数与自定义的桩函数其主要差别在于:自定义的桩函数调用优先级别高于原函数,原函数的优先级别高于自动生成的桩函数。举个例子,假定在代码中能够找到某个函数的原本定义,此时自动生成的桩函数是无效的,因为原函数优先级别高于自动生成的桩函数。而自定义桩函数可以带来的好处在于:调用原函数可能其返回值为一个固定值,不能返回一个期望值,以使得测试不同的代码分支。而桩函数的返回值,可由用户自由控制,因而具备更大的灵活性。故在本实施例中,这个桩函数的返回值即预设响应,采用beanshell(一种JAVA源码解释器)动态生成。

而本发明的参数化桩也是智能匹配功能的一种体现。桩的匹配条件和模拟响应也都随之参数化,应该理解地是,如果桩配置的参数格式是${参数名},当设置了参数格式后,桩参数也必须设置,否则被测服务请求均会匹配不成功,只有重新设置了桩参数,让桩参数替换掉匹配条件和模拟响应的格式化参数,这时再请求一次,才可以看到应该得到的响应。

在本发明中,需要说明的是,桩根据测试用例数据中的特定数据的不同区分为公共桩和私有桩,这里所说的特定数据是根据模拟外部服务的意图不同而由本系统内部特定不同的数据,所述公共桩即可在该链路里新建并被调用,也可以是抓取redis的数据自动生成,可被与公共桩关联于同一个IP地址下的链路调用,所述私有桩只能在该链路里新建,并只为该链路私有。这里所说的新建桩包括自定义桩函数和原函数。

特别需要说明地是,公共桩还具有录制规则,所述公共桩的录制途径有两种:1、从外部服务系统抓取流量进行录制,场景:平台与ApiTester(接口测试平台)和DCT(造数据平台))对接时,因为ApiTester和DCT的测试时,所有正常的接口请求和响应会发送一个公共的redis做缓存,平台会定时从redis提取这些数据自动生成公共桩;2、当模拟器不匹配请求时,通过桩录制器(Stub Recorder)录制模拟器拦截且不匹配直接转发的请求和响应生成为公共桩。所述公共桩录制规则可以由内部代码预先建立默认规则后自动生成录制规则,也可以在页面人为设置。所述由内部代码预先建立默认规则后自动生成的公共桩与所述在页面自定设置的公共桩的差别就是上述自动生的桩函数与自定义的桩函数的差别。

所述的模拟匹配具有丰富的匹配规则,桩的匹配条件逻辑上支持多个桩之间的AND,OR和NOT关系;匹配的操作符支持equals(值相等),contains(值包含),regex(值正则表达式匹配),如下图,表示HTTP请求的URI包含Stock/Wms/add并且是POST请求则返回预设响应。而所述的预设响应根据不同的模拟匹配条件,通过beanshell动态生成。

模拟器的初始化完成后,启动监听链路,监听到同一IP地址的请求,模拟器拦截请求,解析请求生成请求参数,提取请求参数转换为统一的封装不同协议的请求对象,传送请求对象至桩匹配器,桩匹配器接收请求对象,调用桩参数,解析桩参数,以释放模拟器的匹配条件和预设响应,根据模拟匹配条件执行匹配命令,返回相应的响应。

模拟器普通模拟匹配执行之前被测服务请求接收的过程,链路启动的时候会启动一个InboundChannel(InboundChannel专门用于A服务和模拟器间通信的通道),用于监听收到的来自A服务的请求,收到请求后,通过Request Extrator(请求出口)对请求的参数进行提取(如uri,body的参数),转为一个RequestElement(请求对象)如,HTTP,OSP等不同协议的请求内容统一转换为RequestElement请求对象即封装有不同协议的请求参数。模拟器再把RequestElement传入Stub Matcher(桩匹配器)与用户预设的桩进行匹配。整个把请求解析为RequestElement的操作均是由模拟器的内部代码实现。

在本发明中,模拟器常规模拟匹配执行之前还有桩参数解参的过程,桩可以是一个常量,也可以是一个变量,这样,把桩定义为一个函数,函数定义时候传入的参数叫形参,而调用函数时传入的参数叫实参,模拟器先替换掉桩里区配条件和预设响应的参数,然后再做匹配。若匹配成功,模拟器返回预设响应至被测服务;或者是,若匹配失败,模拟器转发请求至外部服务,接收外部服务对请求的真实响应返回至被测服务。

所述模拟器拦截由被测服务发出的请求的步骤之后,所述解析请求并发送至桩匹配器的步骤之前还包括:模拟器监测请求,根据请求的监测情况判断匹配命令的执行情况;若监测请求需要执行匹配命令,解析请求并发送至桩匹配器;或者是,若监测请求不需要返回预设响应时,暂停模拟器的链路,不执行匹配,直接转发被测服务请求并返回外部服务对请求的真实响应;或者是,若监测请求不需要使用模拟器时,停止模拟器的链路,模拟服务关闭监听端口,返回报错信息。

应该理解地是,根据企业用户业务的复杂性,为了满足用户各种匹配及转发的需要,所述模拟器通过链路状态的控制来完成监测请求的功能,应该理解地是,监测请求的同时是结合用户的需求,如果用户不需要匹配直接转发的时候可以暂停模拟器的链路,如果用户不使用模拟器,可以停止模拟器的链路,模拟服务关闭监听端口,用户再发起请求到模拟器,会收到连接失败的报错信息。

响应模块80,用于若当前模拟匹配成功,返回所述响应至被测服务。

响应模块80是用于完成模拟匹配的响应措施之一,若当前模拟匹配成功,返回所调用的公共桩中的响应至被测服务,完成这种模拟服务的任务。

在本发明中,本装置通过抓取已完成模拟匹配的数据,从已完成模拟匹配的数据中提取模拟匹配条件和响应录制为可调用的公共桩,无需在另行配置公共桩,即节省流量,又提高自动化配置的智能性。

参照图7,所述抓取模块10包括:

第一抓取单元11,用于抓取外系统的已完成模拟匹配的数据;

第二抓取单元12,用于抓取本系统已完成的模拟匹配中匹配失败的数据。

在本发明中,所述公共桩的数据来源有两大源头,一个来源于外系统,另一个来源于本系统。应该理解地是,所述外系统是即非被测服务又非外部服务的系统,分别将来源于外系统的已完成模拟匹配的数据录制为第一公共桩,将数据来源于本系统的已完成的模拟匹配中匹配失败的数据录制为第二公共桩。因为数据内容不同,故公共桩的命名不同,以便区分。

应该理解地是,所述本系统是指进行当前模拟匹配的模拟服务系统,所述外系统是指即非被测服务方又非外部服务方,是本系统通信连接的其他系统。所述本系统的普通模拟匹配的过程是:本系统启动的监听链路的端口开始监听,当监听到具有与模拟器相同IP的请求时,拦截该请求,报文解析请求,并将解析后的请求发送至桩匹配器,桩匹配器接收请求后,根据模拟匹配条件执行匹配命令,桩匹配器开始测试控制,若匹配成功,桩匹配器推出模拟测试的预设响应返回至被测服务;若匹配失败,桩匹配器转发请求给外部服务,并接收外部服务对请求的真实响应,返回至被测服务。这样,所述本系统已完成的模拟匹配中匹配失败的数据也应该算是一次匹配成功所得数据。所以外系统的已完成模拟匹配的数据和本系统已完成的模拟匹配中匹配失败的数据都可以为已完成的模拟匹配数据,而匹配成功的数据已存入本系统中,故无需再抓取。

参照图8,所述录制模块20包括:

第一录制单元21,用于将第一抓取单元所抓取的数据录制为第一公共桩;

第一录制单元21将提取的模拟匹配条件和响应录制为第一公共桩的步骤。应该理解地是,所述的录制步骤是个自动录制过程,是由本系统内置的第一录制单元21来执行的。

第二录制单元22,用于将第二抓取单元所抓取的数据录制为第二公共桩。

第二录制单元22将提取的模拟匹配条件和响应录制为第二公共桩的步骤。应该理解地是,所述的录制步骤也是个自动录制过程,是由本系统内置的第二录制模块来执行的。

参照图9.,所述第一抓取单元11包括:

建立子单元111,用于建立与外系统的通信连接关系;

第一约定子单元112,用于约定第一公共桩的录制规则;

建立子单元111用于建立与外系统的通信连接,是能抓取外系统数据的前提条件,而第一约定子单元112所约定第一公共桩的录制规则,是为了保证能正确地抓取到外系统中的所需数据,所述所需数据是指当前模拟匹配的所需匹配条件和响应。

第一抓取子单元113,用于根据所述约定的第一公共桩的录制规则,抓取由外系统的已完成模拟匹配的数据生成的redis;

第一抓取子单元113执行正确地抓取到外系统中所需数据。所述redis(redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API),是由外系统采集已完成模拟匹配的数据生成的缓存,且可被网络公用。所述的redis,在测试领域,是测试人员通常会使用所有的正常的接口请求和响应发送的一个公共缓存。

第一提取子单元114,用于解析所述redis,从所抓取的数据中提取模拟匹配条件和响应。

第一提取子单元114从所抓取的redis中,获取已完成的模拟匹配条件和响应的步骤。值得一提地是,因为redis内部存在的代码规则,所以还需要先解析所抓取的redis,解析后才能提取到所需数据。

在本发明中,首先建立通信连接,约定第一公共桩的录制规则,根据第一公共桩的录制规则才能在外系统模拟数据库中抓取到包含由外系统采集已完成模拟匹配数据的redis;又由于该redis可被网络公用,所以本系统才能实现抓取;又因为redis是缓存数据库,所以解析所抓取的redis,从redis中提取模拟匹配条件和响应录制为第一公共桩。所述redis是包含有由外系统已完成模拟匹配的数据而生成的缓存数据片,且可被网络公用。所述的redis,在测试领域,是测试人员通常会使用所有的正常的接口请求和响应发送的一个公共缓存。

参照图10,所述第二抓取单元12包括:

第二约定子单元121,用于约定第二公共桩的录制规则;

第二约定子单元121约定第二公共桩的录制规则是为了保证能正确地抓取到本系统中的所需数据,所述所需数据是指当前模拟匹配的所需匹配条件和响应。

第二抓取子单元122,用于根据所述约定的第二公共桩的录制规则,抓取本系统已完成的模拟匹配中匹配失败的数据;

第二抓取子单元122根据第二公共桩的录制规则,才能在本系统的数据库中正确地抓取到本系统已完成的模拟匹配的数据。所述本系统已完成的模拟匹配中匹配失败的数据,应该理解地是,本系统已完成的模拟匹配中,若匹配失败,本系统把请求转发给外部服务,且接收外部服务对请求的响应,通过这个补偿措施,本系统已完成的模拟匹配中匹配失败的数据也应该算是一次成功的模拟匹配后的数据。所述匹配失败的数据应当包括请求、已完成模拟匹配条件及响应等数据。

第二提取子单元123,用于从所述匹配失败的数据中提取本系统已完成的模拟匹配条件和响应。

第二提取子单元123因为数据均是从本系统的数据库中所抓取的,由本系统的内部代码规则,所以需要对所抓取的数据进行技术处理才能提取到模拟匹配条件和响应。

在本发明中,第二公共桩所需数据源自本系统内的数据,所以直接在本系统内约定第二公共桩的录制规则;再根据约定的第二公共桩的录制规则,抓取本系统已完成的模拟匹配中匹配失败情况下的相关数据,根据本系统匹配失败的补偿措施:转发请求到外部服务,并接收外部服务对请求的真实响应,该补偿措施获得的结果也应该算是一次模拟测试匹配成功的结果。抓取本系统匹配失败的数据,提取模拟匹配条件和响应录制为第二公共桩。

参照图11,本发明还公开了一种模拟服务的集中管理平台,一种模拟服务的集中管理平台,其特征在于,包括:一个或多个不同协议所述的模拟服务的装置;及模拟多种协议服务平台,用于接收请求,模拟多种协议服务功能平台处理服务请求;及UI交互模块,用于建立UI交互测试模型及交互规范,编辑静态HTML,以负责所有模拟服务的交互对接;及模拟测试架构,用于模拟不同的测试类型建立模拟测试框架;及日志管理模块,用于提供日志管理功能,可对模拟测试的结果进行日志的记录、查看、下载及清理;及模拟数据库,用于存储模拟服务的所有数据。

所述模拟多种协议服务平台包括协议组件模块和服务端口管理模块,所述协议组件模块,用于接收请求后,获取请求URL地址上的协议类型,转交给适配协议类型的模拟器进行处理,它包括模拟通用协议服务单元和模拟自定义协议服务单元,所述服务端口管理模块,用于根据不同协议服务修改被测服务、外部服务和模拟器的端口配置,以便模拟器进入代理服务器的角色。

所述模拟测试架构是提供模拟测试用例的模拟测试分析工具,它包括模拟测试的测试模块、管理模块和统计分析模块,所述测试模块用于执行不同测试类型的模拟匹配命令时,提供所调用的模拟测试用例,且所述的模拟测试用例是可反复使用的;所述管理模块用于管理不同模拟测试类型的模拟测试用例的调用;所述统计分析模块用于统计且分析所述模拟测试的结果。所述模拟测试架构根据模拟测试预期的不同区分为不同的测试类型,再模拟不同的测试类型建立的模拟测试架构,所述模拟测试架构的种类包括单元测试架构、集成测试架构、功能测试架构和压力测试架构,每种所述模拟测试架构是提取每种测试类型的共性部分组成的独立的体系结构。

在另一较佳实施例中,所述的模拟服务的集中管理平台还包括解耦依赖模块,在呈现解耦依赖的情况时,模拟服务的集中管理平台执行解耦依赖,以绕开所依赖外部服务的接口。

在本发明中,被测的A服务原来是依赖外部的B服务,现在在被测的A服务和外部的B服务之间建立一个开放式的集中管理诸多所述模拟器的平台,而平台通过接口与不同的外部服务器协同交互来处理被测服务的业务。应当理解地是,计算中的耦合偏向于两者或多者的彼此影响,解耦就是要解除这种影响,增强各自的独立存在能力,可以无限降低存在的耦合度,但不能根除,否则就失去了彼此的关联,失去了存在意义。

服务模拟平台的作用是服务解耦,可用于研发或测试人员绕开外部服务单独测试自己负责的服务。服务解耦场景:1)A服务调B服务,B服务由于某些原因不可用或不稳定,例如登陆页面调一个登陆的passport.api,但是passport.api连不上导致无法登陆;2)A服务调B服务,B服务的数据或场景难以构造,例如登陆页面调一个登陆的passport.api,passport.api会在某些极端情况下返回一些错误码;3)自动化测试时,A服务调B服务,由于B服务不可控,数据经常变动导致测试数据经常变化。比如:Jetty可以从test case中控制其运行,从而可以使自动化测试不再依赖外部环境,顺利实现自动化测试。

在本发明中,上述所有模拟服务的装置可以近似认为是一种模拟器,被测的A服务(即被测服务)原来是依赖外部的B服务(即外部服务),现在A服务不指向B服务而改为指向模拟器。当A服务发送一个请求经过模拟器时,模拟器内部的桩对预设条件和请求参数进行匹配,会发生两种可能:1)匹配不上,则模拟器只做中转,把请求转发到B服务,B服务把真实响应返回给模拟器,模拟器录制该请求和响应并把该响应返回给A服务。这种情况,用户不会感知模拟器的存在;2)匹配上,则模拟器会把匹配上的桩的预设响应马上返回给A服务,请求不会转发到B服务。若模拟器监测请求不需要返回预设响应时,暂停模拟器的链路,不执行匹配,直接转发被测服务请求并返回外部服务对请求的真实响应;或者是,若监测请求不需要使用模拟器时,停止模拟器的链路,模拟服务关闭监听端口,返回报错信息。

在模拟器初始化操作后,模拟外部服务行为的测试用例存储于测试模块;执行模块监听模拟器启动的监听链路端口,监听到同一IP的请求,进行拦截,请求在链路里由报文解析模块进行解析,解析后由转换模块转换为统一的封装不同协议的请求对象,同时监测判断模块对请求进行监测,判断是否进行匹配,若需要匹配,桩模块接收请求,执行模块执行匹配命令,所述匹配命令即为将请求的相关数据传送给测试模块,并调用测试模块,根据匹配情况,响应模块返回相应的响应,所述相应响应包括预设响应和真实响应,若匹配成功,返回预设响应;若匹配失败,转发请求至外部服务,接收外部服务对请求的真实响应返回。同时录制模块抓取流量录制匹配失败的请求和返回的响应,生成公共桩,可以被与该公共桩同一IP下的链路引用。

所述的模拟服务的集中管理平台就是对上述一个或多个不同协议服务的所述模拟器进行集中管理的平台,模拟服务平台的核心原理是一个代理服务平台,为进行模拟服务的模拟器构建适配的测试环境;根据被测服务的请求类型寻找合适的模拟器及不同协议的链路配置,以提供相对应的服务;对多个模拟器的集中管理,配置共享,提高联调测试工作效率;日志记录及数据库提供集中管理的常规服务。

特别说明地是,构建功能测试框架时,是单独启动平台提供的压测包,所述的压测包支持通用协议,比如HTTP协议和自定义协议,比如OSP协议的压测时的服务模拟,而且压测包也是通过Web界面指定链路的桩设置启动,无需重复配置。步骤为:首先一键下载平台提供的压测包,启动压测模拟器,进行压力模拟测试,通过界面直接查看测试结果。

所述的模拟服务的集中管理平台使得测试人员的联调测试、开发联调、异常场景及复杂测试场景的测试更趋简化,还使得压测数据及环境的简化。

在实际应用中,本发明的一种模拟服务的方法、装置及集中管理平台的具体过程如下:

一、模拟服务的装置

以HTTP协议模拟为例:

1.模拟器自带一个Nginx接收请求,Nginx根据用户的配置的转发端口,Nginx收到请求后,把转发到对应链路启动的监听端口。

2.链路启动的时候会启动一个InboundChannel(InboundChannel专门用于A服务和模拟器间通信的通道),用于监听收到的来自A服务的请求。收到请求后,通过Request Extrator对请求的参数进行提取(如uri,body的参数),转为一个RequestElement请求对象(HTTP,OSP等不同协议的请求内容统一转换为RequestElement请求对象)。

3.模拟器再把RequestElement传入Stub Matcher(桩匹配器)与用户预设的桩进行匹配。

4.匹配失败就会通过OutboundChannel(OutboundChannel是专门用于模拟器和B服务通信的通道,只在转发时才建立)转发到真实服务并接收响应,并且通过Stub Recorder(桩录制器,专门用于把录制模拟器拦截且转发的响应录制为公共桩)录制响应,然后把真实响应通过InBoundChannel返回给请求方(A服务)。

5.匹配成功后,会把预设响应通过InBoundChannel直接返回给请求方(A服务)。

所述的模拟器实现模拟服务的普通匹配过程实际操作流程:

1、模拟器的链路配置,包括:链路ID、链路IP、链路名称、链路监听端口、链路监测是否使用匹配、目标服务目标IP、目标服务Host/URL、目标服务端口及协议类型,其中,第一个链路都会起一个监听端口,目标服务设置用户匹配失败后的转发,支持协议类型包括:HTTP、OSP、Thrift等;

2、链路列表及状态控制,链路状态包括:启动、暂停(只转发不匹配使用)和停止;

3、Nginx配置,用于HTTP协议或Thrift协议模拟,平台内置Nginx,用户无需再在服务器上操作Nginx,只需在页面上配置;

4、JAR包管理,用于RPC协议模拟,统一管理客户端的JAR包,便于解析不同协议服务。

5、桩配置,指定模拟匹配规则、预设响应、桩参数等设置,每个链路可设置多个桩;

6、公共桩录制规则设置,公共桩的录制途径有两种:1、从外部服务系统抓取流量进行录制;2、当模拟器不匹配请求时,通过桩录制器(Stub Recorder)录制模拟器拦截且不匹配直接转发的请求和响应生成为公共桩。所述公共桩录制规则可以手工设置,如果有不存在的条件,还可以自动生成录制规则;

7、日志记录,模拟匹配失败时记录转发的日志,模拟匹配成功时记录反回预设响应的日志;

8、单独启动的服务压测包进行压力测试,支持HTTP和DSP协议的压测时服务模拟,一键下载压测包,启动压测模拟器,压测模拟器自身进行压力测试,查看测试结果。

二、模拟服务的集中管理平台

所述的模拟服务的集中管理平台就是对所述模拟器进行集中管理的平台,模拟服务平台的核心原理是一个代理服务平台,所述平台的工作内容包括为进行模拟服务的模拟器构建适配的测试环境;根据被测服务的请求类型寻找合适的模拟器及链路配置,以提供相对应的服务;对多个模拟器的集中管理,配置共享,提高联调测试工作效率;日志记录及存储模拟服务的数据等等,平台的操作步骤:

步骤一,建立UI交互测试模型,以使用户所有的操作基本都是从平台的WEB界面进行,无需编码;

步骤二,利用测试模型,生成测试框架,包括:单元测试框架、集成测试框架、功能测试框架及压力测试框架;

步骤三,呈现解耦依赖的情况时执行解耦依赖,以绕开所依赖外部服务的接口;

步骤四,编写测试事件,通过模拟外部服务的测试用例或注册自定义服务事件的API函数,将已编写好的脚本编辑到测试框架中相应的模拟器中;

步骤五,在模拟器中,实施模拟测试匹配,返回相对应的响应;

步骤六,日志记录,可进行日志的记录、查看、下载及清理,若匹配成功,返回预设响应的日志;若匹配失败,返回转发的日志;

步骤七,模拟数据库收集测试数据,存储并管理,

所述测试框架适用场景:1)功能测试、集成测试和单元测试

测试或研发人员在做功能测试、集成测试、单元测试甚至功能开发的时候,通过把自身服务对接到平台模拟器,可以简单的绕开外部不稳定、不可用、复杂的外部服务服务绕开掉并可以模拟外部服务的任意返回。用户只需要关注自身服务的功能和逻辑从而实现对外部服务的解耦依赖。

2)性能测试

测试人员做压测的时候,把平台提供的压测包下载到压测机上并启动。压测包是可独立启动的高性能模拟服务,和平台本身通过接口对接并在启动时获取桩和链路相关数据。用户压测的时候无需部署外部依赖服务和造大批量外部压测数据,只要简单的把外部依赖改为连接模拟器并关注被测服务本身的性能和压测数据。所述平台提供的压测包,支持通用协议和自定义协议的压测时服务模拟,而且压测包也是使用Web界面指定链路的桩设置,无需重复配置。步骤为:首先一键下载平台提供的压测包,启动压测模拟器,进行压力模拟测试,通过界面直接查看测试结果。

应该理解地是,本实施例中,把协议服务分为通用协议服务和自定义协议服务,具体地,服务模拟平台针对不同协议服务有以下几种模拟的方案:

1)HTTP/Thrift协议模拟(通用协议模拟):

用户把B服务的IP(通过修改DNS配置)地址指向平台模拟器,通过平台内置的Nginx把A服务的请求指向模拟器启动的监听链路的端口。

2)OSP协议模拟(自定义协议模拟):

用户把B服务的IP通过OSP的静态路由的IP和端口直接指向模拟器的IP和对应OSP链路的监听链路的端口。

需要补充说明的是,Nginx是一个开源的反向代理服务器,平台只是用了Nginx的端口映射功能,用于HTTP协议或Thrift协议模拟,平台内置Nginx,用户无需再使用服务器操作Nginx,只需在页面上配置。如在Nginx配置页面配置是:Server Name:cart.api.vip.com listen Port:80默认监听端口:1234,实际会在Nginx生成一个配置文件内容如下:

表示cart.api.vip.com域的请求并且端口是80的,统一转发到监听端口是1234的链路。例如请求是http://cart.api.vip.com:80/xxx,通过Nginx转发后变为http://127.0.0.1:1234。

Nginx反向代理的原理是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其它变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件系统的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术配置本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器或者网络设备等电子设备)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是在本发明的发明构思下,利用本发明说明书及附图内容所作的等效结构变换,或直接/间接运用在其他相关的技术领域均包括在本发明的专利保护范围内。

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