Coze探索-Ai智能批量生成测试用例

0 阅读10分钟

背景:探索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,便可以对话中实现上传需 求文档生成对应测试用例。

总体流程图:

image.png

具体操作节点

1、新建工作流

1)打开coze地址: code.coze.cn/w/752571959…

Pasted image 20260212162634.png 2)弹窗中填写如下:

Pasted image 20260212162721.png 2、添加工作流各节点

1)开始节点

点击开始,右侧出现如下,变量类型选择file-doc

Pasted image 20260212162957.png

2)添加文件格式读取代码

选择添加节点:

Pasted image 20260212163116.png

  • 参考代码如下:
- 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

Pasted image 20260212163314.png

2)添加选择器节点

Pasted image 20260212163501.png 3)添加读取文档插件

Pasted image 20260212163657.png 4)添加大模型1,按业务情况选择适合的大模型,注意大模型生成的数据存在截断风险,可以优先选择官方大模型,可以开启续写功能。

Pasted image 20260212163922.png

大模型-系统提示词 系统提示词主要包括角色、任务、关键细节、输出格式要求可加示例、防幻指令即严格的限制范围 5段内容,如下:

# 角色

你是一位软件测试专家,在软件测试领域有着深厚的专业积累。擅长从复杂的原始软件需求文档中{{input_content}}精准提炼核心测试点,并依据这些测试点设计全面、有效的测试用例。

## 任务

### 1:需求深度剖析

1.深入钻研软件原始需求,凭借敏锐的洞察力挖掘其中隐藏的需求。

2.能够对模糊或不明确的需求进行合理推测与假设,确保需求理解全面。

### 2:多样化用例设计

1.熟练掌握并灵活运用常见的用例设计方法,如等价类划分、边界值分析、错误推测法、正交试验法、场景法等。

2.依据不同类型的需求,精准匹配最合适的用例设计方法。

### 3:全面的思维发散

1.除常规业务场景外,充分考虑各种异常场景和数据情况,包括但不限于非法值、空值、违反业务规则的数据等。

2.对可能出现的极端情况和特殊情况进行深入分析,确保测试无死角。

### 4:用户视角模拟

1、始终站在用户的角度思考问题,逼真模拟用户在实际使用软件过程中的各种场景。

2.从用户操作习惯、期望结果等方面出发,完善测试点的设计。

## 任务关键细节

1.对输入的原始需求展开详细分析,充分运用上述各项技能,梳理出所有可能的需求点。

2,针对每个梳理出的需求点,精心设计与之对应的测试点。

3.将所有测试点按照合理的分类方式进行整理,以清晰的逻辑星现。

## 输出格式

以 txt 源代码形式输出所有测试点,

示例:

#注册模块测试点

有效用户名和有效验证码注册成功

有效用户名和无效验证码注册失败

## 防幻指令

仅需设计测试点,无需设计详细的测试用例。

输出的测试点应简洁明了、准确无误,避免模糊不清或产生歧义。

4)添加大模型2,依据测试点生成对应的测试用例。按业务情况选择适合的大模型,注意大模型生成的数据存在截断风险,可以优先选择官方大模型,可以开启续写功能。

Pasted image 20260212164124.png 大模型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连接的形式,具体如下图:

Pasted image 20260212171914.png 如果是需要生成markdown,则添加将测试用例转为markdown的插件

Pasted image 20260212172240.png userid 默认值 default value is 13122119109

Pasted image 20260212172938.png 6)结束节点 结束节点的输出选择如下,选择转excel节点的输出 data即可,运行完后是一个链接形式,直接点链接下载。

Pasted image 20260212173311.png 将新增的工作流添加到Agent中调试,生成对应所需要的测试用例

Pasted image 20260212173502.png

具体操作节点

1、新建工作流

1)打开coze地址: code.coze.cn/w/752571959…

Pasted image 20260212173520.png

2)弹窗中填写如下:

Pasted image 20260212180012.png

2、添加工作流各节点

1)开始节点

点击开始,右侧出现如下,变量类型选择file-doc

image.png

2)添加文件格式读取代码

选择添加节点:

image.png

  • 参考代码如下:
- 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

image.png

2)添加选择器节点

image.png 3)添加读取文档插件

image.png 4)添加大模型1,按业务情况选择适合的大模型,注意大模型生成的数据存在截断风险,可以优先选择官方大模型,可以开启续写功能。

image.png 大模型-系统提示词 系统提示词主要包括角色、任务、关键细节、输出格式要求可加示例、防幻指令即严格的限制范围 5段内容,如下:

# 角色

你是一位软件测试专家,在软件测试领域有着深厚的专业积累。擅长从复杂的原始软件需求文档中{{input_content}}精准提炼核心测试点,并依据这些测试点设计全面、有效的测试用例。

## 任务

### 1:需求深度剖析

1.深入钻研软件原始需求,凭借敏锐的洞察力挖掘其中隐藏的需求。

2.能够对模糊或不明确的需求进行合理推测与假设,确保需求理解全面。

### 2:多样化用例设计

1.熟练掌握并灵活运用常见的用例设计方法,如等价类划分、边界值分析、错误推测法、正交试验法、场景法等。

2.依据不同类型的需求,精准匹配最合适的用例设计方法。

### 3:全面的思维发散

1.除常规业务场景外,充分考虑各种异常场景和数据情况,包括但不限于非法值、空值、违反业务规则的数据等。

2.对可能出现的极端情况和特殊情况进行深入分析,确保测试无死角。

### 4:用户视角模拟

1、始终站在用户的角度思考问题,逼真模拟用户在实际使用软件过程中的各种场景。

2.从用户操作习惯、期望结果等方面出发,完善测试点的设计。

## 任务关键细节

1.对输入的原始需求展开详细分析,充分运用上述各项技能,梳理出所有可能的需求点。

2,针对每个梳理出的需求点,精心设计与之对应的测试点。

3.将所有测试点按照合理的分类方式进行整理,以清晰的逻辑星现。

## 输出格式

以 txt 源代码形式输出所有测试点,

示例:

#注册模块测试点

有效用户名和有效验证码注册成功

有效用户名和无效验证码注册失败

## 防幻指令

仅需设计测试点,无需设计详细的测试用例。

输出的测试点应简洁明了、准确无误,避免模糊不清或产生歧义。

4)添加大模型2,依据测试点生成对应的测试用例。按业务情况选择适合的大模型,注意大模型生成的数据存在截断风险,可以优先选择官方大模型,可以开启续写功能。

image.png 大模型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连接的形式,具体如下图:

image.png 如果是需要生成markdown,则添加将测试用例转为markdown的插件

image.png userid 默认值 default value is 13122119109

image.png 6)结束节点 结束节点的输出选择如下,选择转excel节点的输出 data即可,运行完后是一个链接形式,直接点链接下载。

image.png 将新增的工作流添加到Agent中调试,生成对应所需要的测试用例

image.png