身为一名程序员,HTTP我想是没有人不知道的吧,另外在大家开发过程中应该遇到过这样的问题,就是需要模拟一个HTTP报文返回,好对自己的程序进行功能测试,今天在这篇文章中跟大家分享一个自己实现的小工具--HttpSimulation,用于对模拟各种HTTP报文返回场景,有需要的可以下载使用,如果有志同道合的可以一起不断完善这个小工具。


需求描述:

开发一个简单工具,用于帮助开发、测试及相关人员进行HTTP请求的相关场景模拟需求。

 

开发功能描述:

(1)根据指定的请求参数返回相应的模拟报文,用于模拟部分场景;

(2)返回报文支持加密和不加密;

(3)返回报文支持压缩和不压缩;

(4)返回报文支持HTTP头字段设置;

(5)对单个接口支持返回多个报文,返回报文按照一定设定的占比随机返回(用于模拟有时成功,有时失败的场景);


自己实现的代码是一个maven项目,HttpSimulation项目代码已经开源到Github,项目地址如下所示:

https://github.com/andamajing/HttpSimulation


可以在Eclipse中直接导入该项目,经过构建后生成一个war包,直接部署在tomcat下启动即可,对于返回的报文需要在配置文件config.xml中进行配置,在下面给出了一个示例配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<config>
	<component id="test">
		<interface id="test">
			<encrypt>false</encrypt>
			<encryptmode>des</encryptmode>
			<encryptkey>123456</encryptkey>
			<compress>false</compress>
			<compressmode>gzip</compressmode>
			<response rate="50,50" cachable="true">
				<headers>
					<header>
						<name>Content-Type</name>
						<value>application/json</value>
					</header>
				</headers>
				<responsetags>
					<responsetag>*/simulation1.txt</responsetag>
					<responsetag>*/simulation2.txt</responsetag>
				</responsetags>
			</response>
		</interface>
	</component>
</config>



上面配置说明:用于配置test组件的test接口调用时随机返回simulation1.txt和simulation2.txt文件中配置的报文,返回报文随机,占比约50%:50%。


 

参数字段说明:

字段名称

上级字段

字段含义描述

数量要求

节点属性

备注

config

配置上下文

1

顶级节点

 

component

config

单个组件配置

+

子节点

含有属性id

interface

component

单个接口配置

+

子节点

含有属性id,用于唯一标识一个接口,相同组件下的接口id要确保唯一;

encrypt

interface

是否加密

1

子节点

 

encryptmode

interface

加密算法

0/1

子节点

目前仅支持DES加密;在启用加密情况下需要设置该值;

encryptkey

interface

加密秘钥

0/1

子节点

在启用加密情况下需要设置该值;

compress

interface

是否压缩

1

子节点

 

compressmode

interface

压缩算法

0/1

子节点

目前仅支持GZIP压缩;

response

interface

返回报文配置

1

子节点

用于配置模拟返回包

rate

response

返回包的返回占比

0/1

属性节点

默认100,如果有多个返回包

cachable

response

返回的报文是否缓存在内存

0/1

属性节点

默认true,如果报文文件在服务使用过程中有修改需求,需设置成false,表示读取最新的文件内容。

headers

response

返回头设置

*

子节点

 

header

headers

单个返回头

*

子节点

 

name

header

返回头名称

1

子节点

 

value

header

返回头名对应的值

1

子节点

 

responsetags

response

返回包文件位置配置

1

子节点

 

responsetag

responsetags

单个返回包配置

+

子节点

必须配置绝对地址,否则无法正确访问文件;



使用说明:

 

请求地址:****/simulation/test?componentid=*&interfaceid=*

 

示例:

http://localhost:8081/simulation/test?componentid=test&interfaceid=test

 

返回包:

{
"resultcode":"200",
"reason":"Return Successd!",
"result":{
    "province":"浙江",
    "city":"杭州",
    "areacode":"0571",
    "zip":"310000",
    "company":"中国移动",
    "card":"移动动感地带卡"
}
}

 

(备注:上面simulation1.txt和simulation2.txt文件中保存的都是如上json字符串。)