身为一名程序员,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字符串。)