背景:探索coze中Agent是否能帮助测试人员在编写测试用例提效;
场景:搭建一个能根据用户上传的需求文档,分别生成xmind思维导图或者是excel文档。
扩展点:当业务逻辑复杂时且需要一定的业务知识时,可以加入知识库,以及Skills或者prompt。
不足点:Agent生成的测试用例还不够稳定,精细颗粒度不够,需要调整优化Skills。
具体流程梳理:
1,新增Agent,新增工作流; 2,添加工作流各个节点; 1)开始节点,选择输入类型为文件属性 2)添加代码块,判断文件格式 3)添加选择器,判断输入文件属性,选择不同的分支流 4)添加文件读取插件 5)添加大模型,分析读取的文件需求内容,梳理出对应测试点 6)添加大模型,依托测试点,生成测试用例 7)添加文件生成器,按不同分支生成对应不同的文件 8)结束节点 3,验证生成文件的测试用例 4,在Agent配置中加入工作流,发布Agent,便可以对话中实现上传需 求文档生成对应测试用例。
总体流程图:
背景:探索coze中Agent是否能帮助测试人员在编写测试用例提效;
场景:搭建一个能根据用户上传的需求文档,分别生成xmind思维导图或者是excel文档。
扩展点:当业务逻辑复杂时且需要一定的业务知识时,可以加入知识库,以及Skills或者prompt。
不足点:Agent生成的测试用例还不够稳定,精细颗粒度不够,需要调整优化Skills。
具体流程梳理:
1,新增Agent,新增工作流; 2,添加工作流各个节点; 1)开始节点,选择输入类型为文件属性 2)添加代码块,判断文件格式 3)添加选择器,判断输入文件属性,选择不同的分支流 4)添加文件读取插件 5)添加大模型,分析读取的文件需求内容,梳理出对应测试点 6)添加大模型,依托测试点,生成测试用例 7)添加文件生成器,按不同分支生成对应不同的文件 8)结束节点 3,验证生成文件的测试用例 4,在Agent配置中加入工作流,发布Agent,便可以对话中实现上传需 求文档生成对应测试用例。
总体流程图:
具体操作节点
1、新建工作流
1)打开coze地址: code.coze.cn/w/752571959…
2)弹窗中填写如下:
2、添加工作流各节点
1)开始节点
点击开始,右侧出现如下,变量类型选择file-doc
2)添加文件格式读取代码
选择添加节点:
- 参考代码如下:
- import re
from urllib.parse import urlparse, parse_qs, unquote
def find_url_in_data(data):
"""从任意数据结构中递归查找可能的 URL 字符串"""
if isinstance(data, str):
if data.startswith(('http://', 'https://')):
return data
return None
elif isinstance(data, dict):
for key in ['input', 'url', 'file_url', 'text', 'content', 'value']:
if key in data and isinstance(data[key], str) and data[key].startswith('http'):
return data[key]
# 递归子项
for v in data.values():
url = find_url_in_data(v)
if url:
return url
elif isinstance(data, list):
for item in data:
url = find_url_in_data(item)
if url:
return url
return None
def extract_extension_smart(url):
if not url:
return 'unknown'
parsed = urlparse(url)
query = parse_qs(parsed.query)
# 优先从 x-wf-file_name 提取(解码!)
wf_names = query.get('x-wf-file_name')
if wf_names and wf_names[0]:
decoded = unquote(wf_names[0])
ext = extract_ext_from_name(decoded)
if ext != 'unknown':
return ext
# 否则从路径提取
return extract_ext_from_name(parsed.path)
def extract_ext_from_name(name):
if not isinstance(name, str):
return 'unknown'
# 匹配 .xxx 后面是非字母或结尾,且长度 2-5
matches = re.findall(r'\.([a-zA-Z]{2,5})(?:$|[^a-zA-Z])', name)
return matches[-1].lower() if matches else 'unknown'
async def main(event):
# === 调试信息(上线后可删除)===
print(">>> Received event:", repr(event))
print(">>> Type:", type(event))
# ============================
url = find_url_in_data(event)
print(">>> Extracted URL:", repr(url))
ext = extract_extension_smart(url)
supported = ext in {'pdf', 'doc', 'docx', 'txt', 'xlsx', 'csv', 'jpg', 'jpeg', 'png', 'gif'}
dot_ext = f'.{ext}' if ext != 'unknown' else ''
result = {
'file_name': url or '',
'extension': ext,
'extension_with_dot': dot_ext,
'is_supported': supported
}
print(">>> Final result:", result)
return result
2)添加选择器节点
3)添加读取文档插件
4)添加大模型1,按业务情况选择适合的大模型,注意大模型生成的数据存在截断风险,可以优先选择官方大模型,可以开启续写功能。
大模型-系统提示词 系统提示词主要包括角色、任务、关键细节、输出格式要求可加示例、防幻指令即严格的限制范围 5段内容,如下:
# 角色
你是一位软件测试专家,在软件测试领域有着深厚的专业积累。擅长从复杂的原始软件需求文档中{{input_content}}精准提炼核心测试点,并依据这些测试点设计全面、有效的测试用例。
## 任务
### 1:需求深度剖析
1.深入钻研软件原始需求,凭借敏锐的洞察力挖掘其中隐藏的需求。
2.能够对模糊或不明确的需求进行合理推测与假设,确保需求理解全面。
### 2:多样化用例设计
1.熟练掌握并灵活运用常见的用例设计方法,如等价类划分、边界值分析、错误推测法、正交试验法、场景法等。
2.依据不同类型的需求,精准匹配最合适的用例设计方法。
### 3:全面的思维发散
1.除常规业务场景外,充分考虑各种异常场景和数据情况,包括但不限于非法值、空值、违反业务规则的数据等。
2.对可能出现的极端情况和特殊情况进行深入分析,确保测试无死角。
### 4:用户视角模拟
1、始终站在用户的角度思考问题,逼真模拟用户在实际使用软件过程中的各种场景。
2.从用户操作习惯、期望结果等方面出发,完善测试点的设计。
## 任务关键细节
1.对输入的原始需求展开详细分析,充分运用上述各项技能,梳理出所有可能的需求点。
2,针对每个梳理出的需求点,精心设计与之对应的测试点。
3.将所有测试点按照合理的分类方式进行整理,以清晰的逻辑星现。
## 输出格式
以 txt 源代码形式输出所有测试点,
示例:
#注册模块测试点
有效用户名和有效验证码注册成功
有效用户名和无效验证码注册失败
## 防幻指令
仅需设计测试点,无需设计详细的测试用例。
输出的测试点应简洁明了、准确无误,避免模糊不清或产生歧义。
4)添加大模型2,依据测试点生成对应的测试用例。按业务情况选择适合的大模型,注意大模型生成的数据存在截断风险,可以优先选择官方大模型,可以开启续写功能。
大模型2-系统提示词
系统提示词主要包括角色、任务、关键细节、输出格式要求可加示例、防幻指令即严格的限制范围 5段内容,如下:
# 角色
你是一位专业的测试用例生成专家,擅长根据{{reasoning_content}}内容精准分析测试点,并设计出全面、合理的测试用例。
## 任务
1. 熟练运用等价类划分、边界值分析、流程分析法、错误推测法、正交试验法、场景法等常见用例设计方法,详细分析{{reasoning_content}}中的测试点。
2. 依据分析出的测试点,设计具体的测试用例,把对应的测试用例生成满足 Doc Maker的CSV格式要求。
## 输出
1、输出csv格式的测试用例,表头内容必须是:测试编号、业务模块、用例名称、前置条件、测试步骤、预期结果、测试结果。
2、每个需求点都至少设计5条用例。
请按照以下要求生成数据:
- 使用 CSV 格式输出
- 第一行为字段名称(表头)
- 每行一条记录
- 字段之间用逗号分隔
- 包含逗号的字段必须用双引号包裹
- 不要使用 Markdown 表格或其他格式
- 只输出数据,不要添加任何说明文字
生成excel的示例:
比如:测试编号,业务模块,测试点,用例描述,前置条件,测试步骤,预期结果,测试结果
1,注册模块,验证点击“注册”按钮功能,无,在系统初始页面点击“注册”按钮,成功跳转到注册页面
## 防幻指令:
- 只围绕根据需求文档分析测试点和设计测试用例相关内容进行回答,拒绝回答无关话题。
- 输出内容需按照给定的回复示例格式进行组织,条理清晰。
如果是生成markdown源代码格式,则可以使用下面这段提示词
# 角色
你是一位软件测试专家,在软件测试领域有着深厚的专业积累。擅长从复杂的原始软件需求点文档中{{input}}精准提炼核心测试点,并依据这些测试点设计全面、有效的测试用例。
## 任务
### 1:多样化用例设计
1.熟练掌握并灵活运用常见的用例设计方法,如等价类划分、边界值分析、错误推测法、正交试验法、场景法等。
2.依据不同类型的需求点,精准匹配最合适的用例设计方法。
### 2:全面的思维发散
1.除常规业务场景外,充分考虑各种异常场景和数据情况,包括但不限于非法值、空值、违反业务规则的数据等。
2.对可能出现的极端情况和特殊情况进行深入分析,确保测试无死角。
### 3:用户视角模拟
1、始终站在用户的角度思考问题,逼真模拟用户在实际使用软件过程中的各种场景。
2.从用户操作习惯、期望结果等方面出发,完善测试点的设计。
### 4:核心要求
1,结构化输出:按页面/模块-测试类型-测试用例的层级组织思维导图
2,全面覆盖:每个需求点必须包括正向测试(正常流程)和负向测试(异常/边界情况)
3,多维度测试:功能测试,接口测试,覆盖UI/UX测试,兼容性测试,性能测试,安全测试
4,测试用例展示:每个测试点的不同测试用例,分节点展示
5,用例标准化:每个叶子节点测试用例包含:测试id、标题、前置条件、步骤、预测结果、优先级(P0-P3),在一个子节点展示完
6,风险导向:优先覆盖核心业务流程和高风险功能点
7,每个测试点至少,生成5条测试用例
8,以 Markdown 源代码形式输出所有数据,
## 防幻指令
输出格式必须严格为 Markdown 的源代码格式。
输出的测试点应简洁明了、准确无误,避免模糊不清或产生歧义。
5)添加将测试用例转为excel的插件 添加插件,搜索关键字 doc maker 选择第一个插件doc maker下的create_spreadsheet这个插件的结果输出为url连接的形式,具体如下图:
如果是需要生成markdown,则添加将测试用例转为markdown的插件
userid 默认值 default value is 13122119109
6)结束节点
结束节点的输出选择如下,选择转excel节点的输出 data即可,运行完后是一个链接形式,直接点链接下载。
将新增的工作流添加到Agent中调试,生成对应所需要的测试用例
具体操作节点
1、新建工作流
1)打开coze地址: code.coze.cn/w/752571959…
2)弹窗中填写如下:
2、添加工作流各节点
1)开始节点
点击开始,右侧出现如下,变量类型选择file-doc
2)添加文件格式读取代码
选择添加节点:
- 参考代码如下:
- import re
from urllib.parse import urlparse, parse_qs, unquote
def find_url_in_data(data):
"""从任意数据结构中递归查找可能的 URL 字符串"""
if isinstance(data, str):
if data.startswith(('http://', 'https://')):
return data
return None
elif isinstance(data, dict):
for key in ['input', 'url', 'file_url', 'text', 'content', 'value']:
if key in data and isinstance(data[key], str) and data[key].startswith('http'):
return data[key]
# 递归子项
for v in data.values():
url = find_url_in_data(v)
if url:
return url
elif isinstance(data, list):
for item in data:
url = find_url_in_data(item)
if url:
return url
return None
def extract_extension_smart(url):
if not url:
return 'unknown'
parsed = urlparse(url)
query = parse_qs(parsed.query)
# 优先从 x-wf-file_name 提取(解码!)
wf_names = query.get('x-wf-file_name')
if wf_names and wf_names[0]:
decoded = unquote(wf_names[0])
ext = extract_ext_from_name(decoded)
if ext != 'unknown':
return ext
# 否则从路径提取
return extract_ext_from_name(parsed.path)
def extract_ext_from_name(name):
if not isinstance(name, str):
return 'unknown'
# 匹配 .xxx 后面是非字母或结尾,且长度 2-5
matches = re.findall(r'\.([a-zA-Z]{2,5})(?:$|[^a-zA-Z])', name)
return matches[-1].lower() if matches else 'unknown'
async def main(event):
# === 调试信息(上线后可删除)===
print(">>> Received event:", repr(event))
print(">>> Type:", type(event))
# ============================
url = find_url_in_data(event)
print(">>> Extracted URL:", repr(url))
ext = extract_extension_smart(url)
supported = ext in {'pdf', 'doc', 'docx', 'txt', 'xlsx', 'csv', 'jpg', 'jpeg', 'png', 'gif'}
dot_ext = f'.{ext}' if ext != 'unknown' else ''
result = {
'file_name': url or '',
'extension': ext,
'extension_with_dot': dot_ext,
'is_supported': supported
}
print(">>> Final result:", result)
return result
2)添加选择器节点
3)添加读取文档插件
4)添加大模型1,按业务情况选择适合的大模型,注意大模型生成的数据存在截断风险,可以优先选择官方大模型,可以开启续写功能。
大模型-系统提示词
系统提示词主要包括角色、任务、关键细节、输出格式要求可加示例、防幻指令即严格的限制范围 5段内容,如下:
# 角色
你是一位软件测试专家,在软件测试领域有着深厚的专业积累。擅长从复杂的原始软件需求文档中{{input_content}}精准提炼核心测试点,并依据这些测试点设计全面、有效的测试用例。
## 任务
### 1:需求深度剖析
1.深入钻研软件原始需求,凭借敏锐的洞察力挖掘其中隐藏的需求。
2.能够对模糊或不明确的需求进行合理推测与假设,确保需求理解全面。
### 2:多样化用例设计
1.熟练掌握并灵活运用常见的用例设计方法,如等价类划分、边界值分析、错误推测法、正交试验法、场景法等。
2.依据不同类型的需求,精准匹配最合适的用例设计方法。
### 3:全面的思维发散
1.除常规业务场景外,充分考虑各种异常场景和数据情况,包括但不限于非法值、空值、违反业务规则的数据等。
2.对可能出现的极端情况和特殊情况进行深入分析,确保测试无死角。
### 4:用户视角模拟
1、始终站在用户的角度思考问题,逼真模拟用户在实际使用软件过程中的各种场景。
2.从用户操作习惯、期望结果等方面出发,完善测试点的设计。
## 任务关键细节
1.对输入的原始需求展开详细分析,充分运用上述各项技能,梳理出所有可能的需求点。
2,针对每个梳理出的需求点,精心设计与之对应的测试点。
3.将所有测试点按照合理的分类方式进行整理,以清晰的逻辑星现。
## 输出格式
以 txt 源代码形式输出所有测试点,
示例:
#注册模块测试点
有效用户名和有效验证码注册成功
有效用户名和无效验证码注册失败
## 防幻指令
仅需设计测试点,无需设计详细的测试用例。
输出的测试点应简洁明了、准确无误,避免模糊不清或产生歧义。
4)添加大模型2,依据测试点生成对应的测试用例。按业务情况选择适合的大模型,注意大模型生成的数据存在截断风险,可以优先选择官方大模型,可以开启续写功能。
大模型2-系统提示词
系统提示词主要包括角色、任务、关键细节、输出格式要求可加示例、防幻指令即严格的限制范围 5段内容,如下:
# 角色
你是一位专业的测试用例生成专家,擅长根据{{reasoning_content}}内容精准分析测试点,并设计出全面、合理的测试用例。
## 任务
1. 熟练运用等价类划分、边界值分析、流程分析法、错误推测法、正交试验法、场景法等常见用例设计方法,详细分析{{reasoning_content}}中的测试点。
2. 依据分析出的测试点,设计具体的测试用例,把对应的测试用例生成满足 Doc Maker的CSV格式要求。
## 输出
1、输出csv格式的测试用例,表头内容必须是:测试编号、业务模块、用例名称、前置条件、测试步骤、预期结果、测试结果。
2、每个需求点都至少设计5条用例。
请按照以下要求生成数据:
- 使用 CSV 格式输出
- 第一行为字段名称(表头)
- 每行一条记录
- 字段之间用逗号分隔
- 包含逗号的字段必须用双引号包裹
- 不要使用 Markdown 表格或其他格式
- 只输出数据,不要添加任何说明文字
生成excel的示例:
比如:测试编号,业务模块,测试点,用例描述,前置条件,测试步骤,预期结果,测试结果
1,注册模块,验证点击“注册”按钮功能,无,在系统初始页面点击“注册”按钮,成功跳转到注册页面
## 防幻指令:
- 只围绕根据需求文档分析测试点和设计测试用例相关内容进行回答,拒绝回答无关话题。
- 输出内容需按照给定的回复示例格式进行组织,条理清晰。
如果是生成markdown源代码格式,则可以使用下面这段提示词
# 角色
你是一位软件测试专家,在软件测试领域有着深厚的专业积累。擅长从复杂的原始软件需求点文档中{{input}}精准提炼核心测试点,并依据这些测试点设计全面、有效的测试用例。
## 任务
### 1:多样化用例设计
1.熟练掌握并灵活运用常见的用例设计方法,如等价类划分、边界值分析、错误推测法、正交试验法、场景法等。
2.依据不同类型的需求点,精准匹配最合适的用例设计方法。
### 2:全面的思维发散
1.除常规业务场景外,充分考虑各种异常场景和数据情况,包括但不限于非法值、空值、违反业务规则的数据等。
2.对可能出现的极端情况和特殊情况进行深入分析,确保测试无死角。
### 3:用户视角模拟
1、始终站在用户的角度思考问题,逼真模拟用户在实际使用软件过程中的各种场景。
2.从用户操作习惯、期望结果等方面出发,完善测试点的设计。
### 4:核心要求
1,结构化输出:按页面/模块-测试类型-测试用例的层级组织思维导图
2,全面覆盖:每个需求点必须包括正向测试(正常流程)和负向测试(异常/边界情况)
3,多维度测试:功能测试,接口测试,覆盖UI/UX测试,兼容性测试,性能测试,安全测试
4,测试用例展示:每个测试点的不同测试用例,分节点展示
5,用例标准化:每个叶子节点测试用例包含:测试id、标题、前置条件、步骤、预测结果、优先级(P0-P3),在一个子节点展示完
6,风险导向:优先覆盖核心业务流程和高风险功能点
7,每个测试点至少,生成5条测试用例
8,以 Markdown 源代码形式输出所有数据,
## 防幻指令
输出格式必须严格为 Markdown 的源代码格式。
输出的测试点应简洁明了、准确无误,避免模糊不清或产生歧义。
5)添加将测试用例转为excel的插件 添加插件,搜索关键字 doc maker 选择第一个插件doc maker下的create_spreadsheet这个插件的结果输出为url连接的形式,具体如下图:
如果是需要生成markdown,则添加将测试用例转为markdown的插件
userid 默认值 default value is 13122119109
6)结束节点
结束节点的输出选择如下,选择转excel节点的输出 data即可,运行完后是一个链接形式,直接点链接下载。
将新增的工作流添加到Agent中调试,生成对应所需要的测试用例