背景说明
有时在调测前端,或者想要测试验证前端对于后端异常的兼容性时,如果直接让后端模拟异常返回可能比较麻烦,此时,一种mock后端返回的方案将有助于快速调测。
网上也有不少相关的方案,比如通过Charles断点也可以修改后端接口的响应报文,但是如果前端设置了超时时长,那么有可能还没来得及修改响应报文,前端就已经因超时而失败了。当然,网上也有一些其他的类似Chrome插件的方式,我目前还没有试用过,如果其他同学有好的分享,也欢迎留言。
本次记录的Nginx+postman的方案,虽然配置有些复杂,但是一旦配置完成,使用起来还是非常方便的。该方案的示意图如下。
接下来详细介绍配置过程。
postman mock服务端接口
postman mock服务端接口的方式比较多,也可以参考前面的文章:
postman mock接口返回,这里只简要记录常见的一种,操作过程如下所示:
- 第一步:在postman主控制面板点击New按钮,然后选择“Mock Server”
- 第二步:设置mock接口的方法、访问路径、返回码和响应报文,然后点击Next
- 第三步:设置Mock Server名称,[可选]设置环境,然后点击“Create Mock Server”
- 第四步:点击“Copy Mock URL”复制出mock url(这是访问mock接口url前缀,也可以在collections详情中查看)
- 第五步:然后就可以拼接mock url和第二步设置的访问路径来发送请求检查mock结果了
设置了mock server之后,可能最常用的操作就是修改mock接口的返回报文,可以这样操作:
- 第一步:在mock server下选择想要修改返回报文的request
- 第二步:选择Examples中的default(或者新建一个Example也行)
- 第三步:修改Example中的响应报文并Save Example
之后再访问mock接口,看到的就是新的响应报文了
本地安装和配置Nginx
安装Nginx
安装Nginx比较简单,这里只记录Mac下的安装:
brew install nginx
生成自签证书
如果后端接口是http请求,那么这一步可以省略;
如果是https请求,那么就需要生成和配置证书
- 第一步:进入Nginx目录,并新建一个目录存放证书相关信息
cd /usr/local/etc/nginx
mkdir ssl
cd ssl
- 第二步:创建服务器私钥
openssl genrsa -out server.key 1024
- 第三步:生成证书申请
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
- 第四步:生成签署文件
openssl x509 -req -in server.csr -out server.crt -signkey server.key -days 3650
配置Nginx
进入Nginx config目录,配置nginx.conf
cd /usr/local/etc/nginx
vim nginx.conf
- http接口可以在server下面这样配置:
listen 8080;
server_name www.xx.com; # 后端服务的域名
#charset koi8-r;
#access_log logs/host.access.log main;
location / { # 要转发的请求的路径
root html;
index index.html index.htm;
proxy_pass http://315049fd-d7a2-4fff-ab56-48f4c73bbab0.mock.pstmn.io/test-mock; # postman mock接口连接
}
- https接口可以在server下面这样配置:
listen 443 ssl;
server_name www.xx.com; # 后端服务的域名
ssl_certificate /usr/local/etc/nginx/ssl/server.crt;
ssl_certificate_key /usr/local/etc/nginx/ssl/server.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /yyy {
root html;
index index.html index.htm;
proxy_pass http://315049fd-d7a2-4fff-ab56-48f4c73bbab0.mock.pstmn.io/test-mock; # postman mock接口连
}
配置之后保存
启动Nginx
进入Nginx bin目录,启动Nginx。(Mac上安装之后可以直接在命令行输入nginx启动)
nginx
本地配置host
编辑hosts文件,新增一行配置,从而将本地到服务端接口的请求转发到nginx上,然后再由nginx转发请求到postman mock server。
vim /etc/hosts
新增一行并保存
# www.xx.com为服务端域名
127.0.0.1 www.xx.com
调试访问
在postman中调测
在postman中新建一个request,然后输入后端接口地址,模拟请求发送。此时可能会遇到下面的报错:“Error: self signed certificate”。
这时,可以在postman主控制面板,点击Postman > Preference打开postman设置界面,将General tab下面的“SSL certificate verification”设置为“OFF”
然后重新发送请求,检查是否为postman mock server的返回。
在浏览器中调测
浏览器直接访问前端时,可能会遇到上面一样的问题。后端接口报“net: ERR_CERT_INVALID”。
这时,可以直接在前端页面上输入“thisisunsafe”
或者浏览器新打开一个tab,访问服务端接口地址,然后会展示如下提示“您的连接不是私密连接”,然后同样的在该页面输入“thisisunsafe”
该问题的其他解决办法可以参考这位同学的总结:
https://segmentfault.com/a/1190000021843971