尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Dify 高级实验(09):测试用例生成——如何让 AI 自动产出测试用例?

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综合实战——如何从零搭建一个企业级智能客服平台 你在这个实验的场景里踩过什么坑欢迎评论区分享你的实战经验。
返回列表