API 测试工程师的工作时常面临挑战——接口频繁变更、端点不断增加、状态码持续更新,测试用例的同步维护如同追逐移动靶心。
若仅关注任务看板,极易迷失在变更内容的追踪中,难以准确识别待测试项目。
在笔者参与的项目中,API 均配备 Swagger 文档。这引发了一个思考:既然有 Swagger 规范,何不借助 AI 技术自动生成测试用例来提升效率?
基于此构想,我们开发了自动化测试生成工具。本文将系统介绍实现方案、技术挑战以及后续扩展方向。
核心设计理念方案目标明确:解析 Swagger 规范并提取关键信息要素:
- HTTP 请求方法
- 预期状态码
- 查询参数
- 请求体结构
进而自动生成正向与异常测试场景。
以典型 GET /users/{id} 接口为例,期望生成以下测试用例:
GET /users/{id}
✔ 场景:使用有效 ID 获取用户信息
✔ 场景:验证用户不存在时的 404 响应
✘ 场景:缺失 ID 参数
✘ 场景:ID 参数格式非法
通过预定义模板规范,利用 AI 基于 Swagger 接口规范智能生成测试场景。
技术架构详解技术选型
- Python - 高效的数据解析与集成能力
- Rich / Typer - 美观易用的命令行界面
- Gemini AI - 便捷的 AI 服务集成
- dotenv - 环境变量安全管理
项目结构
api-test-generator/
├── README.md # 项目说明文档
├── requirements.txt # Python 依赖清单
├── main.py # 主程序入口
│
├── output/ # 测试用例输出目录
│ ├── get_Books.txt
│ ├── post_Books.txt
│
├── functions/ # 核心功能模块
│ ├── navigation.py # 命令行导航逻辑
│ ├── read_swagger.py # Swagger 文档解析
│ └── test_generator.py # 测试用例生成引擎
│
└── assets/ # 资源配置文件
├── swaggerexample.json
└── theme.py
工作流程
┌──────────────────────────────┐
│ 用户交互层 │
│ (命令行界面 - Rich 渲染) │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ 命令行接口层 │
│ (Typer + Rich 组件) │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Swagger 文档加载层 │
│ - URL/手动输入/本地文件 │
│ - 格式验证与数据解析 │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ API 规范解析层 │
│ - 接口路径提取 │
│ - 请求方法识别 │
│ - 参数结构分析 │
│ - 响应模型映射 │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ AI 服务集成层 │
│ (测试场景生成) │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ 输出生成层 │
│ - 文本格式导出 │
│ - 场景结构化组织 │
└──────────────────────────────┘
核心执行流程:用户通过命令行界面交互 → 加载 Swagger 规范 → 解析接口定义 → 构建 AI 提示词 → 调用生成服务 → 输出测试用例 → 持久化存储
关键技术实现测试生成引擎
核心在于从 Swagger 规范提取完整信息,为 AI 生成提供充分上下文。关键函数实现:
def test_generator(path, method, swagger_data):
print(f"为 {method.upper()} {path} 生成测试用例...")
details = swagger_data["paths"][path][method]
request_body = ""
parameters = ""
# 获取接口基本信息
if 'tags' not in details:
endpoint_name = path
elif len(details['tags']) == 0:
endpoint_name = path
else:
endpoint_name = details['tags'][0]
if 'requestBody' in details:
request_body = details['requestBody']
if 'parameters' in details:
parameters = details['parameters']
prompt = (f"为接口 {path} 的 {method.upper()} 方法生成正向与异常测试场景"
f"参考以下规范信息:"
f"接口名称:{endpoint_name}"
f"请求体结构:{request_body}"
f"查询参数:{parameters},请按模板生成:{theme.PROMPT_TEMPLATE}")
test_scenario = ai_connection(prompt)
print(f"导出测试用例至文件...")
export_to_file(test_scenario, method, endpoint_name)
AI 服务集成
Gemini AI 集成方案简洁高效:
def ai_connection(prompt):
load_dotenv()
api_key = os.getenv("GOOGLE_API_KEY")
client = genai.Client(api_key=api_key)
response = client.models.generate_content(
model="gemini-2.5-flash",
contents=prompt
)
return response.text
生成结果示例:
POST /api/v1/Books
✔ 场景:全部字段有效时成功创建新书籍
✔ 场景:仅必填字段完整时成功创建书籍
✔ 场景:使用特定内容类型成功创建书籍
✘ 场景:缺失标题字段导致创建失败
✘ 场景:作者信息为空时处理异常
✘ 场景:ISBN 重复冲突检测
✘ 场景:出版物年份格式验证
✘ 场景:请求体结构完整性检查
实施挑战与经验
主要技术难点在于 Swagger 数据清洗 与 AI 提示词工程优化。命令行工作流的设计需平衡功能性与用户体验。通过本项目,我们深入掌握了 AI 辅助测试的技术要点。
扩展应用场景基于现有架构,可进一步拓展以下方向:
- 自动生成 Postman 集合文件
- 集成主流测试管理平台(如 Zephyr、Xray)
- 构建监控服务实现接口变更的自动测试更新
本方案验证了 AI 技术与 OpenAPI 规范结合在测试自动化领域的价值。
传统手动编写大量测试用例的模式转变为分钟级自动生成正异常场景的高效流程。
后续可探索 CI/CD 流水线集成、测试管理平台对接等深度应用方向,进一步提升 API 测试的智能化水平。
本项目代码已在 GitHub 开源,开发者可基于此架构进一步扩展功能。