大家如果遇到过本地调试需要请求生产环境的接口,一般会怎么做呢,是把测试搬到生产环境做还是直接不去请求这个接口呢?
为了尽可能在本地跑起生产环境的服务,并且尽量不改代码,某些场景下,可能 mock 一下线上的接口,可能会更方便。当然前提是这些接口是不得不请求,但是又对实际结果用处不大的那种类型的接口了。
本文介绍一个很简单的 mock 接口的方法,mock 完写个 Dockerfile 就可以发布到本地或者发布到 TKE/TKEx 了。
➜ tmp cat server.sh
#!/usr/bin/env bash
JSON={\"version\":\"4.0\",\"timestamp\":\"1623816698591\",\"eventId\":\"38494\",\"componentName\":\"SWOOLE_WTAG\",\"returnValue\":0,\"returnCode\":0,\"codeDesc\":\"success\",\"returnMessage\":\"ok\",\"interface\":\"qcloud.tag.addResourceProjectTag\",\"data\":[]}
RESPONSE="HTTP/1.1 200 OK\r\nConnection: keep-alive\r\n\r\n${2:-$JSON}\r\n"
while { echo -en "$RESPONSE"; } | nc -l "${1:-8081}"; do
echo "================================================"
done
JSON
恒返回相同的值,这里是有点不那么聪明,不过对于意义不大的线上接口,如果不想改代码,这个 mock 是相对比较好的方案了。
顺便提供一下 Dockerfile。
FROM centos:7
RUN yum install nc -y
ADD . .
ENTRYPOINT ["bash", "tag_server.sh"]
效果图如下,就是这么简单粗暴。