在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
djmockserver介绍本程序是基于django开发的mock server, 用于构造动态的复杂的mock响应. 在我另外的项目<BTest接口测试平台>中使用开源工具moco作为mock服务. 然而, moco对于实际应用中构造复杂动态的响应的需求, 似乎并没有很好的满足, 需要二次开发定制. 为了满足项目需要,就简单的开发了此程序. 虽然简单, 但也实用. 对照moco的用法, 本程序也使用json文件来管理mock数据, 并可以使用多层目录来管理文件. 支持http/https. 特性说明
软件架构安装教程下面提供两种方式:
Dockerfile构建部署
如正常,应该是如下输出:[root@zrb mockserver]# docker build -t mockserver .Sending build context to Docker daemon 3.584kBStep 1/8 : FROM scuzrb/py3_dev:v1.0 ---> 0917af555736......Step 8/8 : CMD ["uwsgi", "--ini", "uwsgi.ini"] ---> Running in 9d15e79bbc3cRemoving intermediate container 9d15e79bbc3c ---> 4920fa944331Successfully built 4920fa944331Successfully tagged mockserver:latest[root@zrb mockserver]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmockserver latest 4920fa944331 16 seconds ago 526MBscuzrb/py3_dev v1.0 0917af555736 10 days ago 489MB[root@zrb mockserver]# docker run -d --name=ms1 --restart=always -p 9000:80 mockserver70054e2903fdad702407c2e16590b414b4cf6760729fcb281b12668a6aac8907[root@rabbit-api-001 mockserver]# [root@zrb mockserver]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES70054e2903fd mockserver "uwsgi --ini uwsgi.i…" 9 seconds ago Up 8 seconds 0.0.0.0:9000->80/tcp ms1
开发环境部署
#必填 mock数据文件路径,可以是单个文件,或文件夹MOCK_FILE_PATH = os.path.join(BASE_DIR, 'djmockserver', 'mockdata')# MOCK_FILE_PATH = os.path.join(BASE_DIR, 'mock.json')# mock数据文件刷新间隔, 单位:秒REFRESH_INTERVAL = 2# 选填 设置后,mock在匹配请求失败时,会把请求转发到此地址, 否则返回404# REMOTE_HOST = 'http://127.0.0.1:8000'# 选填 设置函数白名单列表ADD_FUNC = ['len', 'str']
使用说明Mock文件字段1. request 支持的字段 (参考 RequestSerializer 类)
2. response 支持的字段 (参考 ResponseMaker 类)
Mock文件格式与moco格式一致, 以列表套字典的形式编写, 具体字段参考上面说明 [ { "description": "", "request": {}, "response": {} }, { "description": "", "request": {}, "response": {} }] 可以多个文件保存多个URI响应列表(此时应该配置MOCK_FILE_PATH为文件所在目录) 构造动态响应只要是符合python语法的字串表达式,且在白名单(变量函数)中,均可执行. 1. 变量
2. 响应
3. mock配置样例
提取请求配合函数collection_get和变量req, 可以提取请求数据, 处理后作为响应内容返回. 请求转发主要是开发同学会用得上. 考虑到在实际开发中, host都是一处配置全局使用, 和uri分离. 而大多数的接口都有前置接口, 有上下文关系. 这时要使用mock,要么把全局host配置为mock地址而前置接口也mock掉,要么在被mock接口代码增加局部host(mock地址). 很明显两种方式都不好.这种情况下转发请求就比前面的更合适. 只需配置全局host为mock地址,并在本程序settings.py文件中配置转发地址即可.只要是未mock的请求都会转发. TODO
最后代码设计地不够优雅, 还有很多地方有待斟酌, 基本满足工作. |
请发表评论