Doo:接口文档及 Mock 服务

MPL
Python
Windows, Mac, Linux
tonglei · 2018年09月03日 · 20621 次阅读 · 10 条评论

Doo

Doo 是一款简单易用的接口管理解决方案,支持接口文档管理、Mock 服务,接口测试等功能。Doo 接口文档采用 yaml 或 Excel 格式书写,简单快捷,Mock 基于该文档,无需数据库,一条命令秒变 Mock 服务。

看到上面的像素 logo,我想大家应该可以猜到,这是 Sweetest 的姊妹项目,所以 QQ 交流群和微信公众号合并到 Sweetest ,欢迎加入:

微信公众号:安装、配置、使用的详细图文说明,最新版本发布更新说明

QQ 交流群:158755338 (验证码:python)

扫描公众号QQ 群二维码加入我们

Doo

🍎 做开源不易,左上角请随手点个赞呗 💟

安装

初次安装

pip install doo

升级

pip install -U doo

快速体验

Mock

在合适的目录,如 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

Postman 测试

doo_example 目录下的 doo.postman_collection.json 为 Postman 用例集

把该文件导入到 Postman 即可对 Mock 进行验证。

备注:collection 格式为比较新的 2.1 版本,请尽量把 Postman 升级到最新版本。

接口文档模板

1. yaml 模板

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 账户登录  #可选,默认为 ''

2. Excel 模板

example.xlsx

INDEX 页面

目前采用 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
测试数据备注 正常场景
评论列表
tangoliver 发表于 2024年01月23日

$ 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'
怎么解决呢

tangoliver 发表于 2024年01月23日

$ 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'

tangoliver 发表于 2024年01月23日

$ 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'

迷龙 发表于 2021年09月23日

文档 404 了

心意已决 发表于 2020年11月25日

1234

心意已决 发表于 2020年11月25日

1234

RhettXia 发表于 2019年11月20日

好用,期待哪一天接口定制可以从 excel 和 yml 换成界面录入之类的,会好用的多,点个赞

tonglei 发表于 2018年10月08日

查明原因了,apistar 框架做了一些分离,apistar 独立为 api 工具(没有 Web 服务了),至于 Web 服务框架,作者重新做了一个 Starlette。

总之,0.6.0 及之后的版本无法正常使用,我已经在 pip 安装包指定 apistar <0.6.0,初次安装 Doo 的不会出问题,如果 apistar 已经是 0.6.0,需要降级,命令:

pip install -U apistar==0.5.41
tonglei 发表于 2018年10月08日

@wjq apistar 升级到 0.6.0 出现了这个问题,我最近会研究一下是啥情况

章倩 发表于 2018年09月28日

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'
提示这个是什么原因