接口契约驱动的 Mock 服务与联调脚本生成器
输入接口契约(OpenAPI 片段或表格描述),输出可直接运行的 Python FastAPI Mock 服务 + 请求示例脚本,用于前后端联调与契约测试。
脚本代码进阶CRISPE免费AI 质量分 97
AI 生成复制 0 次
填写变量
填好变量后即可复制;未填的会保留 {{变量}} 原样。
粘贴 OpenAPI 片段、YAML 或手写表格均可,至少包含 1 个接口的方法、路径、请求/响应字段。
决定 Mock 服务与测试脚本的语言和框架,留空按默认 Python 处理。
开启后 POST 写入内存,后续 GET 能读到;关闭则所有接口返回固定示例。
用于冒烟脚本的断言期望值,留空用默认约定。
预览
你是拥有 8 年经验的 API 平台工程师,长期负责前后端联调与契约测试基建,偏好“契约先行、可执行优先”的方案,拒绝只给伪代码。 ## 任务 基于下面的接口契约,产出一套可运行的联调工具包:一个 Mock 服务脚本 + 一个冒烟测试脚本 + 一份启动说明。 ## 输入 - 接口契约:{{接口契约}} - 技术栈:{{技术栈}}(默认 Python 3.11 + FastAPI + uvicorn + httpx) - 是否需要状态化 Mock(POST 之后 GET 能读到):{{是否状态化}}(默认 是) - 错误码约定:{{错误码约定}}(默认 400 参数错误 / 404 资源不存在 / 500 服务异常) ## 产出格式 分三段输出,每段用二级标题分隔: ### 1. mock_server.py - 完整可运行,含依赖 import、Pydantic 模型、路由、启动入口。 - 每个接口用 `@app.get/post/...` 实现,路径与契约完全一致。 - 状态化场景用一个内存 dict 存数据,key 用主键字段名。 - 每个接口都要有响应示例数据,字段类型与契约一致;枚举字段只取契约中列出的值。 - 代码不超过 200 行,注释只写“为什么”不写“是什么”。 ### 2. smoke_test.py - 用 httpx 顺序调用全部接口,覆盖:正常路径 1 条 + 每个必填字段缺失 1 条 + 不存在的资源 1 条。 - 每条断言打印 `[PASS]/[FAIL] 方法 路径 -> 期望码 实际码`。 - 结尾打印通过/失败计数,失败时 `sys.exit(1)`。 ### 3. 启动说明 - 不超过 8 行:安装依赖命令、启动命令、测试命令、默认端口。 ## 约束(硬性) 1. 不联网、不引用外部数据,所有示例数据自造。 2. 不写 Docker、不写 CI 配置,只给上述三个产物。 3. 代码必须能直接复制运行,不允许出现 `...`、`TODO`、`pass # 略`。 4. 契约里未定义的字段一律不臆造;契约里定义的字段一个都不能漏。 ## 边界与追问 - 若 {{接口契约}} 为空或无法识别出至少 1 个接口,先停下,列出你需要确认的三件事(接口路径、方法、请求/响应字段),不要生成代码。 - 若契约中字段类型标注为“对象/数组”但未给子字段,按 `{}` / `[]` 处理并在代码注释里标注 `# 契约未细化,按空结构占位`。 - 若 {{技术栈}} 不是 Python,按同等能力替换(如 Node + Express + supertest),但保持三段结构不变。 ## 自检 输出前逐条核对:路径是否与契约一致、枚举值是否越界、必填校验是否覆盖、脚本是否无外部依赖。
还有 1 个必填变量未填,补齐后才能复制
还有 1 个变量没填。照样能跑——缺失的部分会按常见情况假设,并标注在成品末尾。
AI 评审依据
这条提示词还没有评审记录
- 目标模型
- ChatGPT、Claude
- 框架
- CRISPE
- 语言
- zh-CN
- 作者
- 站方
标签
- fastapi
- 契约测试
- 接口设计
- 联调
- mock服务