模拟Socket请求的通用方法转让专利

申请号 : CN201910550715.7

文献号 : CN110278272A

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄勇朱小兵汪晓琴

申请人 : 四川新网银行股份有限公司

摘要 :

本发明涉及模拟Socket请求的通用方法,包括:A.读取Socket服务预设定的配置文件;B.设置响应请求的通用类,包括有:解析Socket报文的方法、生成标签字典的方法、以及对响应报文进行组装的方法;C.启动Socket服务;D.根据配置文件的设置,通过通用类处理Socket请求报文,根据配置文件中的响应长度配置,先解析出响应长度,再读取真实的请求报文;解析所述真实的请求报文,将后续处理需要的信息抽取出来;E.根据配置文件的设置,对已读入内存的默认响应报文进行相应处理后,生成满足业务要求的响应信息。本发明能够快速模拟各种不同格式的Socket报文,并保证上游系统在测试自身逻辑的时候不会由于下游Socket服务系统不可用而造成不可测试的情况。

权利要求 :

1.模拟Socket请求的通用方法,其特征包括:

A.读取Socket服务预设定的配置文件;

B.设置响应Socket请求的通用类,在所述通用类里至少包括有:解析Socket报文的方法、供外部需求使用的生成标签字典的方法、以及根据用于响应Socket服务的默认报文的内容,对响应报文进行组装的方法;

C.根据配置文件,启动Socket服务,并将默认响应报文读入内存;

D.根据配置文件的设置,通过所述的通用类处理Socket请求报文,在处理时根据配置文件中的响应长度配置信息,先读取请求报文的长度字符,将该长度字符根据对应的响应规则解析出实际响应长度,再根据所述的实际长度读取Socket数据流,获取真实的请求报文;解析所述真实的请求报文,将后续处理需要的信息抽取出来并保存;

E.根据配置文件的设置,对已读入内存的默认响应报文进行相应处理后,生成满足业务要求的响应信息。

2.如权利要求1所述的模拟Socket请求的通用方法,其特征为:步骤B中解析Socket报文的方法,包括:步骤1:解析xml格式的Socket请求,遍历其中所有的标签,解析出每个标签里面的内容,生成以标签作为键、以标签内容作为值的字典表;

步骤2:读出配置文件中配置的标签列表,通过步骤1生成的字典表,找到键名和配置文件里配置的标签一致的键,并获取该标签的字典值;

步骤3:遍历字典表所有键名后生成一个只有配置文件里面的标签及所述字典值的新字典,并将该新字典赋给标签字典变量。

3.如权利要求1所述的模拟Socket请求的通用方法,其特征为:步骤B中对响应报文进行组装的方法,包括:步骤1:从内存中读取所述的默认响应报文;

步骤2:根据配置文件获取需要在默认响应报文里进行修改的标签名及对应的替换内容表达式;

步骤3:组装响应报文:对步骤2获取的替换内容表达式进行判断,如果替换内容表达式是标签表达式,则从经过步骤B的解析Socket报文的方法后生成的标签字典变量里获取和标签表达式中标签名相同的键对应的值,并用该值去替换默认响应报文中对应的标签值;

如果替换内容表达式是函数表达式,则直接调用该函数表达式,获取返回对应的值,并用该值去替换默认响应报文中对应的标签值;

如果替换内容表达式是字符串,则用该字符串去替换默认响应报文中对应的标签值;

步骤4:返回经过步骤3组装后的响应报文。

4.如权利要求3所述的模拟Socket请求的通用方法,其特征为:如果步骤3不能满足特殊Socket格式的响应需求,则继承所述的通用类,通过重写通用类中的方法实现特殊格式的Socket响应。

5.如权利要求1所述的模拟Socket请求的通用方法,其特征为:步骤D包括:D1.根据接收到的Socket请求,根据配置文件判断是属于哪一个Socket服务;

D2.启动多线程服务,将接收到的Socket报文分配相应的线程;

D3.所述线程调用配置文件中定义的响应处理类,处理接收到的报文;

D4.响应处理类根据配置文件的设置,通过所述的通用类处理Socket请求报文,在处理时根据配置文件中的响应长度配置信息,先读取请求报文的长度字符,将该长度字符根据对应的响应规则解析出实际响应长度,再根据所述的实际长度读取Socket数据流,获取真实的请求报文;解析所述真实的请求报文,将后续处理需要的信息抽取出来并保存。

6.如权利要求1至5之一所述的模拟Socket请求的通用方法,其特征为:步骤C还包括根据配置文件,设置每个Socket服务的线程池。

7.如权利要求1至5之一所述的模拟Socket请求的通用方法,其特征为:步骤C还包括根据配置文件,设置每个Socket服务的延迟返回时间;步骤E中生成满足业务要求的响应信息后,根据所述设置的延迟返回时间进行响应延迟,然后返回响应内容。

说明书 :

模拟Socket请求的通用方法

技术领域

[0001] 本发明涉及计算机开发及软件测试,具体的讲是模拟Socket请求的通用方法。

背景技术

[0002] Socket又称“套接字”,应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
[0003] Socekt报文:一串有固定格式的字符串,通过Socket,在接收方和发送方进行交互。Socket报文由2段字符串组成,第一段为长度字符串,该端字符串设定了正式的Socket报文长度;第二段为真实的报文内容,长度由第一段字符串指定。
[0004] 实例:
[0005] 18message
[0006] 解释:18这两个字符串表示报文内容的长度;后面的message表示报文内容。长度字符串可以有各种表示方法,可能由更多的字符串组成,且使用加密方式将真实长度进行加密。
[0007] 在软件开发或者测试的过程中,由于提供Socket服务的系统没有开发完成或者不能正常提供服务,会造成调用该Socket服务的上游系统无法进行自身逻辑的验证。
[0008] 在现有技术方案中,通过了解需要模拟的Socket服务的报文情况,然后定制化开发一个模拟该Socket服务的应用,再写死Socket请求报文和响应报文,以达到模拟Socket服务的功能。这种方式只能模拟一种特定格式的Socket报文,且响应请求是写死的,不具备逻辑功能;如果需要模拟另外一种格式的Socket报文就不适用,需要重新开放一个应用来适配新的Socket报文格式,在面对需要模拟多种Socket报文格式不一样的需求时,适用性就很差。

发明内容

[0009] 本发明提供了一种模拟Socket请求的通用方法,可以快速模拟各种不同格式的Socket报文,以保证上游系统在测试自身逻辑的时候,不会由于下游Socket服务系统不可用而造成不可测试的情况。
[0010] 本发明模拟Socket请求的通用方法,包括:
[0011] A.读取Socket服务预设定的配置文件。通过配置文件,可以配置Socket服务的各种信息,由程序自动解析生成服务,可以快速的新建Socket服务;
[0012] B.设置响应Socket请求的通用类,在所述通用类里至少包括有:解析Socket报文的方法、供外部需求使用的生成标签字典的方法、以及根据用于响应Socket服务的默认报文的内容,对响应报文进行组装的方法;
[0013] C.根据配置文件,启动Socket服务,并将默认响应报文读入内存。预先将默认响应读入内存,避免每次返回响应的时候再去读取文件,能够极大的提高响应速度;
[0014] D.根据配置文件的设置,通过所述的通用类处理Socket请求报文,在处理时根据配置文件中的响应长度配置信息,先读取请求报文的长度字符,将该长度字符根据对应的响应规则解析出实际响应长度,再根据所述的实际长度读取Socket数据流,获取真实的请求报文;解析所述真实的请求报文,将后续处理需要的信息抽取出来并保存;
[0015] E.根据配置文件的设置,对已读入内存的默认响应报文进行相应处理后,生成满足业务要求的响应信息。
[0016] 每一种不同格式的Socket请求,在配置文件中都预定义了一个请求处理类,该请求处理类集成了所述的通用类,通过通用类能够模板化处理Socket请求,实现了不需要改动任何代码就能处理各种Socket格式,从而极大程度提高了对不同报文格式的适配性。
[0017] 具体的,步骤B中解析Socket报文的方法,包括:
[0018] 步骤1:解析xml格式的Socket请求,遍历其中所有的标签,解析出每个标签里面的内容,生成以标签作为键、以标签内容作为值的字典表;
[0019] 步骤2:读出配置文件中配置的标签列表,通过步骤1生成的字典表,找到键名和配置文件里配置的标签一致的键,并获取该标签的字典值;
[0020] 步骤3:遍历字典表所有键名后生成一个只有配置文件里面的标签及所述字典值的新字典,并将该新字典赋给标签字典变量。
[0021] 具体的,步骤B中对响应报文进行组装的方法,包括:
[0022] 步骤1:从内存中读取所述的默认响应报文;
[0023] 步骤2:根据配置文件获取需要在默认响应报文里进行修改的标签名及对应的替换内容表达式;
[0024] 步骤3:组装响应报文:对步骤2获取的替换内容表达式进行判断,如果替换内容表达式是标签表达式,则从经过步骤B的解析Socket报文的方法后生成的标签字典变量里获取和标签表达式中标签名相同的键对应的值,并用该值去替换默认响应报文中对应的标签值;
[0025] 如果替换内容表达式是函数表达式,则直接调用该函数表达式,获取返回对应的值,并用该值去替换默认响应报文中对应的标签值;
[0026] 如果替换内容表达式是字符串,则用该字符串去替换默认响应报文中对应的标签值;
[0027] 步骤4:返回经过步骤3组装后的响应报文。
[0028] 进一步的,如果步骤3不能满足特殊Socket格式的响应需求,则继承所述的通用类,通过重写通用类中的方法实现特殊格式的Socket响应。如果遇到未设置的Socket格式时,只需重写下通用类中的处理方法就能适配新的Socket的格式,进一步提高了对不同报文格式的适配性。
[0029] 具体的,步骤D包括:
[0030] D1.根据接收到的Socket请求,根据配置文件判断是属于哪一个Socket服务;
[0031] D2.启动多线程服务,将接收到的Socket报文分配相应的线程;
[0032] D3.所述线程调用配置文件中定义的响应处理类,处理接收到的报文;
[0033] D4.响应处理类根据配置文件的设置,通过所述的通用类处理Socket请求报文,在处理时根据配置文件中的响应长度配置信息,先读取请求报文的长度字符,将该长度字符根据对应的响应规则解析出实际响应长度,再根据所述的实际长度读取Socket数据流,获取真实的请求报文;解析所述真实的请求报文,将后续处理需要的信息抽取出来并保存。
[0034] 优选的,步骤C还包括根据配置文件,设置每个Socket服务的线程池。通过使用线程池,能够极大的提高服务性能和响应速度。
[0035] 优选的,步骤C还包括根据配置文件,设置每个Socket服务的延迟返回时间;步骤E中生成满足业务要求的响应信息后,根据所述设置的延迟返回时间进行响应延迟,然后返回响应内容。通过设置延迟时间,可以满足异常测试的需求。
[0036] 本发明方法的有益效果包括:
[0037] 1.通过配置化生成了满足不同请求报文格式的Socket服务,能够同时模拟多种系统的Socket服务,能够适配不同长度报文字符串的Socket报文格式。
[0038] 2.通过配置化并配合固定模式化开发,能够快速定制化Socket服务的请求解析及响应报文定制化,能够快速模拟具有业务逻辑的Socket服务。
[0039] 3.能够适配报文长度字符串是加密的Socket报文格式,而且还可以根据需求,通过配置文件的设置,指定加密方式。而现有技术只能适配非加密报文长度字符串这一种格式。
[0040] 4.通过配置文件对Socket服务使用的线程池进行设置,能够动态的生产线程池,极大的提高了服务性能。现有技术中只能使用单线程,服务性能不好。
[0041] 5.通过配置延迟时间,对服务超时时间进行设置,能够模拟Socket服务的响应返回时间,能够模拟响应Timeout情况,模拟异常场景。而且通过配置延迟时间,使响应报文经过延迟的时间后再返回,从而可以验证上游系统对于Socket服务不能在指定时间返回的处理机制是否能够正常服务。
[0042] 6.通过配置化响应问题,注入各种错误,模拟Socket异常响应。
[0043] 7、本发明能够根据配置及固化的开发流程,新增请求和响应的处理类,快速的适配特殊的报文请求。现有技术中需要针对每一种格式报文,都要全新写一整套处理报文类和响应报文类。并且本发明能够将请求处理类和响应处理类通用的方法进行抽取,形成标准的通用处理类和通用的处理方法。在遇到特殊的不能处理的请求报文的时候,新增一个特殊请求处理类继承通用类和一个响应处理类,然后重写特定的处理方法,从而实现了标准化的开发。
[0044] 以下结合实施例的具体实施方式,对本发明的上述内容再作进一步的详细说明。但不应将此理解为本发明上述主题的范围仅限于以下的实例。在不脱离本发明上述技术思想情况下,根据本领域普通技术知识和惯用手段做出的各种替换或变更,均应包括在本发明的范围内。

附图说明

[0045] 图1为本发明模拟Socket请求的通用方法的流程图。

具体实施方式

[0046] 如图1所示本发明模拟Socket请求的通用方法,包括:
[0047] A.读取Socket服务预设定的配置文件。通过配置文件,可以配置Socket服务的各种信息,由程序自动解析生成服务,可以快速的新建Socket服务。配置文件的内容包括有:
[0048] 1.启动多少个Socket服务;
[0049] 2.每个服务的端口号及每个服务的名字;
[0050] 3.每个Socket服务对应的请求处理类名字;
[0051] 4.每个Socket服务对应的响应处理类;
[0052] 5.每个Socket服务响应的默认报文内容;
[0053] 6.每个Socket开启的线程池的线程数;
[0054] 7.每个Socket响应报文的延迟时间;
[0055] 8.每个Socket服务的请求及响应长度字符,该长度字符代表需要首先读取的信息,通过解析该信息获取真实的请求。
[0056] B.设置响应Socket请求的通用类,在所述通用类里至少包括有:解析Socket报文的方法、供外部需求使用的生成标签字典的方法、以及根据用于响应Socket服务的默认报文的内容,对响应报文进行组装的方法;
[0057] 其中,解析Socket报文的方法:
[0058] 步骤1:解析xml格式的Socket请求,遍历其中所有的标签,解析出每个标签里面的内容,生成以标签作为键、以标签内容作为值的字典表;
[0059] 步骤2:读出配置文件中配置的标签列表,通过步骤1生成的字典表,找到键名和配置文件里配置的标签一致的键,并获取该标签的字典值;
[0060] 步骤3:遍历字典表所有键名后生成一个只有配置文件里面的标签及所述字典值的新字典,并将该新字典赋给标签字典变量。
[0061] 对响应报文进行组装的方法:
[0062] 步骤1:从内存中读取所述的默认响应报文;
[0063] 步骤2:根据配置文件获取需要在默认响应报文里进行修改的标签名及对应的替换内容表达式;
[0064] 步骤3:组装响应报文:对步骤2获取的替换内容表达式进行判断,如果替换内容表达式是标签表达式(如:requestDataMap["key"]),则从经过步骤B的解析Socket报文的方法后生成的标签字典变量里获取和标签表达式中标签名相同的键对应的值,并用该值去替换默认响应报文中对应的标签值;
[0065] 如果替换内容表达式是函数表达式(如:Util.random(10)),则直接调用该函数表达式,获取返回对应的值,并用该值去替换默认响应报文中对应的标签值;
[0066] 如果替换内容表达式是字符串(如:hardCode:5111811982),则用该字符串去替换默认响应报文中对应的标签值;
[0067] 当遇到不能满足特殊Socket格式的响应需求,则继承所述的通用类,通过重写通用类中的方法实现特殊格式的Socket响应。如果遇到未设置的Socket格式时,只需重写下通用类中的处理方法就能适配新的Socket的格式,进一步提高了对不同报文格式的适配性。
[0068] 步骤4:返回经过步骤3组装后的响应报文。
[0069] C.根据配置文件,启动Socket服务,并将默认响应报文读入内存,设置每个Socket服务的线程池和每个Socket服务的延迟返回时间。预先将默认响应读入内存,避免每次返回响应的时候再去读取文件,能够极大的提高响应速度。通过使用线程池,也能够极大的提高服务性能和响应速度。
[0070] D.根据配置文件的设置,处理Socket请求报文:
[0071] D1.根据接收到的Socket请求,根据配置文件判断是属于哪一个Socket服务;
[0072] D2.启动多线程服务,将接收到的Socket报文分配相应的线程;
[0073] D3.所述线程调用配置文件中定义的响应处理类,处理接收到的报文;
[0074] D4.响应处理类根据配置文件的设置,通过所述的通用类处理Socket请求报文,在处理时根据配置文件中的响应长度配置信息,先读取请求报文的长度字符,将该长度字符根据对应的响应规则解析出实际响应长度,再根据所述的实际长度读取Socket数据流,获取真实的请求报文;解析所述真实的请求报文,将后续处理需要的信息抽取出来并保存。
[0075] E.根据配置文件的设置,对已读入内存的默认响应报文进行相应处理后,生成满足业务要求的响应信息,根据所述设置的延迟返回时间进行响应延迟,然后返回响应内容。通过设置延迟时间,可以满足异常测试的需求。