Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

LLM Agent 接口自动化测试框架

简历项目:基于 LLM 的 Agent 接口自动化测试框架设计(自研效能工具)
作者:周令杰 | 技术栈:Python / DeepSeek API / Pytest / MySQL / Prompt Engineering

一、项目背景(面试 30 秒版)

传统接口测试中,人工设计用例耗时长、边界场景易遗漏、测试数据构造繁琐。
本框架通过 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 流水线示例

四、快速启动(面试演示)

1. 安装依赖

pip install -r requirements.txt

2. 启动 MySQL

方案 A:本地 MySQL(推荐,你当前环境已具备)

你的电脑已安装 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密码"

方案 B:Docker(需先安装 Docker Desktop)

未安装 Docker 时会出现 docker-compose 无法识别,请先安装 Docker Desktop for Windows,然后使用:

docker compose up -d

新版 Docker 命令是 docker compose(有空格),不是 docker-compose。

3. 启动 Mock 被测服务(新终端)

python mock_server.py

4. 一键跑通全链路(推荐,无需 API Key)

python agent_runner.py --mock-llm

5. 使用真实 DeepSeek API

set DEEPSEEK_API_KEY=sk-xxx
python agent_runner.py

6. 并发执行

python agent_runner.py --mock-llm --parallel

五、面试高频问答

Q1:为什么用 YAML 而不是直接用 JSON?

YAML 更适合测试同学阅读与 Git Diff;Pytest 生态对 YAML 数据驱动更友好,且与 CI 配置风格一致。

Q2:LLM 输出不稳定怎么办?

  1. Prompt 强制纯 JSON 输出
  2. data_cleaner.py 正则兜底提取
  3. normalize_test_cases() 统一字段
  4. 提供 --mock 离线模式保证演示稳定性

Q3:落库断言的价值?

HTTP 200 只代表接口层成功,无法保证数据真正写入 DB。通过 get_order_status(order_id) 做 端到端强一致性校验,能发现「接口成功但落库失败」类严重缺陷。

Q4:Agent 体现在哪里?

agent_runner.py 按 Agent 工作流编排:感知(读 API 文档)→ 推理(LLM 生成)→ 行动(清洗+执行+断言)→ 反馈(Pytest 报告),而非单一脚本。

Q5:40% 提效怎么算的?

环节 传统人工 本框架
读文档+设计用例 ~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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages