测试新手实训总结 3 :大模型生成测试用例
·
前两篇文章分别总结了测试优先级和常用的测试方法,本篇进行实操。写测试用例过于繁琐,因此尝试构造prompt,让大模型帮我写测试用例。结果用例覆盖范围不一定全面,仅供参考,欢迎各位测试工程师提出宝贵意见与反馈。
Prompt
尝试总结了一套可直接照搬的promp。
业务场景描述模板
这一步很重要,一定要详细!
业务场景描述
核心是明确功能的基础信息,要点:
- 功能名称:明确功能核心用途;
- 使用人员:界定功能的使用对象;
- 功能入口:明确从系统首页到目标功能的跳转路径,可直接操作定位。
页面 / 模块 / 元素组成
- 结构规则:复杂页面按功能区域拆模块,简单页面直接罗列元素;元素类型统一(文本、输入框、下拉框、复选框、按钮),不混乱;
- 页面:独立界面,用统一格式标记(如 [页面 1:XXX 页面]);
- 模块:复杂页面的功能分区(如筛选区、报表展示区),仅复杂页面拆分,不嵌套冗余;
- 元素:页面 / 模块内的具体控件,按类型分类罗列,明确每个区域的可操作 / 可查看内容。
操作流程
核心是描述通用正确的操作步骤,不区分权限、不混入异常场景,要点:
- 通用性:仅记录正常操作的标准步骤,适用于所有合法权限用户;
- 连贯性:按用户实际操作顺序编写(如登录→进入页面→筛选→提交→查看结果);
- 简洁性:明确关键操作(如点击某按钮)、系统执行逻辑、最终呈现结果,不添加多余说明。
核心规则/约束
-
权限规则:哪些角色可查看 / 编辑 / 删除 / 保存。
-
控件显隐规则:根据条件显示 / 隐藏 / 置灰。
-
级联 & 必选规则:级联关系、必选字段、不可漏选、不可跳选。
-
下拉框选项规则:可选值、默认值、联动规则。
-
按钮操作规则:每个按钮的功能、作用范围和条件。
-
输入框格式规则:类型、长度、小数位数、是否允许为空。
-
数值区间强规则:
- 起始值必须小于结束值
- 起始值、结束值不能为负数
- 区间不能重叠
- 区间不能交叉
- 区间不能为空
- 结束值必须大于起始值
-
业务唯一性规则:同一维度下不可重复添加相同项。
-
异常 & 拦截规则:格式错误、逻辑错误、重复提交的提示。
模板
请先仔细阅读用户提供的[业务场景描述],整理需求:
[业务场景描述]
功能名称:
使用人员:
功能入口:
[页面/模块/元素组成]
结构规则:
1. 页面使用 [] 标记
2. 复杂页面分模块,模块不使用 []
3. 简单页面不分模块,直接写元素
4. 元素统一分类:文本、输入框、下拉框、按钮、复选框
[页面1:XXX页面(复杂页面)]
1. 模块1:XXX模块
- 文本:
- 输入框:
- 按钮:
2. 模块2:XXX模块
- 文本:
- 按钮:
[页面2:XXX页面(简单页面)]
- 文本:
- 按钮:
[操作流程]
1.
2.
3.
[核心规则/约束]
1.权限规则:
-
2.控件显隐规则:
-
3.级联/必选规则:
-
4.下拉框选项规则:
-
5.按钮操作规则:
-
6.输入框格式规则:
-
7.数值区间强规则:
- 起始值必须小于结束值
- 起始值、结束值不能为负数
- 区间不能重叠
- 区间不能交叉
- 区间不能为空
- 结束值必须大于起始值
8.业务唯一性规则:
-
9.异常 & 拦截规则:
-
测试分析模板
可直接复制给大模型。
你是一名专业的软件测试工程师,具备丰富的功能测试经验,擅长按照业务优先级、结合等价类、边界值、判定表、正交实验法、场景法设计全面、可执行、无遗漏的测试用例,严格遵循测试规范,聚焦用例的可操作性和可验证性,不添加任何多余理论描述。
请基于我上一条发送的[业务场景描述],严格按照以下要求完成测试用例设计:
[业务场景分析要求]
1. 优先梳理:核心业务逻辑
- 梳理完整主流程
- 梳理核心规则
- 使用场景法设计正常流程与异常流程测试点
2. 再重点测试:数据交互与处理
按模块拆分,包含:
- 输入/选择类控件(下拉框、复选框、输入框等)→ 等价类、边界值
- 多条件组合筛选/查询 → 正交实验法
- 级联、联动、开关、展示控制 → 场景法
- 计算公式、逻辑判断、数据正确性 → 判定表、边界值
- 数据准确性、权限、过滤规则校验
3. 最后测试:界面操作与UI展示
- 页面布局、样式、交互体验
- 按钮、文案、提示、加载、空数据状态
- 易用性、规范性检查
注意:以上业务场景分析要求仅代表测试设计的优先级,不代表测试用例的最终编写顺序。
[测试用例设计核心要求]
1. 用例需严格遵循「测试八要素」编写,每个要素完整、无歧义、可验证,具体规范:
- 用例编号:规则统一,不重复、不遗漏,格式为:1,2,3(整数递增)
- 模块:精准对应业务场景中[页面/模块/元素组成]的内容,不新增、不混淆
- 测试标题:严格遵循三段式格式,统一用 "-" 分隔,模板:被测元素 - 输入条件/特殊说明 - 预期结果;要求简洁、明确、不冗余,去掉“验证、检查、测试”等无关词汇(示例:查询按钮 - 分公司未选择 - 弹出必填提示;单值分数 - 输入负数 - 前端拦截并提示;级联联动 - 切换分公司 - 部门数据正确刷新)
- 优先级:按业务重要性划分(P0-核心必测,P1-重要,P2-一般,P3-次要)
- 前置条件:明确执行用例前必须满足的所有条件(含用户状态、页面状态、数据状态)
- 测试输入:明确操作过程中需要输入、选择、勾选的具体内容(精准无模糊)
- 操作步骤:步骤清晰、可复现,每一步仅包含一个操作,按实际用户操作顺序编写
- 预期结果:具体、可验证,与测试标题对应,明确系统应呈现的具体效果(不笼统)
2. 模块命名规则
- 复杂页面:模块名称 = 页面名称 - 模块名称(示例:个人同行转账页面 - 顶部导航区)
- 简单页面:模块名称 = 页面名称(不拆分模块)(示例:验证页、转账结果页面)
- 不使用任何编号(如页面1、模块1),保持名称干净、可阅读。
3. 用例覆盖范围要求:覆盖正常流程、异常流程、边界、控件校验、UI展示
4. 输出格式要求:
- 用例按「测试八要素」规范编写,按模块分类,同一模块内按优先级从高到低排序
- 最终按Excel表格规范排版,表头固定为:用例编号、模块、测试标题、优先级、前置条件、测试输入、操作步骤、预期结果,每行对应一条测试用例
- 不添加任何多余描述、不讲解测试理论、不补充场景说明,仅输出可直接复制到Excel的测试用例
[测试设计强制规则]
1. 异常输入必须拆分为独立用例:
- 非数字、负数、超过长度限制、为空、前后空格 → 每个都是单独用例
2. 级联联动测试(核心重点,严格遵循标准方法):
- 正向联动:每一组 “上级控件→下级控件” 独立生成 1 条用例(例:切换分公司→部门列表正确刷新、切换分公司→团队列表正确刷新、切换部门→团队列表正确刷新,各为 1 条);仅测试前端允许的正常切换场景,确保下级数据与上级匹配
- 跳级选择(非法顺序):不按级联流程选择,每一种跳级场景独立生成1条用例(例:未选分公司直接选部门、未选部门直接选团队,各为1条),跳级的场景结果应该是无法选择(没有选项或提示“请选择上级”)
3. 一个测试点只对应一个测试用例,不允许多场景合并
4. 用例必须按[业务场景中定义的页面顺序]分组,页面内按[模块顺序]排列用例。
5. 每个模块内部,按优先级 P0 → P1 → P2 → P3 顺序排列。
6. 不允许跨模块打乱顺序,不允许全局只按优先级排序,必须遵循[先模块、后优先级]。
银行转账示例
界面原型
- 功能入口:手机银行首页 → 转账汇款 → 个人同行转账
- 核心页面结构
- 转出账户选择(默认本人储蓄卡,显示余额)
- 收款人模块(姓名、卡号输入 / 常用收款人选择)
- 转账金额输入框(数字键盘,有小数点限制)
- 转账备注(选填)
- 下一步按钮 → 确认页(展示所有信息 + 手续费)
- 短信验证码 / 指纹验证 → 结果页(成功 / 失败提示,流水号)
- 约束规则:余额≥转账金额;卡号格式校验;大额(≥5 万)需额外人脸验证;同行实时到账
==================== 手机银行 · 个人同行转账 ====================
[返回] 转账汇款 [帮助]
---------------------------------------------------------------
■ 转出账户(默认选中):
储蓄卡 ****6228
可用余额:¥ 10000.00
[切换账户]
---------------------------------------------------------------
■ 收款人信息
收款人姓名:[_______________]
收款卡号: [_________________________]
常用收款人:∇ 请选择
---------------------------------------------------------------
■ 转账信息
转账金额: [___________] 元
备注信息: [_______________] (选填)
---------------------------------------------------------------
[ 下一步 ]
---------------------------------------------------------------
==================== 确认转账页面 ====================
转出账户:****6228
收款人:张三
收款卡号:6228 1234 5678 9012
转账金额:¥ 1000.00
手续费:¥ 0.00
到账方式:实时到账
[ 确认转账 ] [ 取消 ]
---------------------------------------------------------------
==================== 验证页面 ====================
请输入短信验证码
[____] [ 获取验证码 ]
温馨提示:金额≥5万元需进行人脸核验
[ 确认 ]
---------------------------------------------------------------
==================== 转账结果页面 ====================
✅ 转账成功
交易流水号:20250101120012345678
转账金额:¥ 1000.00
收款方:张三 ****9012
[ 完成 ] [ 查看详情 ] [ 再次转账 ]
===============================================================
业务场景描述
请先仔细阅读用户提供的[业务场景描述],整理需求:
[业务场景]
功能名称:个人同行转账
使用人员:手机银行已登录、已实名的个人用户
功能入口:手机银行APP → 首页 → 转账汇款 → 个人同行转账
[页面/模块/元素组成]
结构规则:
1. 页面使用 [] 标记
2. 复杂页面分模块,模块不使用 []
3. 简单页面不分模块,直接写元素
4. 元素统一分类:文本、输入框、下拉框、按钮、复选框
[页面1:个人同行转账页面]
1. 模块1:顶部导航区
- 按钮:返回、帮助
- 文本:转账汇款
2. 模块2:转出账户区
- 文本:储蓄卡号、可用余额(默认选中本人储蓄卡)
- 按钮:切换账户
3. 模块3:收款人信息区
- 输入框:收款人姓名、收款卡号
- 下拉框:常用收款人
4. 模块4:转账信息区
- 输入框:转账金额、备注(选填)
5. 模块5:操作区
- 按钮:下一步
[页面2:确认转账页面]
1. 模块1:信息展示区
- 文本:转出账户、收款人、收款卡号、转账金额、手续费、到账方式
2. 模块2:操作区
- 按钮:确认转账、取消
[页面3:验证页]
- 文本:请输入短信验证码、温馨提示
- 输入框:短信验证码
- 按钮:获取验证码、确认
[页面4:转账结果页面]
- 文本:成功/失败状态、交易流水号、转账金额、收款方
- 按钮:完成、查看详情、再次转账
[操作流程]
用户操作步骤:
1. 登录手机银行,进入[个人同行转账页面]
2. 确认或切换[转出账户]
3. 填写[收款人姓名]、[收款卡号],或选择[常用收款人]
4. 填写[转账金额]、选填[备注]信息
5. 点击[下一步]按钮
6. 系统执行逻辑:校验卡号格式、余额是否充足、姓名与卡号一致性,跳转到[确认转账页面]
7. 用户确认信息后点击[确认转账],跳转[验证页面]并完成短信验证码验证
8. 跳转[转账结果页面],显示系统完成扣款转账,展示转账成功/失败页面及交易流水号
[核心规则/约束]
1. 转账金额必须大于0,且不能超过转出账户可用余额
2. 收款卡号为19位数字,系统自动校验格式,姓名与卡号需匹配
3. 转账金额≥5万元时,除短信验证外还需进行人脸核验
4. 同行转账实时到账,无手续费
Convert text to excel
用deepseek测试发现不能直接生成excel文件。可以运行如下代码,复制大模型结果并粘贴到工具中(不通用于各种大模型生成的测试结果)。
import pandas as pd
import tkinter as tk
from tkinter import ttk, messagebox
def txt_to_excel(txt_content, output_file="测试用例.xlsx"):
"""
将指定格式的测试用例文本转换为Excel文件
:param txt_content: 测试用例文本内容(字符串)
:param output_file: 输出Excel文件名,默认保存到当前目录
"""
# 定义Excel表头(与用例字段对应)
headers = ["用例编号", "模块", "测试标题", "优先级", "前置条件", "测试输入", "操作步骤", "预期结果"]
# 存储有效用例数据
case_data = []
# 按行分割文本,逐行处理
lines = txt_content.strip().split("\n")
for line in lines:
line = line.strip()
if (not line) or ":---" in line or "**" in line:
continue
if "[页面" in line or "模块" in line or "按钮:" in line or "文本:" in line or "输入框:" in line:
continue
# 按|分割单元格,去除首尾空格和多余空字符
cells = [cell.strip() for cell in line.split("|") if cell.strip()]
# 只保留8列数据的有效用例行(匹配8个字段)
if len(cells) == 8:
case_data.append(cells)
# 将数据转换为DataFrame并保存为Excel
df = pd.DataFrame(case_data, columns=headers)
# 保存Excel,忽略索引列
df.to_excel(output_file, index=False)
print(f"✅ 测试用例已成功导出至:{output_file}")
def on_convert_click():
"""点击转换按钮的回调函数"""
txt_content = txt_input.get("1.0", tk.END) # 获取文本框内容
excel_name = entry_filename.get().strip() # 获取Excel文件名
if not excel_name.endswith('.xlsx'):
excel_name = excel_name + '.xlsx'
if not excel_name:
messagebox.showwarning("警告", "请输入Excel文件名!")
return
if not txt_content.strip():
messagebox.showwarning("警告", "请粘贴测试用例TXT内容!")
return
try:
txt_to_excel(txt_content, excel_name)
messagebox.showinfo("成功", f"Excel文件已生成:{excel_name if excel_name.endswith('.xlsx') else excel_name+'.xlsx'}")
# 清空输入框(可选)
txt_input.delete("1.0", tk.END)
entry_filename.delete(0, tk.END)
except Exception as e:
messagebox.showerror("错误", f"转换失败:{str(e)}")
# 创建UI界面
root = tk.Tk()
root.title("测试用例TXT转Excel工具")
root.geometry("800x600") # 窗口大小
# 1. 文件名输入区域
frame_filename = ttk.Frame(root, padding="10")
frame_filename.pack(fill=tk.X)
label_filename = ttk.Label(frame_filename, text="Excel文件名:")
label_filename.pack(side=tk.LEFT, padx=5)
entry_filename = ttk.Entry(frame_filename, font=("微软雅黑", 10))
entry_filename.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)
entry_filename.insert(0, "文件名") # 默认文件名
# 2. 文本输入区域
frame_txt = ttk.Frame(root, padding="10")
frame_txt.pack(fill=tk.BOTH, expand=True)
label_txt = ttk.Label(frame_txt, text="粘贴测试用例TXT内容:")
label_txt.pack(anchor=tk.W)
# 滚动文本框
scrollbar = ttk.Scrollbar(frame_txt)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
txt_input = tk.Text(frame_txt, font=("微软雅黑", 10), yscrollcommand=scrollbar.set)
txt_input.pack(fill=tk.BOTH, expand=True)
scrollbar.config(command=txt_input.yview)
# 3. 转换按钮
frame_btn = ttk.Frame(root, padding="10")
frame_btn.pack(fill=tk.X)
btn_convert = ttk.Button(frame_btn, text="转换为Excel", command=on_convert_click)
btn_convert.pack(anchor=tk.CENTER, pady=5)
# 运行主循环
root.mainloop()
更多推荐
所有评论(0)