接口测试 Fake API 工具:interfake 快速入门

胡刚 · February 16, 2016 · Last by renhaitao replied at February 16, 2016 · 1655 hits

1.interfake是什么?

Interfake is a tool which allows developers of client-side applications of any platform to easily create dummy HTTP APIs to develop against.

Interfake能简便地创建虚假的HTTP API,Interfake是NodeJs开发的,是一款开源工具。

2.使用interfake

2-1.NodeJs install

安装步骤

2-2.interfake install

cd /data1/hugang
npm install interfake --save

2-3.创建虚假HTTP API

在interfake路径下(在上一步安装中会显示,我的项目路径为/data1/hugang/node_modules/interfake),新建一个js文件:my-first-interfake.js(最好以自己要模拟的接口名命名)

var Interfake = require('interfake');
var interfake = new Interfake();
interfake.get('/my-first-interfake').status(200).body({ result: 'true'});
interfake.listen(30002);

解释如下:

new Interfake(options): creates an Interfake object. 

get('/my-first-interfake'), get请求,urlmy-first-interfake

status(200) 状态码为200

body({ result: 'true'}):设置接口返回的JSON内容为{ result: 'true'}

interfake.listen(30002) 监听端口30001

执行js

node my-first-interfake.js

访问该fake接口:

curl http://10.13.1.139:30002/my-first-interfake -w %{http_code}     
{
"result": "true"
}200

2-4.部分高级用法:

1.设置请求参数

query(queryParameters):

interfake.get('/my-first-interfake?id=1').query({id:2}).status(200).body({ result: 'true'});

/my-first-interfake?id=2才生效, /my-first-interfake?id=1不生效

[root@10 tmp]# curl http://10.13.1.139:30002/my-first-interfake
Cannot GET /my-first-interfake
[root@10 tmp]#
[root@10 tmp]# curl http://10.13.1.139:30002/my-first-interfake?id=1
Cannot GET /my-first-interfake?id=1
[root@10 tmp]#
[root@10 tmp]# curl http://10.13.1.139:30002/my-first-interfake?id=2
{
"result": "true"
}[root@10 tmp]#
2.设置延时

delay(milliseconds)

有2种格式

2.1 固定时间

延迟1s

interfake.get('/my-first-interfake').status(200).body({ result: 'true'}).delay(1000);

2.2 在一定时间范围内

延迟1s-2s间

interfake.get('/my-first-interfake').status(200).body({ result: 'true'}).delay('1000..2000');
3.设置响应头信息

设置头Date 为2015

interfake.get('/my-first-interfake').status(200).body({ result: 'true'}).responseHeaders({Date: '2015'})

设置前接口返回的头信息, Date: Tue, 16 Feb 2016 06:54:41 GMT

[root@10 tmp]# curl http://10.13.1.139:30002/my-first-interfake -v
* About to connect() to 10.13.1.139 port 30002 (#0)
* Trying 10.13.1.139... connected
* Connected to 10.13.1.139 (10.13.1.139) port 30002 (#0)
> GET /my-first-interfake HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: 10.13.1.139:30002
> Accept: */*
>
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET,PUT,POST,DELETE
< Access-Control-Allow-Headers: Content-Type
< Content-Type: application/json
< Date: Tue, 16 Feb 2016 06:54:41 GMT
< Connection: keep-alive
< Content-Length: 22
<
{
"result": "true"
* Connection #0 to host 10.13.1.139 left intact
* Closing connection #0
}[root@10 tmp]#

设置头Date 为2015后,返回 Date: 2015

[root@10 tmp]# curl http://10.13.1.139:30002/my-first-interfake -v
* About to connect() to 10.13.1.139 port 30002 (#0)
* Trying 10.13.1.139... connected
* Connected to 10.13.1.139 (10.13.1.139) port 30002 (#0)
> GET /my-first-interfake HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: 10.13.1.139:30002
> Accept: */*
>
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Access-Control-Allow-Origin: *
< Access-Control-Allow-Methods: GET,PUT,POST,DELETE
< Access-Control-Allow-Headers: Content-Type
< Content-Type: application/json
< Date: 2015
< Connection: keep-alive
< Content-Length: 22
<
{
"result": "true"
* Connection #0 to host 10.13.1.139 left intact
* Closing connection #0
}
4.HTTP请求的不同方式

get|post|put|patch|delete(url)

声明为post接口

my-second-interfake.js

var Interfake = require('interfake');
var interfake = new Interfake();
interfake.post('/my-second-interfake').status(200).body({ result: 'false'})
interfake.listen(30003);

执行NodeJs

node my-second-interfake.js

只能以post方式请求接口

[root@10 tmp]# curl http://10.13.1.139:30003/my-second-interfake 
Cannot GET /my-second-interfake
[root@10 tmp]#
[root@10 tmp]#
[root@10 tmp]#
[root@10 tmp]# curl http://10.13.1.139:30003/my-second-interfake -X POST
{
"result": "false"
}
5.代理

proxy(url|options)

代理接口和原接口必须http请求方式一致

my-second-interfake.js将http请求改成与代理接口一致的get方式

interfake.get('/my-second-interfake').status(200).body({ result: 'false'}).proxy('http://10.13.1.139:30002/my-first-interfake')

返回的结果是调用http://10.13.1.139:30002/my-first-interfake的结果

curl http://10.13.1.139:30003/my-second-interfake
{
"result": "true"
}

wiki: https://github.com/basicallydan/interfake

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 4 条回复 时间 点赞

想问下有能与抓包工具结合的 fake 工具不?

找了几个,基本都需要从0写 fake 接口和内容。现在项目里面的接口内容用的是 struct 字节流,有时候模拟接口信息需要用到 fake server ,手写的话不够方便。现在在想有没有能和抓包工具结合的 fake 工具,可以在收到指定包时返回 fake 数据。

#1楼 @chenhengjie123 好像有个叫mock server的工具 能满足这个需求。记得是在fiddle基础上写的。

#2楼 @zhangzhao_lenovo 好,回头看看。感谢~

赞! 学习一下

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up