尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Dify 高级实验(09):测试用例生成——如何让 AI 自动产出测试用例?
Dify 高级实验09测试用例生成——如何让 AI 自动产出测试用例Dify 实验系列 · 高级 09/10 | 实验编号DIFY-103-091. 实验目的掌握「Agent 编排 结构化输出」的生成式工作流范式让 LLM 扮演 QA 工程师从一段功能描述自动产出可直接执行的测试用例CSV 格式。核心是三层结构化输出链路测试点列表LLM 输出 JSON 数组类型/描述/优先级代码节点解析兜底逐条用例迭代节点对每个测试点生成完整用例 JSON前置条件/步骤/预期结果CSV 交付代码节点csv.writer汇总LLM 最终格式化出统计摘要 完整 CSV。适合QA / 测试开发 / 需要把「写用例」自动化的团队。前置要求中级实验 09 代码节点、14 知识库检索、16 迭代节点。2. 场景设计输入feature_desc功能描述paragraphmodule_name模块名称text-input输出一份含统计摘要与完整 CSV 的测试用例文档可直接复制进 Excel。输入「用户注册功能输入手机号验证码注册」→ 自动产出 10-15 条用例正常/边界/异常全覆盖P0-P3 分级——QA 半天的手工工作量压缩到几分钟。3. 节点拓扑开始feature_desc module_name → 知识库检索测试用例模板top_k3 → LLM 生成测试点JSON 数组类型/描述/优先级 → Code 解析测试点json.loads 截断 25 条 注入 module → 迭代节点逐条生成详细用例 └→ 迭代内 LLM 生成单条用例JSON前置条件/步骤/预期 → Code 汇总 CSVcsv.writer → LLM 格式化输出统计摘要 完整 CSV→ 结束4. 关键配置4.1 开始节点-label:功能描述required:truetype:paragraphvariable:feature_desc-label:模块名称required:truetype:text-inputvariable:module_name4.2 生成测试点lm_points数量约束 「只输出 JSON」 结构示例——让输出可被下游代码节点稳定解析你是一个 QA 工程师。根据功能描述生成测试点列表。 功能描述{{#start.feature_desc#}} 模块{{#start.module_name#}} 参考模板{{#kb_templates.result#}} 要求 1. 覆盖功能测试、边界测试、异常测试 2. 每个测试点包含类型(功能/边界/异常)、描述、优先级(P0-P3) 3. P0 是核心功能必须覆盖P3 是边缘场景 4. 测试点数量控制在 10-15 个 5. 输出 JSON 数组格式只输出 JSON不要输出其他任何内容 输出格式[{type: 功能, description: 正常登录, priority: P0}, ...]注意该节点必须reasoning_format: separated——思考过程一旦混入text下方 cd_parse 的json.loads直接失败流程卡在步骤 0。4.3 解析测试点cd_parse两个关键设计① 迭代数组上限 30points[:25]截断留余量② 把 module 注入每个 item——迭代内 LLM 只引用 item不引用外层节点自包含模式依赖只进不出defmain(llm_text:str,module_name:str)-dict:importjson,re text(llm_textor).strip()points[]mre.search(r\[.*\],text,re.DOTALL)ifm:try:parsedjson.loads(m.group(0))ifisinstance(parsed,list):pointsparsedexceptException:points[]pointspoints[:25]# 迭代数组上限 30截断留余量items[]forpinpoints:ifnotisinstance(p,dict):continueitems.append({type:str(p.get(type,功能)),description:str(p.get(description,)),priority:str(p.get(priority,P2)),module:str(module_nameor未指定模块)})return{test_points:items,count:len(items)}4.4 迭代内生成单条用例lm_case迭代容器输入[cd_parse, test_points]输出收集[lm_case, text]string 是迭代 output_selector 可见类型。内部 prompt 全部从 item 取字段同样reasoning_format: separated根据测试点生成完整的测试用例。 模块{{#iter_cases.item.module#}} 测试点{{#iter_cases.item.description#}} 类型{{#iter_cases.item.type#}} 优先级{{#iter_cases.item.priority#}} 输出 JSON只输出 JSON不要输出其他任何内容 {module: 模块名, test_point: 测试点描述, type: 功能/边界/异常, priority: P0-P3, precondition: 前置条件, steps: [步骤1, 步骤2], expected: 预期结果} 要求前置条件具体、步骤可执行、预期结果可验证。4.5 汇总 CSVcd_summary迭代输出收集到的是array[string]每条可能是字符串——先json.loads还原再写 CSVdefmain(all_cases:list)-dict:importcsv,io,json cases[]forcinall_casesor[]:ifisinstance(c,str):try:cjson.loads(c)exceptException:c{}ifisinstance(c,dict):cases.append(c)outputio.StringIO()writercsv.writer(output)writer.writerow([模块,测试点,类型,优先级,前置条件,步骤,预期结果])forcaseincases:stepscase.get(steps,[])or[]ifnotisinstance(steps,list):steps[str(steps)]writer.writerow([case.get(module,),case.get(test_point,),case.get(type,),case.get(priority,),case.get(precondition,),; .join(str(s)forsinsteps),case.get(expected,)])return{csv_output:output.getvalue(),case_count:len(cases)}4.6 格式化输出lm_formatmax_tokens: 8000 明确「只输出正文」——长交付物场景的标配双保险你是 QA 测试用例交付专员。基于以下 CSV 内容生成一份可直接交付的测试用例文档。 共生成 {{#cd_summary.case_count#}} 条测试用例CSV 内容如下 {{#cd_summary.csv_output#}} 请输出1. 测试用例统计摘要总数、功能/边界/异常分布2. 完整 CSV 内容保持原样方便复制导入 Excel。 只输出最终报告正文不要输出任何解释性文字、思考过程或 Markdown 代码块标记。5. 运行验证输入feature_desc预期实测用户注册功能输入手机号验证码注册10-15 条用例覆盖功能/边界/异常输出统计摘要 CSV与预期一致购物车结算功能支持优惠券15-20 条用例优先级 P0-P3 分级与预期一致空功能描述 / 超长描述不崩溃输出空用例文档或少量兜底用例与预期一致cd_parse 空数组兜底6. 采坑点坑现象修复迭代链路 LLM 思考污染lm_points 未开推理标签分离时text混入think思考cd_parse 的json.loads解析失败流程卡在步骤 0lm_points / lm_case 显式reasoning_format: separatedDeepSeek 推理模型默认 tagged必须显式写迭代输入数组超过 30 个元素运行报length of var item must be less than 30 elements双保险prompt 限「10-15 个」 cd_parsepoints[:25]截断留余量dify103_09 P3 实测迭代内 LLM 引用外层节点字段上下文依赖外传、字段取不到调试困难自包含模式进入迭代前把 module 等上下文注入每个 item迭代内只引用{{#iter_cases.item.xxx#}}迭代输出每条是字符串直接当 dict 用报错迭代 output_selector 只能收集 string对 str 调case.get(module)抛 AttributeErrorcd_summary 先isinstance(c, str)再json.loads还原长交付文档 text 为空思考与输出共享 max_tokens默认 2000被挤空或内容写进思考部分lm_formatmax_tokens: 8000 prompt「只输出最终报告正文」dify103_09 实测只加 prompt 约束即恢复7. 实验文档及源码获取实验文档完整操作步骤DIFY-103-09测试用例生成器.md源码可直接导入知识库已预填 dataset_iddify103_09_测试用例生成器.yml文章聚焦核心配置与采坑点实验的完整分步操作知识库种子准备/节点搭建/参数表见实验文档原文。下一篇Dify 高级实验10综合实战——如何从零搭建一个企业级智能客服平台 你在这个实验的场景里踩过什么坑欢迎评论区分享你的实战经验。
RELATED

相关推荐

Android Studio模拟器配置全攻略:从原理到实战,解决启动卡顿与AVD报错

Android Studio模拟器配置全攻略:从原理到实战,解决启动卡顿与AVD报错

1. 项目概述:为什么需要一个“听话”的模拟器?如果你刚开始接触安卓开发,或者正在为一个新项目搭建环境,那么“配置Android Studio安卓模拟器”这件事,大概率是你遇到的第一个,也是最让人头疼的坎儿。你可能…

📅 2026/9/1 14:05:45
Dify 高级实验(07):智能审批——如何让机器自动完成流程审批?

Dify 高级实验(07):智能审批——如何让机器自动完成流程审批?

Dify 高级实验(07):智能审批——如何让机器自动完成流程审批? Dify 实验系列 高级 07/10 | 实验编号:DIFY-103-07 1. 实验目的 掌握企业流程自动化的规则路由范式:参数提取器(PE)从…

📅 2026/8/31 21:38:43
write through和write back呢

write through和write back呢

Write Through(写直写)和 Write Back(写回)是 Cache 的写策略(Write Policy)。它们解决的核心问题是:当 CPU 修改了 Cache 中的数据时,如何保证 Cache 与主存(Main Memor…

📅 2026/9/1 6:40:22
MORE NEWS

更多资讯

📰

如何安装 MCP Server?从 Cline MCP 配置到 TaoToken 统一 Key 的完整实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

面向办公人群的 OpenClaw 部署手册:Windows 端搭建可执行任务智能体(含安装包)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

AGENTS.md还是Agent Skills?Swift Agent Skills配套SwiftAgents的正确打开方式

AGENTS.md还是Agent Skills?Swift Agent Skills配套SwiftAgents的正确打开方式 【免费下载链接】Swift-Agent-Skills A curated directory of open-source AI agent skills for Swift and Apple platform development. 项目地址: https://gitcode.com/gh_mirrors/…

📰

嵌入式驱动开发到底在忙什么?从设备树到设备节点的完整链路与实战排查

嵌入式驱动开发这个岗位,外行看着就是"写底层代码的",内行才知道每天干的活儿五花八门。有人以为驱动开发就是对着芯片手册抄寄存器,实际上从拿到一块新板子到让它跑起来,中间要经历读原理图、配设备树、调时钟、抓波形…

📰

PLC连接器选型:信号完整性与工业通信可靠性的底层保障

1. 工业PLC连接器选型不是挑“插头”,而是构建信号通路的底层基建干过五年以上自动化集成的朋友都知道,PLC柜一上电就报“模块通信超时”,查半天发现是底板接线端子松动;调试产线时IO点偶发丢帧,换掉现场传感器、重刷固…

📰

RAG问答准确度提升实战:检索、重排、生成全链路优化

做 RAG 应用的朋友应该都有过这种体验:知识库明明塞了几百份文档,问个具体问题,答案却要么答非所问,要么一本正经地编出文档里根本没有的内容。我前几个月接手了一个内部知识库问答系统,线上反馈最多的就是“搜不到”“…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬