简历项目:基于 LLM 的 Agent 接口自动化测试框架设计(自研效能工具)
作者:周令杰 | 技术栈:Python / DeepSeek API / Pytest / MySQL / Prompt Engineering
传统接口测试中,人工设计用例耗时长、边界场景易遗漏、测试数据构造繁琐。
本框架通过 LLM + Prompt Engineering 自动生成用例,经 数据清洗引擎 转为 YAML,再由 Pytest 数据驱动 执行接口请求与 MySQL 落库强一致性断言,实现全链路闭环。
效能收益:单接口从「读文档 → 写用例 → 造数据 → 写脚本 → 查库」约 2h,缩短至 Agent 一键流程约 1.2h,提效约 40%。
docs/order_api.md
│
▼
prompt_template.py ──► 角色扮演 + CoT Prompt
│
▼
llm_engine.py ──► DeepSeek API 交互层
│
▼
data_cleaner.py ──► 正则提取 JSON → 字段规范化 → YAML
│
▼
test_data.yaml
│
▼
test_execution.py ──► Pytest @parametrize 数据驱动
│ requests POST 被测接口
▼
db_util.py ──► MySQL 落库 status 断言(SUCCESS)
Agent 编排入口:agent_runner.py 串联 Step1 生成 → Step2 健康检查 → Step3 自动化执行。
| 文件 | 职责 |
|---|---|
agent_runner.py |
Agent 主入口,全链路编排 |
llm_engine.py |
DeepSeek API 调用 + Mock 离线模式 |
prompt_template.py |
Prompt 模板集中管理 |
data_cleaner.py |
数据清洗引擎(正则/JSON/YAML) |
mock_server.py |
电商下单 Mock 被测服务 |
test_execution.py |
Pytest 执行 + setup/teardown 环境隔离 |
db_util.py |
MySQL 连接/查询/清理 |
config.py |
统一配置(环境变量) |
docs/order_api.md |
接口文档(LLM 输入) |
sql/init_db.sql |
数据库初始化 |
Jenkinsfile |
CI/CD 流水线示例 |
pip install -r requirements.txt你的电脑已安装 MySQL 8.0 且服务 MySQL80 正在运行,不需要 Docker。
PowerShell 初始化数据库:
cd D:\AIproject\LLM-AutoTest-Agent
.\setup_db.ps1
# 按提示输入你安装 MySQL 时设置的 root 密码或手动执行:
& "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -u root -p < sql\init_db.sql设置项目使用的数据库密码(与 config.py / db_util.py 一致):
$env:DB_PASSWORD = "你的MySQL密码"未安装 Docker 时会出现 docker-compose 无法识别,请先安装 Docker Desktop for Windows,然后使用:
docker compose up -d新版 Docker 命令是
docker compose(有空格),不是docker-compose。
python mock_server.pypython agent_runner.py --mock-llmset DEEPSEEK_API_KEY=sk-xxx
python agent_runner.pypython agent_runner.py --mock-llm --parallelYAML 更适合测试同学阅读与 Git Diff;Pytest 生态对 YAML 数据驱动更友好,且与 CI 配置风格一致。
- Prompt 强制纯 JSON 输出
data_cleaner.py正则兜底提取normalize_test_cases()统一字段- 提供
--mock离线模式保证演示稳定性
HTTP 200 只代表接口层成功,无法保证数据真正写入 DB。通过 get_order_status(order_id) 做 端到端强一致性校验,能发现「接口成功但落库失败」类严重缺陷。
agent_runner.py 按 Agent 工作流编排:感知(读 API 文档)→ 推理(LLM 生成)→ 行动(清洗+执行+断言)→ 反馈(Pytest 报告),而非单一脚本。
| 环节 | 传统人工 | 本框架 |
|---|---|---|
| 读文档+设计用例 | ~60min | ~5min(LLM) |
| 构造测试数据 | ~30min | 自动(YAML) |
| 编写 Pytest 脚本 | ~30min | 框架复用 |
| 合计 | ~120min | ~72min |
| 变量 | 默认值 | 说明 |
|---|---|---|
DEEPSEEK_API_KEY |
- | DeepSeek API 密钥 |
DB_HOST |
127.0.0.1 | MySQL 主机 |
DB_USER |
root | 数据库用户 |
DB_PASSWORD |
root | 数据库密码 |
DB_NAME |
test_order | 数据库名 |
MOCK_PORT |
5000 | Mock 服务端口 |
| 简历描述 | 代码落点 |
|---|---|
| DeepSeek API 交互层 | llm_engine.py |
| 角色扮演 + CoT Prompt | prompt_template.py |
| 正则 + JSON/YAML 清洗 | data_cleaner.py |
| Requests + Pytest 驱动 | test_execution.py |
| MySQL 落库断言 | db_util.py |
| 全链路闭环 | agent_runner.py |
| CI/CD | Jenkinsfile |