RAG加Text2SQL:自动生成接口测试脚本的完整流水线

一、问题:接口测试脚本的三要素缺口

一个完整的接口测试用例由三部分组成:输入参数、测试步骤、预期结果。

纯提示词工程可以解决"测试步骤"的生成------把 Controller 层代码输入给大模型,让它生成 JMeter 或 pytest 脚本骨架。但输入参数和预期结果依赖被测系统的私域知识(数据库数据、业务约束),大模型无法凭空生成。

解决方案是两步走:用 RAG 从 Swagger 文档生成测试脚本骨架,用 Text2SQL 从数据库动态生成测试数据。


二、提示词工程生成测试步骤

第一步先用提示词工程生成脚本骨架。系统提示词的设计思路:

  • 角色设定:资深测试开发专家,精通 SpringBoot/Spring Cloud 微服务架构和 JMeter 5.3
  • 输入:用户粘贴 Controller 层的 API 函数代码
  • 输出:逐个 API 生成 JMeter 5.3 格式的 .jmx 脚本

提示词用伪代码结构组织,从 main 函数开始,明确调用关系:分析Controller的API → 逐个调用 developJMeter5_3脚本 → 返回脚本列表。

适用场景:推荐在 IDE 中使用(如 Cursor、VS Code + Cline),可以直接选中源代码作为输入,避免手动复制粘贴。

这一步只解决了测试步骤,输入参数和预期结果仍需补齐。


三、RAG 从 Swagger 生成 pytest 骨架

Swagger JSON 文件包含了接口的完整定义(路径、方法、参数、响应结构),是生成接口测试脚本的理想知识源。

实现方案(基于 LlamaIndex)

  1. 下载 Swagger JSON 文件到本地
  2. JSONNodeParser 将 JSON 解析为 Node 对象(每个 Node 代表一个文档 Chunk)
  3. 构建 VectorStoreIndex,使用 BM25 检索器(BM25Retriever
  4. 组装 RetrieverQueryEngine,注入提示词模板
  5. 用户输入自然语言描述(如"生成用户登录接口的测试脚本"),引擎返回 pytest 代码

提示词模板的关键约束:

复制代码
Your answer must be a Python markdown only.
Assert response code and the response json's length.
param_list does not reference other variables.
param_list's length is 1.

这一步生成的 pytest 脚本包含参数化占位符(param_list),参数值尚未填充。


四、Text2SQL 从数据库生成测试数据

Text2SQL 将自然语言转换为 SQL 查询,直接从数据库获取真实数据填充测试参数。

三种查询引擎模式QueryEngineType):

模式 原理 适用场景
DEFAULT 建立数据库向量索引,直接映射自然语言到 SQL 数据库结构清晰、查询意图明确
QUERYTIME 查询时动态选择表格,不依赖预定义模式 用户不熟悉数据库结构,查询需求不固定
RETRIVER 基于检索匹配已有 SQL 模板 查询模式固定、需要快速响应

实现基于 LlamaIndex 的 NLSQLTableQueryEngine(DEFAULT 模式)或 SQLTableRetrieverQueryEngine(QUERYTIME 模式),底层 LLM 和 Embedding 模型通过 Ollama 本地运行。

Text2SQL 的提示词模板约束大模型只生成数据,不生成 SQL:

复制代码
Your goal is designed the api test code's param to answer queries.
Your only generate data.
Your answer must be a json markdown only, don't answer sql.

五、完整流水线

三步串联,形成端到端的接口测试脚本自动生成流程:

Step 1:用户输入测试意图 + Swagger JSON → RAG 查询引擎 → 生成 pytest 脚本骨架(含参数化占位符)

Step 2:提取脚本中参数化部分的代码 → 大模型生成参数 Schema(字段名、类型、约束)

Step 3 :将 Schema + 提示词 → Text2SQL 查询引擎 → 从数据库生成符合等价类划分的测试数据 → 替换脚本中的 param_list

最终输出:可直接运行的数据驱动 pytest 脚本,覆盖正常值、边界值、异常值。


六、关键技术选型说明

LlamaIndex RetrieverQueryEngine:检索 → 后处理 → 整合三阶段流程。检索阶段用 BM25 或向量相似度找 top-k 相关节点;后处理阶段按分数重排、过滤;整合阶段将检索结果 + 用户问题 + 提示词模板送入 LLM 生成最终输出。

本地模型部署 :LLM 使用 Ollama 推理框架(gpt-oss:120b-cloud),Embedding 模型同样走 Ollama。好处是数据不出本地,适合处理公司内部代码和数据库信息。

数据安全边界:公司内部代码、数据库 Schema、业务数据严禁上传公网大模型服务。本地部署 Dify + Ollama 是企业场景的标准选择。


七、局限与适用边界

这套流水线目前适合以下场景:接口定义清晰(有 Swagger 文档)、数据库结构相对稳定、参数数量在合理范围内。

对于全新接口(无历史测试物料)、参数极其复杂的场景,Text2SQL 生成的数据质量依赖数据库中已有数据的覆盖度。端到端 UI 测试(Web/App)不在本方案覆盖范围内,需要结合 Playwright MCP Server 等工具另行处理。

相关推荐
这张生成的图像能检测吗40 分钟前
(论文速读)Scaling Rectified Flow Transformers:Rectified Flow + MM-DiT 的高分辨率文生图路线
大模型·文生图·多模态·扩散模型·图像生成
是Yu欸4 小时前
实测openPangu-2.0-Pro:昇腾原生, 505B大模型的开源答卷
人工智能·开源·大模型·昇腾·pangu
武哥聊编程5 小时前
【AI实战项目】基于LangChain4j+Springboot+Vue+RAG+PGVector的AI智能客服与工单处理系统
springboot·rag·pgvector·langchain4j
circuitsosk8 小时前
企业知识库 RAG 从 62% 到 91%:分块策略、混合检索与重排序的调优全记录
python·知识库问答·rag·面试项目·ai工程化·混合检索
Tom·Ge10 小时前
【AI前沿】2026.08.17 SpaceX 600亿收购Cursor正式完成·DeepSeek V4 Pro万亿开源·人形机器人生态全面爆发
人工智能·大模型·ai前沿
程序员-Benothing18 小时前
OpenAI断供Cursor:当AI巨头开始“清理门户“,开源生态的中立性还能撑多久?
人工智能·开源·大模型
thesky12345620 小时前
27届大模型面试准备(七十三):大模型强化学习对齐工程实战——RLHF、PPO 与 GRPO 的训练流水线
大模型·rlhf·奖励模型·ppo·dpo·grpo·强化学习对齐
tachibana221 小时前
微调和 RAG 各自的优劣势是什么?
人工智能·ai·大模型·llm·agent
thesky1234561 天前
27届大模型面试准备(七十二):大模型流式推理服务与长连接工程——SSE、背压与首包优化
大模型·sse·长连接·背压·流式推理·首包优化·ttft
程序员杰哥1 天前
如何做接口测试?
自动化测试·python·测试工具·职场和发展·测试用例·接口测试·postman