Doo 是一款简单易用的接口管理解决方案,支持接口文档管理、Mock 服务,接口测试等功能。Doo 接口文档采用 yaml 或 Excel 格式书写,简单快捷,Mock 基于该文档,无需数据库,一条命令秒变 Mock 服务。
看到上面的像素 logo,我想大家应该可以猜到,这是 Sweetest 的姊妹项目,所以 QQ 交流群和微信公众号合并到 Sweetest ,欢迎加入:
微信公众号:安装、配置、使用的详细图文说明,最新版本发布更新说明
QQ 交流群:158755338 (验证码:python)
扫描公众号及QQ 群二维码加入我们
做开源不易,左上角请随手点个赞呗
pip install doo
pip install -U doo
在合适的目录,如 D:\doo 目录下,打开 CMD 命令行窗口,输入如下命令
doo
cd doo_example
python app.py
如果看到如下信息
* Restarting with stat
* Debugger is active!
* Debugger PIN: 248-052-080
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
OK,Mock 已经启动起来了。
运行指定的接口文档 (如: example.xlsx),直接带上文件名即可,执行命令如下:
python app.py example.xlsx
doo_example 目录下的 doo.postman_collection.json 为 Postman 用例集
把该文件导入到 Postman 即可对 Mock 进行验证。
备注:collection 格式为比较新的 2.1 版本,请尽量把 Postman 升级到最新版本。
example.yml
--- # 通用描述
Title: Example 接口文档
Description: ''
Version: '1.0'
BasePath: http://example.com
REQUEST_Headers:
Content-Type: application/json
RESPONSE_Headers:
Content-Type: application/json
--- # 接口描述
Name: LOGIN
Desc: 账号登录
Path: /api/authentication/login
Method: POST
GROUP: USER
Auth: None
REQUEST:
Headers:
Content-Type: application/json
Body:
# 参数名: [类型, 是否必传, 中文名称, 备注]
account: [string, Y, 用户名, 手机号/邮箱]
password: [string,Y, 密码, 6~12位数字字母组合]
RESPONSE:
Headers:
Content-Type: application/json
Body:
# json 支持多层嵌套
Body: {code: [string, Y, 错误码, 报文里的错误码], message: [string, Y, 提示信息, 出错时信息]}
nickname: [string, N, 昵称, 用户昵称]
# 以下为 Mock 测试数据,根据需要填写
DATA1:
REQUEST:
account: admin
password: '123456'
RESPONSE:
code: '0'
message: success
nickname: admin
status_code: 200 #可选,默认为 200
delay: 0.5 #可选,默认为 0
remark: admin 账户登录 #可选,默认为 ''
example.xlsx
目前采用 Excel 来书写接口文档,其中 INDEX 是基本信息页,提供如下信息:
Field | Value |
---|---|
Title | EOMS 接口文档 |
Description | |
Version | 1.0 |
BasePath | http://example.com |
注:此网址为虚构,仅作示例
也可以提供全局请求和响应的 Headers
请求 Headers | 参数名 | 测试数据 |
---|---|---|
Content-Type | application/x-www-form-urlencoded | |
响应 Headers | ||
Content-Type | application/json |
除了 INDEX 页面外,其他页面为接口页面。一个接口页面为一组,可以有多个接口页面。
在每个接口页面,需要填写的信息如下:
字段 | 值 |
---|---|
名称 | 登录 |
描述 | 账号登录接口 |
接口地址 | /api/authentication/login |
方法 | POST |
权限 | None |
请求 | 参数名 | 中文名称 | 类型 | 是否必传 | 备注 | 测试数据 |
---|---|---|---|---|---|---|
account | 用户名 | string | Y | admin | ||
password | 密码 | string | Y | 123456 | ||
响应 | 200 | |||||
Body | 报文 Body | json | Y | json 格式 | {"code: "0", "message":"success"} | |
nickname | 昵称 | string | N | 用户昵称 | admin | |
响应延时 | 0.5 | |||||
测试数据备注 | 正常场景 |
$ python app.py
Traceback (most recent call last):
File "d:\ASUS\Downloads\doo_example\app.py", line 3, in
from doo.mock import app, extra_files
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\mock.py", line 107, in
doc, extra_files = get_doc()
^
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\data.py", line 255, in get_doc
doc = y.get_data()
^
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\data.py", line 193, in get_data
y = yaml.load_all(cont)
TypeError: load_all() missing 1 required positional argument: 'Loader'
怎么解决呢
$ python app.py
Traceback (most recent call last):
File "d:\ASUS\Downloads\doo_example\app.py", line 3, in
from doo.mock import app, extra_files
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\mock.py", line 107, in
doc, extra_files = get_doc()
^
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\data.py", line 255, in get_doc
doc = y.get_data()
^
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\data.py", line 193, in get_data
y = yaml.load_all(cont)
TypeError: load_all() missing 1 required positional argument: 'Loader'
$ python app.py
Traceback (most recent call last):
File "d:\ASUS\Downloads\doo_example\app.py", line 3, in
from doo.mock import app, extra_files
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\mock.py", line 107, in
doc, extra_files = get_doc()
^
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\data.py", line 255, in get_doc
doc = y.get_data()
^
File "D:\ProgramFiles\Python312\Lib\site-packages\doo\data.py", line 193, in get_data
y = yaml.load_all(cont)
TypeError: load_all() missing 1 required positional argument: 'Loader'
文档 404 了
1234
1234
好用,期待哪一天接口定制可以从 excel 和 yml 换成界面录入之类的,会好用的多,点个赞
查明原因了,apistar 框架做了一些分离,apistar 独立为 api 工具(没有 Web 服务了),至于 Web 服务框架,作者重新做了一个 Starlette。
总之,0.6.0 及之后的版本无法正常使用,我已经在 pip 安装包指定 apistar <0.6.0,初次安装 Doo 的不会出问题,如果 apistar 已经是 0.6.0,需要降级,命令:
@wjq apistar 升级到 0.6.0 出现了这个问题,我最近会研究一下是啥情况
Traceback (most recent call last):
File "app.py", line 1, in
from doo.mock import app
File "D:\Python36\lib\site-packages\doo\mock.py", line 1, in
from apistar import Route, Include, http
ImportError: cannot import name 'Route'
提示这个是什么原因