前言
接口测试中,经常会拦截请求并修改服务端响应,实现接口mock功能。
如果要实现对接的第三方接口,但是并没有提供测试环境,或者服务器端未开发完成时,这时可以自行搭建mock服务器,移步:moco服务器使用
rule模块规则配置
anyproxy 官方文档https://github.com/alibaba/anyproxy/blob/master/docs/cn/src_doc.md
github源码地址下有一些例子可参考使用:rule_simple
- anyproxy实现mock功能:
--- 中间人攻击(man-in-the-middle attack)
- 拦截并修改正在发送的请求
请求头(header),请求体(body),请求参数(param)等 - 拦截并修改服务端响应
状态码(status code)、响应头(response header)、响应内容等
rule规则文件test.js
module.exports = {
// 模块介绍
summary: 'customized rule',
// 发送请求前拦截处理
*beforeSendRequest(requestDetail) {
const localResponse = {
statusCode: 200,
header: { 'Content-Type': 'application/json' },
body: '{"hello": "this is local response"}'
};
return {
response: localResponse
};
},
// 发送响应前处理
*beforeSendResponse(requestDetail, responseDetail) {
//console.log(responseDetail.response);
if (requestDetail.url === '/device/queryFirmware') {
const newResponse = responseDetail.response;
newResponse.body = '{"apiCode":"112FD559"}'; // body ,statusCode ,Header
// newResponse.header['X-Proxy-By'] = 'AnyProxy';
return new Promise((resolve, reject) => {
setTimeout(() => { // delay the response for 5s
resolve({ response: newResponse });
}, 5000);
});
}
},
// https请求
*beforeDealHttpsRequest(requestDetail) {
/* ... */
},
// 请求出错
*onError(requestDetail, error) { /* ... */ },
// https连接服务器出错
*onConnectError(requestDetail, error) { /* ... */ }
};
启动anyproxy时使用rule规则文件
anyproxy -i --rule ./test.js
每次修改规则文件后都需要重新启动
网友评论