当前位置: 代码迷 >> 综合 >> 【Mock】mock server
  详细解决方案

【Mock】mock server

热度:57   发布时间:2023-12-17 01:34:39.0

为什么要mock

1、已开发完成的模块方法依赖于未开发完成的模块,测试提前介入。
2、模拟服务端返回的一些异常数据。
3、上游接口压测时需要下游接口及时返回数据,满足上游接口的调用频度,依赖接口多时减轻工作量。

什么是mock

使用各种技术手段模拟出各种需要的资源以供测试使用。

什么时候用

适用于接口测试和性能测试,mock一个server,构造一个假的服务返回预期的结果,与代码程序使用的语言无关。

例如:
客户端A 调用 被测系统B,被测系统B依赖外部服务a,b,c,此时,如果依赖服务a,b,c中的任何一个未被开发完,该如何进行测试呢?

解决方案:
在被测系统中加一个mock服务,让mock服务来临时模拟依赖服务a,b,c

如何使用

1、安装并配置jdk环境变量(https://blog.csdn.net/q_Catherine/article/details/89199256 )
2、上传moco-runner-<版本号>-standalone.jar到linux指定目录
3、创建json文件放到2中指定目录
4、执行命令:java -jar moco-runner-<版本号>-standalone.jar http -p port -c xxx.json

具体适用场景

4中的json可以是哪几种类型呢?
1、get请求不传参

[{"request":{"uri":"请求地址"},"response":{"text":"返回值"}}
]

2、get请求传参,格式是key=value

  [{"request":{"uri":"请求地址","queries":{"param":"请求参数"}},"response":{"text":"返回值"}}]

3、get请求传参+服务器返回json数据+status值,格式是key=value

  [{"request":{"uri":"请求地址","queries":{"param":"请求参数"}},"response":{"json":{"key":"json","status":200}}}]

4、get请求传参+服务器返回值json数据+status值,格式是{“key”:“value”}

[{"request":{"uri":"请求地址","json":{"param":"请求参数"}},"response":{"json":{"key":"json","status":200}}}]

5、post请求传参+服务器返回值json数据+status值,格式是{“key”:“value”}

[{"request":{"uri":"请求地址","method":"POST","json":{"param":"参数"}},"response":{"json":{"key":"value","status":200}}}
]

6、post请求传参+服务器返回值json数据+status值,格式是key=value

[{"request":{"uri":"请求地址","method":"POST","forms":{"param":"参数"}},"response":{"json":{"key":"json","status":200}}}
]

7、post请求传参+服务器返回值json数据+status值,格式是{“key”:“value”}

[{"request":{"uri":"请求地址","method":"POST","json":{"param":"参数"}},"response":{"json":{"key":"json","status":200}}}
]

8、请求加上heaser+cookie

[{"request":{"uri":"请求地址","method":"POST","forms":{"param":"参数"},"headers":{"content-type":"application/json","connection":"keep-alive","content-encoding":"gzip"},"cookies":{"login":"true"}},"response":{"json":{"key":"json","status":200}}}
]

9、请求地址正则化

 [{"request":{"uri":{"match":"/api/XXX-\\d+\\.html"},"queries":{"param":"请求参数"}},"response":{"json":{"key":"json","status":200}}}]

10、配置文件
将1-9中单独创建的多个json文件放在config.json中,解决以上java -jar每次启动只能有1个json文件,只能处理1个接口的问题。

config.json配置:

[ { "include": "XXX1.json" }, { "include": "XXX2.json" },{ "include": "XXX3.json" },{ "include": "XXX4.json" } 
]

或者配置为(更改请求路径):

[ { "context": "/mock", "include": "XXX1.json" }, { "context": "/mock", "include": "XXX2.json" } 
]

启动命令改为:

java -jar moco-runner-<版本号>-standalone.jar start -p port -g config.json

Moco支持动态加载配置文件,修改不需要重启服务。

Moco的使用很简单,配置也很方便,目前更是提供了http、rest、socket服务。但是也仅仅是能stub出接口,模拟出简单的场景。如果接收到请求后需要做一些处理,如需查询数据库、进行运算、或者一些复杂的操作,就无能为力了。所以是否选用moco,就取决于开发者是否只是需要一个简单的模拟服务器。

  相关解决方案