AI Agent在测试设计中的应用

article/2025/7/5 3:57:18

前言

随着AI和大模型(LLM)的诞生以及技术的成熟和普及,测试工程师不仅可以利用 AI 生成和优化测试用例,还能借助 LLM 提高测试覆盖率、减少测试设计的重复性工作,从而专注于更复杂的测试策略和质量保障。

在软件测试的工作流中,分析需求 设计测试点和测试用例是比较繁琐的工作,如何更好的利用大模型技术比如Agent来帮助和赋能呢。

本文将带你构建一个智能 Agent,自动完成如下流程:

① LLM Agent 分析需求 → 生成测试点

Agent 通过调用大语言模型(如 GPT-4)解析需求语义,自动提取出可测试的功能点、边界条件、异常路径等。这一步相当于“从需求生成测试点清单”。

② 基于测试点和需求 → 生成结构化测试用例

接下来,Agent 会结合原始需求与提取出的测试点,生成完整的测试用例。每条用例包含以下内容:

  • Title(标题)
  • Precondition(前置条件)
  • Steps(操作步骤)
  • Expected Result(预期结果)
  • Actual Result / Pass/Fail(初始测试状态)

这些用例以 JSON 格式输出,方便进一步集成或存储。

③ 将测试用例导出为 Excel 文件

最后一步,Agent 使用 Python 工具(如 pandas + openpyxl)将结构化测试用例保存为 Excel 文件便于后续导入到测试管理平台中


1. 项目搭建

现在开始进行具体项目搭建,项目整体结构如下:

requirement_to_testcase/
│
├── main.py                    # 项目入口
├── agents/
│   ├── testcase_generator.py  # 用于生成测试用例│
├── prompts/
│   ├── parser_prompt.txt
│   ├── generator_prompt.txt
│   └── reviewer_prompt.txt
├── utils/
│   ├── io_utils.py            # 处理输入输出、Excel导出等
│   └── format_utils.py        # 格式校验与清洗工具
├── requirements.txt
└── README.md

项目主要使用LangChain、OpenAI、pandas等组件,推荐使用Python 3.10+ 环境。

1 . 创建虚拟环境

python -m venv .venv
source .venv/bin/activate  # Mac/Linux
# 或
.venv\\Scripts\\activate     # Windows

2 . 安装依赖

requirements.txt内容如下

langchain==0.3.25
openai==1.10.0
pandas==2.2.2                # 用于输出表格
openpyxl==3.1.2              # Excel 文件支持
python-dotenv==1.0.1         # 加载 .env 配置
langchain-experimental==0.3.4

安装依赖

pip install -r requirementst.txt

3 . 设置openai的api key

在这个示例中使用的大模型是gpt-3.5,需要在项目中配置API Key,当前大家也可以切换其他大模

在项目根目录下创建一个 .env 文件(若尚未存在),添加以下内容:

OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2. 从需求中提取测试


在日常测试用例设计过程中,第一步通常是对需求进行分析并从中提取出测试点,为了让每次大模型的结果更一致效果更好,首先我们需要设计一个prompt

以下是用于“需求 → 测试点”任务的Prompt,可以保存在prompts/generate_test_points.md 方便阅读和维护

你是一名经验丰富的软件测试分析工程师,擅长从自然语言需求中提取出清晰、可验证的测试点。请将以下输入的中文需求描述,转化为一组**测试点清单**,每一条测试点应满足以下要求:1. 语句简洁,覆盖明确的功能或行为;
2. 能指导后续的测试用例设计;
3. 包含主流程、边界条件、异常输入等常见测试场景;
4. 每一条测试点使用 “- ” 开头,按行列出;
5. 不输出多余说明文字,仅返回测试点清单本身。输入需求:
"""
{requirement}
"""请输出测试点列表(每行一个):
-

大家可以在utils.py或者main.py中添加load_prompt_template函数,用于读取prompt

def load_prompt_template(path: str) -> str:with open(path, "r", encoding="utf-8") as f:return f.read()

将以下代码添加到 main.py 中,完成Prompt读取并调用ChatGPT:


from dotenv import load_dotenv
from langchain.chains.llm import LLMChain
from langchain_community.chat_models import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from utils import load_prompt_templateload_dotenv()def main():# 加载外部 Prompt 文件prompt_path = "prompts/generate_test_points.md"prompt_text = load_prompt_template(prompt_path)# 解析 Prompt 文件test_point_prompt_template = PromptTemplate(input_variables=["testing_points"],template=prompt_text,)llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")parser_chain = LLMChain(llm=llm, prompt=test_point_prompt_template)# 示例调用requirement = "用户可以使用邮箱和密码登录系统,成功后跳转到首页。若邮箱或密码错误,应显示错误信息。"test_points = parser_chain.run(requirement)print(test_points)if __name__ == "__main__":main()

运行main.py,模型返回的测试点如下:

- 使用正确的邮箱和密码登录系统,验证是否成功跳转到首页
- 使用错误的邮箱登录系统,验证是否显示错误信息
- 使用错误的密码登录系统,验证是否显示错误信息
- 使用错误的邮箱和密码登录系统,验证是否显示错误信息
- 使用空邮箱登录系统,验证是否显示错误信息
- 使用空密码登录系统,验证是否显示错误信息

3. 生成测试用例Agent

在成功提取测试点之后,下一步是生成具体的测试用例。这边就要开始完成该Agent核心的步骤了

Step 1:设计 Prompt 生成测试用例

为了确保模型生成的测试用例结构清晰、可落地执行、便于导出,我们需要一个规范化的 Prompt。我们将prompt内容保存为 prompts/generate_test_cases.md

### 背景说明(Context)你是一名资深的软件测试工程师,负责根据产品需求和测试点设计高质量的测试用例。你的任务是编写结构化、规范化的测试用例,确保:1. 每条测试用例都准确覆盖指定的测试点;
2. 所有测试用例均符合格式要求,具备明确的前置条件、详细的测试步骤及期望结果;
3. 测试用例应覆盖所有测试点,每个测试用例可覆盖 2~3 个测试点,避免重复冗余。---**输入需求:**
"""
{requirement}
"""**测试点列表:**
"""
{test_points}
"""### 输出要求请根据上述需求和测试点,输出结构化的测试用例,格式为 JSON 数组,示例如下:
- 语言应清晰简洁,避免冗长重复;
- 请保证输出为有效 JSON 格式,确保可以被自动解析与导出
- 请确保每个测试用例都能独立执行,避免相互依赖
- 每个测试用例应包含以下内容:- **Title**:简洁明了的测试用例标题- **Description**:对测试目的或覆盖点的简要描述- **Precondition**:测试执行前的前置条件- **Step**:每条用户操作步骤(无需写预期结果)- **Expected Result**:整个用例的总体预期结果- **Actual Result**:测试执行时的实际观察结果- **Pass/Fail**:是否通过,填写 `Pass` 或 `Fail`---### 输出格式 
[{{"title": "邮箱密码正确时登录成功","description": "验证邮箱和密码输入正确后可登录系统","precondition": "已打开登录页面","steps": ["输入正确邮箱地址","输入正确密码","点击登录按钮"],"expected_result": "成功跳转到系统首页","actual_result": "待测试","pass_fail": "待测试"}}
]

Step 2:调用 LLM 生成测试用例

main.py 中添加如下函数,用于读取Prompt模板并调用大模型生成用例的内容:

def generate_test_cases_from_points(test_points: str, requirement: str) -> str:prompt_path = "prompts/generate_test_cases.md"prompt_text = load_prompt_template(prompt_path)prompt_template = PromptTemplate(input_variables=["requirement", "test_points"],template=prompt_text,validate_template=False  # 跳过变量检查)llm = ChatOpenAI(temperature=0.2, model="gpt-3.5-turbo")testcase_chain = LLMChain(llm=llm, prompt=prompt_template)response = testcase_chain.run({"requirement": requirement,"test_points": test_points})return response  # 返回的是 JSON 字符串

函数说明

  • prompts/generate_test_cases.md 文件中读取Prompt的模板
  • 构建 LangChain的PromptTemplate,将test_points和requirement注入到prompt模板中
  • 使用gpt-3.5-turbo模型创建LLMChain 的对象
  • 执行Chain,调用大模型并生成结构化测试用例

Step 3:使用 Agent 自动写入 Excel

然后进入最后的一个步骤,原先没有大模型Agent我们会编写一段程序自己导入到Excel。而现在,借助Agent框架,我们可以让大语言模型自动完成这项工作。

导出用例Agent

首先,在 agents目录下新建 export_excel_agent.py,添加如下代码:

from langchain.agents import create_react_agent, AgentExecutor
from langchain import hub
from langchain_community.chat_models import ChatOpenAI
from langchain_experimental.tools import PythonREPLTool
from utils import load_prompt_templatedef export_test_cases_with_agent(test_case_json: str, filename: str = "test_cases.xlsx"):# 加载 Prompt 模板prompt_path = "prompts/export_to_excel.md"export_instructions = load_prompt_template(prompt_path)# 加载 ReAct Agent 的基础 Promptbase_prompt = hub.pull("langchain-ai/react-agent-template")prompt = base_prompt.partial(instructions=export_instructions)tools = [PythonREPLTool()]agent = create_react_agent(prompt=prompt,llm=ChatOpenAI(temperature=0, model="gpt-3.5-turbo"),tools=tools,)python_agent = AgentExecutor(agent=agent, tools=tools, verbose=True)result = python_agent.invoke({"input": "请将测试用例写入Excel 文件"})return result

串联整个流程

接下来,我们将测试点提取、用例生成与导出文件的三个步骤整合起来 ,以下是main.py的完整代码

from dotenv import load_dotenv
from langchain.chains.llm import LLMChain
from langchain_community.chat_models import ChatOpenAI
from langchain_core.prompts import PromptTemplate
from agents.export_excel_agent import export_test_cases_with_agent
import openaifrom utils import load_prompt_templateload_dotenv()def generate_test_cases_from_points(test_points: str, requirement: str) -> str:prompt_path = "prompts/generate_test_cases.md"prompt_text = load_prompt_template(prompt_path)prompt_template = PromptTemplate(input_variables=["requirement", "test_points"],template=prompt_text,)llm = ChatOpenAI(temperature=0.2, model="gpt-3.5-turbo")testcase_chain = LLMChain(llm=llm, prompt=prompt_template)response = testcase_chain.run({"requirement": requirement,"test_points": test_points})return response  # 返回的是 JSON 字符串def main():# 加载外部 Prompt 文件prompt_path = "prompts/generate_test_points.md"prompt_text = load_prompt_template(prompt_path)# 解析 Prompt 文件test_point_prompt_template = PromptTemplate(input_variables=["requirement"],template=prompt_text,)llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo")parser_chain = LLMChain(llm=llm, prompt=test_point_prompt_template)# 示例调用requirement = "用户可以使用邮箱和密码登录系统,成功后跳转到首页。若邮箱或密码错误,应显示错误信息。"test_points = parser_chain.run(requirement)print(test_points)# Step 2: 根据测试点生成测试用例test_case_json = generate_test_cases_from_points(test_points, requirement)print("📄 生成的测试用例 JSON:\\n", test_case_json)# Step 3: 导出为 Excel 文件export_test_cases_with_agent(test_case_json, filename="test_cases.xlsx")if __name__ == "__main__":main()

运行 main.py 后,Agent 会自动识别任务并调用工具进行处理。以下是执行日志:

> Entering new AgentExecutor chain...
Python REPL can execute arbitrary code. Use with caution.
Thought: Do I need to use a tool? Yes
Action: Python_REPL
Action Input: import pandas as pd
import json# Test case data
test_cases = [{"title": "邮箱密码正确时登录成功","description": "验证邮箱和密码输入正确后可登录系统","precondition": "已打开登录页面","steps": ["输入正确邮箱地址","输入正确密码","点击登录按钮"],"expected_result": "成功跳转到系统首页","actual_result": "待测试","pass_fail": "待测试"},{"title": "输入错误邮箱登录显示错误信息","description": "验证输入错误邮箱后显示错误信息","precondition": "已打开登录页面","steps": ["输入错误邮箱地址","输入正确密码","点击登录按钮"],"expected_result": "显示错误信息","actual_result": "待测试","pass_fail": "待测试"},{"title": "输入错误密码登录显示错误信息","description": "验证输入错误密码后显示错误信息","precondition": "已打开登录页面","steps": ["输入正确邮箱地址","输入错误密码","点击登录按钮"],"expected_result": "显示错误信息","actual_result": "待测试","pass_fail": "待测试"},{"title": "输入错误邮箱和密码登录显示错误信息","description": "验证输入错误邮箱和密码后显示错误信息","precondition": "已打开登录页面","steps": ["输入错误邮箱地址","输入错误密码","点击登录按钮"],"expected_result": "显示错误信息","actual_result": "待测试","pass_fail": "待测试"},{"title": "输入超长邮箱和密码登录系统","description": "验证输入超长邮箱和密码后系统能正确处理","precondition": "已打开登录页面","steps": ["输入超长邮箱地址","输入超长密码","点击登录按钮"],"expected_result": "系统能够正确处理","actual_result": "待测试","pass_fail": "待测试"},{"title": "输入空邮箱和密码登录系统","description": "验证输入空邮箱和密码后系统显示错误信息","precondition": "已打开登录页面","steps": ["清空邮箱地址","清空密码","点击登录按钮"],"expected_result": "显示错误信息","actual_result": "待测试","pass_fail": "待测试"}
]# Convert test cases to DataFrame
df = pd.DataFrame(test_cases)# Write DataFrame to Excel file
df.to_excel("test_cases.xlsx", index=False)Final Answer: The test cases have been successfully written to an Excel file named test_cases.xlsx.> Finished chain.

从日志中可以看到大模型根据input的任务进行判断需要调用工具,然后主动调用 pandas 工具完成了JSON解析和Excel的写入!

通过这个 Agent,我们实现了测试用例从自然语言生成到自动导出的全流程自动化:

  1. 结构化 JSON 输出:大模型负责将需求转为标准用例格式;
  2. 智能工具调用:Agent自动选择并执行Python写入逻辑;
  3. 无需硬编码写 Excel:只需提供测试点与需求,其余交给模型完成。

📎 项目地址

https://github.com/bridgeshi85/requirement-to-testcase


http://www.hkcw.cn/article/ZyjSZosahy.shtml

相关文章

详细到用手撕transformer下半部分

之前我们讨论了如何实现 Transformer 的核心多头注意力机制,那么这期我们来完整地实现整个 Transformer 的编码器和解码器。 Transformer 架构最初由 Vaswani 等人在 2017 年的论文《Attention Is All You Need》中提出,专为序列到序列(seq2s…

Vue开发入门安装

Vue开发入门安装 版本选择剪不断,理还乱Node.js —— 类比为 Java JDKnpm —— 类比为 Maven 或 Gradlenvm —— 类比为 JDK 版本管理工具Vue.js —— 类比为 Spring Framework 或 JavaFX 下载配置下载node-v16.20.2-win-x86.zip设置环境变量打开位置,输…

leetcode刷题日记——二叉树的最近公共祖先

[ 题目描述 ]: [ 思路 ]: 两个节点的最近公共祖先具有以下特点如果祖先节点不是自身,那么两个节点一定在祖先节点的两边所以可以递归搜索树的左右子树,如果节点分布在两边,那么这个就是最近公共祖先,如果…

北京业之峰法式奶油风改造:92㎡两居打造温柔治愈之家

在当前居住空间设计日益注重实用性与美学融合的趋势下,北京业之峰近日完成一套法式奶油风住宅改造项目。整体设计在保留原始结构优势的基础上,以清新柔和的视觉风格和合理的空间动线布局,为业主提供了一个兼具温度与功能的理想居所。项目整体…

五星级酒店技能比赛主持稿串词

男:尊敬的各位领导~ 女:紫澜门国际酒店的兄弟姐妹们~ 合:大家——上午好~ 男:欢迎大家来到紫澜门国际酒店20XX年度——酒店竞技比赛的现场。 女:我是质检招聘部副主任XXX 男:我是工程部XXX 女:非常兴奋能兴奋能担负今天竞技比赛的主持人&…

DistilQwen-ThoughtX:变长思维链推理模型,超越DeepSeek蒸馏模型

作者:蔡文睿(清素)、汪诚愚(熊兮)、严俊冰(玖烛)、黄俊(临在) 前言 近年来,自然语言处理(NLP)领域以大语言模型(LLM&…

困在办公室二手烟中的职场人 防毒面具下的无奈抗争

早上8点,王海推开办公室的门,熟练地从衣柜里取出那套“工服”——这是他的“二手烟专用装备”。衣服早已浸透了焦油味,他迅速换上,等待同事们的到来。在这个四人办公室里,王海是唯一不抽烟的人。而他的三位同事,从清晨到傍晚,随时可能点燃一支烟,让狭小的空间瞬间烟雾弥…

《歌手》白举纲进步 遗憾止步舞台

《歌手2025》第三期竞演在湖南卫视和芒果TV落下帷幕。查理普斯作为“袭榜歌手”登场,终于实现了他推迟一年的中国行,并且成功袭榜,战胜了单依纯,而白举纲则被淘汰。节目开场时,查理普斯弹唱了《See you again》,网友纷纷感叹他的表现非常稳定。作为首位袭榜歌手,查理普斯…

武汉不扫兴的妈妈陪娃后备箱过夜 13元创造快乐回忆

一段能伴随孩子一生的快乐记忆,对极氪车主王大发来说,只需要13元。近日,她在社交媒体上分享了这段经历,讲述了一个“不扫兴的决定”如何为孩子创造了一段愉快的回忆,并让她更加思考成为有趣父母的意义。由于武汉暴雨导致小区停电,王大发一家三口决定驾车回外婆家过夜。途…

武汉不扫兴的妈妈陪娃后备箱过 13元创造快乐回忆

一段能伴随孩子一生的快乐记忆,对极氪车主王大发来说,价值13元。近日,她在社交媒体上分享了一个特别的经历,因为她的一个决定,给孩子创造了一段愉快的回忆,并让她重新思考如何成为有意思的父母。由于武汉暴雨导致小区停电,王大发一家三口决定驾车回外婆家过夜。途中,爸…

第29次CCF计算机软件能力认证-2-垦田计划

垦田计划 刷新 时间限制: 1.0 秒 空间限制: 512 MiB 下载题目目录(样例文件) 题目描述 顿顿总共选中了 nn 块区域准备开垦田地,由于各块区域大小不一,开垦所需时间也不尽相同。据估算,其…

权限分配不合理如何影响企业运营?

“我们明明只给了她CRM的查看权限,怎么客户数据被删了?” “新员工入职三天了,HR系统权限还没开通,流程完全卡住!” “上个月刚给项目经理配了财务权限,怎么又出乱子了?” 这些对话是否在你的…

2025.05.30【转录组】|Ribo-seq数据流程详解(一 质量控制)

Ribo-seq数据流程详解(一 质量控制) 作者:穆易青 文章目录 Ribo-seq数据流程详解(一 质量控制)1. 前言2. 原始数据质控3. 参数详解4. 总结1. 前言 Ribo-seq(核糖体测序)主要研究转录后调控和翻译动态。高质量的Ribo-seq数据是可靠生物学结论的基础。本文介绍了Ribo-se…

指纹识别+精准化POC攻击

开发目的 解决漏洞扫描器的痛点 第一就是扫描量太大,对一个站点扫描了大量的无用 POC,浪费时间 指纹识别后还需要根据对应的指纹去进行 payload 扫描,非常的麻烦 开发思路 我们的思路分为大体分为指纹POC扫描 所以思路大概从这几个方面…

pikachu通关教程-目录遍历漏洞(../../)

目录遍历漏洞也可以叫做信息泄露漏洞、非授权文件包含漏洞等. 原理:目录遍历漏洞的原理比较简单,就是程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。 这里的目录跳转符可以是../…

医生进校义诊卖仪器?医院回应 假冒医生行骗

近日,市民李先生带父亲参加了一次所谓的义诊活动。该活动由两位自称来自南方医科大学南方医院的医生举办。李先生花费五千多元购买了康复理疗仪器,但发现“货不对板”。经核实,南方医院并未组织过相关义诊,两位医生也查无此人。李先生的父亲是退休教授,在学校退休人员微信…

八N皇后问题

1 问题的提出 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法 我们的任务就是用MATLAB进行求解 2 数学模型的构建 首先我们分析题目就是 任意两个皇后都不能处于…

CRM 系统核心优势解析:数字化客户管理如何驱动企业增长

企业在客户管理中常面临数据分散、互动低效、决策滞后等挑战,传统管理方式难以满足数字化时代的客户运营需求。CRM(客户关系管理)系统作为整合客户数据、优化互动流程的核心工具,通过数字化手段重构企业与客户的连接模式。本文系统…

Windows SSDT Hook(一)

前言 虽然在 Windows Vista 以后的 64 位操作系统中,PatchGuard(内核补丁保护机制)对 SSDT(System Service Dispatch Table,系统服务分派表)实施了强力保护,直接 Hook SSDT 的方式几乎不可行&a…

centos7.6阿里云镜像各个版本介绍

(水一期) Index of /centos-vault/centos/7.6.1810/isos/x86_64/ File NameFile SizeDateParent directory/--0_README.txt2.4 KB2018-12-01 21:21CentOS-7-x86_64-DVD-1810.iso4.3 GB2018-11-26 07:55CentOS-7-x86_64-DVD-1810.torrent86.0 KB2018-12-…