ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

AI辅助测试开发:RAG知识工程打通用例生成到自动化脚本

AI辅助测试开发:RAG知识工程打通用例生成到自动化脚本 简介来自中兴通讯的AI辅助测试开发端到端提效实践方案面向关注通信行业测试效率提升的研发人员与技术管理者重点解决用例冗余、脚本开发效率低及系统测试压力大等现实问题。方案结合FTTR组网带来的业务复杂性对比提示工程、RAG与精调等大模型应用路线明确RAG在当前私域知识更新频繁场景下的最优选择并围绕测试设计、脚本开发、执行分析给出具体AI工作流与知识工程建设落地细节。内容包含背景痛点、方案选型、端到端AI工作流、知识库分层建设以及基于GWT生成测试点、复用用例推荐、意图识别生成DSL脚本等关键实践展示了知识获取、建模、评估、应用的全链路方法对构建自动化脚本交付体系具有参考价值。资源为一份6.37MB的PDF文档共1个文件目前已有103人学习。适合需要系统性了解AI辅助测试落地方案、提升自动化覆盖率与用例复用率的从业者参考。1. AI辅助测试开发把集测在等用例的痛点拆掉集测在等用例这个场景做过通信设备系统测试的人应该都不陌生。传统单智能网关时代测试对象就一个盒子用例和脚本都好维护到了FTTRFiber To The Room组网变成一台主网关挂多台从网关Wi-Fi、POTS、LAN全串在一起用例复杂度和脚本复杂度成倍增长。再加上运营商客户强定制、短交付周期迭代内需求多自动化脚本交付速度跟不上集测节奏覆盖率不升反降甚至出现倒退。这套端到端测试开发提效方案的核心是把需求→测试点→文本用例→DSL→RF脚本这条链路拆开在每个环节嵌入AI触点用知识工程把私域知识喂给大模型把自动化覆盖率从瓶颈里拉出来。适合通信、嵌入式、网关类产品的测试开发人员和技术管理者——你们遇到的痛点跟这份材料里描述的几乎一样。2. 方案选型为什么RAG在测试开发里比提示工程和精调更合适2.1 三种大模型方案对比提示工程、RAG、精调的适用边界测试域里做AI落地第一步不是写代码而是选方案。围绕大模型应用业界主流有三条路提示工程Prompt Engineering、RAG检索增强生成、精调Fine-tuning。这三条路的成本和效果边界差异极大选错了后面全盘被动。从这份材料给出的对比来看提示工程的优势是经济可行、见效快、灵活性高用户能自行优化提示词并分享模板但它的天花板也很明显——受限于模型的数据窗口大小复杂的提示词会消耗大量token影响响应速度和成本。在测试开发这个场景里需求文档、用例库、历史缺陷、设备配置都是长文本一次对话根本塞不下。精调的优势是改变模型行为、提升输出稳定性适合固定任务的高频使用场景但成本高需要一次性投入而且数据准备和处理复杂。测试域的知识更新频率有多高每次产品迭代、每个运营商定制需求、每条缺陷修复都会产生新的知识。用精调方案意味着每两周就要重新训练一轮这在工程上不可持续。RAG则正好打在测试开发的痛点上为模型补充外部知识解决模型知识局限性知识更新频繁的场景是它的主场。虽然它不擅长改变模型行为需要额外的内容检索和数据源但在测试开发这个知识密集、更新频繁的场景里这些劣势都变成了可控项。方案优点缺点适用场景提示工程成本最低、见效快、用户可自助优化受模型数据窗口限制、复杂提示词耗token快速试验验证、上下文优化RAG补充外部知识、解决知识局限、适合频繁更新需额外检索和数据源、实现复杂度较高知识更新频繁、上下文信息量大的场景精调改变模型行为、输出稳定、后续调用快成本高、数据准备复杂、不适合频繁变化的知识固定任务高频使用、需稳定输出格式结论很明确项目测试开发活动涉及大量私域知识且知识更新频繁RAG方案是这个场景下的最优解。2.2 知识工程七步闭环知识库是怎么从零搭起来的选定了RAG接下来就是知识工程的建设。这是整个方案里最容易被低估的部分——很多人以为RAG就是拿文档切一切、灌进向量库就完事了实际上知识工程的建设质量直接决定AI应用的上限。知识工程的建设思路遵循一套标准流程知识规范、知识获取、知识建模、知识库建设、知识评估、知识应用。六个环节形成一个闭环每个环节的输出是下一个环节的输入。材料里明确提到了知识建设流程从语料选择开始后续是知识规范、知识获取、知识建模、知识库建设、知识评估、知识应用。知识规范是第一步也是最容易被跳过的。规范的本质是划定边界基于各个业务活动的要求对知识进行系统化、标准化的定义和描述通过制定明确的规范确保知识的一致性、可理解性和可操作性。没有规范从各个生产系统里捞上来的知识就是一堆散沙。知识获取依托生产系统包括icenter、Ztest、Gerrit等。这些系统里沉淀了需求、用例、缺陷、代码变更记录是知识的原始矿藏。知识建模则对应三种形态文档树、QA对、知识图谱。目前向量化知识库存储在DN Studio平台文档类数据存储在项目端。知识库的分层设计也值得细看。材料里列出了十个知识库测试策略知识库、测试用例知识库、关键字知识库、问题分析知识库、环境运维知识库、风险评估知识库、产品能力知识库、要素因子知识库、测试FAQ知识库、失败特征知识库。这个分层不是拍脑袋定的而是对应测试开发活动的不同环节——策略制定时查策略库写用例时查用例库写脚本时查关键字库执行失败时查失败特征库。知识库1.0是多源跨域数据把各个系统的数据汇到一起知识库2.0是跨域知识体系在一期数据的基础上做关联和融合形成真正的知识网络。可以这么理解1.0解决有没有的问题2.0解决用得上的问题。提示知识库建设要跟业务流绑定不是为了建库而建库。每个知识库都要对应一个AI应用触点否则就是死数据。3. AI辅助测试设计GWT生成测试点与复用用例召回3.1 GWT生成测试点用结构化模板约束大模型输出测试设计是测试开发活动的源头。传统做法里TSE测试设计工程师拿到需求文档后凭经验把需求实例化成测试点再展开成文本用例。这个过程高度依赖个人经验产出质量参差不齐而且不同TSE设计的测试点风格差异大给后续的用例复用和检索埋下了隐患。这套方案的思路是把需求实例化活动本身作为AI应用的切入点。以需求为源头基于需求实例化活动的产出作为输入通过GWTGiven-When-Then生成测试点。GWT是一种行为驱动开发的描述范式它的价值在于把在什么条件下、做什么操作、期望什么结果三段式结构化天然适合测试点的表达。测试点的知识规范有三条原则这三条原则是后续所有检索和生成的地基测试点尽可能原子化且能够映射1个验证点测试点的描述遵循在XXX场景条件下验证XXX的功能的格式文本用例名称标识所属的测试点格式为XXX功能_XXX测试点。原子化为什么重要因为一个测试点对应一个验证点检索时才能精准命中。如果一条测试点里塞了三个验证点语义检索召回时它既可能命中A场景、也可能命中B场景反而成了噪声。用大模型生成测试点时Prompt模板长这样{ instruction: 你是家庭智能网关产品包括家用路由器、光猫等的软件测试设计资深专家请根据需求实例化输出生成测试点。, input: { requirement: %需求实例化内容%, function_point: %功能点列表%, constraints: 每条测试点必须原子化只覆盖1个验证点描述遵循在XXX场景条件下验证XXX的功能格式 }, output_format: {\test_points\: [\测试点1\, \测试点2\, ...]} }这段Prompt的关键在于两个约束一是测试点原子化二是描述格式固定。原子化约束解决的是检索精度问题描述格式固定解决的是后续语义向量化的稳定性问题——向量化模型对格式规整的文本编码效果明显优于自由文本。实际落地时还需要对GWT生成结果做一轮人工抽检。大模型生成的测试点偶尔会出现看起来对但实际不可执行的情况比如条件缺失、操作对象不明确。抽检比例建议在10%-20%重点看生成的测试点是否真正映射到需求的功能点。3.2 复用用例召回关键字检索与语义检索的双通道融合测试用例重复冗余是材料里明确点名的痛点。迭代内需求多TSE为了赶进度习惯性地复制粘贴相近用例导致用例库膨胀、腐化自动化覆盖率提升遇到瓶颈。解决这个问题的关键是复用用例推荐——在TSE写新用例之前先让系统把已有的相似用例推给他。实现方案基于已有的测试用例知识库建立了测试点到文本用例的QA对。检索采用双通道融合关键字检索和语义检索同时进行。关键字检索用BM25这类传统算法命中精确词语义检索用向量相似度捕获同义表达。两条通道的结果做融合排序TSE人工检查测试步骤后一键关联PR。from typing import List, Dict import numpy as np def dual_channel_recall(query: str, keyword_index, vector_index, top_k: int 10, alpha: float 0.4) - List[Dict]: 双通道用例检索关键字检索 语义检索加权融合排序 Args: query: 测试点描述如在FTTR组网场景下验证WAN侧DHCPv6获取 keyword_index: BM25索引 vector_index: 向量检索索引 top_k: 最终返回的候选条数 alpha: 语义通道权重关键字通道权重为 1-alpha # 通道1: 关键字检索 keyword_hits keyword_index.search(query, top_ktop_k*2) kw_scores {hit.id: hit.score for hit in keyword_hits} # 通道2: 语义检索 vector_hits vector_index.search(query, top_ktop_k*2) vec_scores {hit.id: hit.score for hit in vector_hits} # 分数归一化后加权融合 all_ids set(kw_scores.keys()) | set(vec_scores.keys()) fused [] for doc_id in all_ids: kw_score kw_scores.get(doc_id, 0.0) vec_score vec_scores.get(doc_id, 0.0) fused_score alpha * vec_score (1 - alpha) * kw_score fused.append({case_id: doc_id, score: fused_score}) # 按融合分数排序返回前top_k条 fused.sort(keylambda x: x[score], reverseTrue) return fused[:top_k]双通道融合的逻辑不复杂核心alpha参数含义是语义检索的权重。alpha设得越高越依赖语义理解能力适合用例名称和测试点存在大量同义改写的情况alpha设得低则更依赖字面精确匹配适合规范执行得好、术语统一的团队。实际调参时建议用一批人工标注的相似/不相似用例对做网格搜索。关键字和语义双通道召回的好处是互补语义检索召回的是意思相近但用词不同的用例关键字检索兜底的是术语精确的用例。材料里提到存量用例通过治理后语义相似度提升了15%以上这15%的语义对齐直接反映在语义检索通道的命中率上。4. 从文本用例到RF脚本意图识别、DSL设计与关键字召回4.1 意图识别与DSL设计让自然语言变成结构化中间表示文本用例生成了下一步是自动化脚本。传统做法里自动化工程师拿到文本用例理解测试步骤再对照产品接口和关键字库手写RobotFramework脚本。这个环节的瓶颈在于人——自动化工程师的产出速度有限而且用例量大了以后脚本维护本身就是沉重负担。AI辅助的思路是对文本用例做意图识别将文本用例转换为DSL领域特定语言设计再召回RFRobotFramework关键字生成自动化脚本。DSL在这里扮演的是中间表示层的角色——直接让大模型生成RF脚本输出格式不稳定格式或关键字名稍有偏差脚本就跑不起来先转成DSL再做一次结构化映射可靠性高得多。一个典型的DSL设计长这样basic: model: H01 uplink_type: ETH name: wan_dhcpv6_verify wantype: ethernet chip: XX型号 Q: - desc: 查看WAN侧DHCPv6信息 cmd: sendcmd 1 DB p DHCP6Cports A: - expect: cpu: xxx action: pass这段DSL对应一个查询WAN侧DHCPv6信息的验证点。basic段声明了设备型号、上联类型、芯片方案等环境要素Q段是操作步骤A段是预期结果。这种结构的好处是跟具体的自动化框架解耦——同一份DSL可以映射到RobotFramework也可以映射到其他脚本框架。意图识别这一步大模型真正要做的是翻译把用例里自然语言的测试步骤比如登录网关页面进入网络设置确认WAN侧DHCPv6地址已获取翻译成结构化DSL。这一步的Prompt核心是把用例名称、测试步骤、预期结果三个字段拼接后约束输出固定格式的DSL。大模型输出经常出现幻觉比如编造不存在的命令。缓解手段是在Prompt里注入关键字知识库中已有的命令列表让模型只能在给定的命令集合中选择。这比事后纠正更有效——从源头限制模型的输出空间。4.2 关键字召回与脚本生成让大模型写的脚本可以直接跑DSL设计完成后脚本生成就变成了一道映射题根据DSL中的操作意图从RF关键字库中召回匹配的关键字填入参数生成可执行的RobotFramework脚本。这个过程如果全靠大模型自由发挥生成结果大概率不能直接跑。关键字知识库的建设逻辑跟测试用例库一脉相承。每个关键字要有明确的描述、参数列表、适用场景和示例。RAG在这里的价值是精准召回给定DSL中的查看DHCPv6信息操作系统从关键字库中召回对应的RF关键字而不是让模型自己猜。RF脚本生成的核心映射逻辑可以抽象成一段解析代码def generate_rf_script(dsl: dict, keyword_lib: dict) - str: 基于DSL和关键字库生成RobotFramework脚本 Args: dsl: 意图识别后的结构化DSL keyword_lib: RF关键字知识库key为操作意图 value为关键字模板 Returns: RF脚本字符串 lines [*** Settings ***, Library SSHLibrary, ] lines.append(*** Test Cases ***) lines.append(f{dsl[basic][name]}_test) for step in dsl[Q]: intent step[desc] keyword keyword_lib.get(intent) if not keyword: # 关键字缺失时标记人工补充而非让模型硬编 lines.append(f # TODO: missing keyword for {intent}) continue lines.append(f {keyword[name]} {step.get(cmd, )}.rstrip()) # 预期结果校验断言 for check in dsl[A]: lines.append(f Should Contain ${{output}} {check[expect]}) return \n.join(lines)代码里有一个关键设计当关键字缺失时脚本里显式生成TODO标记而不是让大模型自己编造一个关键字名。这一点用血的教训换来的——早期版本让模型自由生成关键字名结果脚本看起来完整一执行就报keyword not found排错成本反而比手写还高。脚本生成后的兜底机制也很重要TSE人工检查测试步骤确认后一键关联PR。AI生成脚本的价值在于把人从80%的重复劳动里解放出来剩下20%的边界case必须人工兜底。这跟全自动生成是两回事。5. 知识工程避坑指南用例治理、检索阈值与知识更新的教训5.1 用例名称与测试点语义偏差语义检索效果差的头号原因现象语义检索通道召回结果质量差明明库里有用例语义相似度就是排不到前面去。原因存量用例名称跟测试点的语义距离太远。早期用例的命名习惯是功能名_编号或XX模块测试_补充跟测试点描述的在XXX场景条件下验证XXX的功能风格完全不一致。向量模型编码的是语义命名风格跟查询语句差异越大向量空间里的距离就越远。解决做用例名称治理专题。材料里的做法是根据用例设计规范和测试点设计规范对存量的用例名称进行专项治理人工使用例名称的语义显著与测试点接近。实测效果是语义相似度提升了15%以上。这个治理工作看着笨重但它是所有上层AI应用的地基——用例名称语义对齐后不只是检索变准了后续大模型抽取测试点时的输入质量也同步提升。5.2 向量库更新滞后新需求检索不到新用例现象新迭代的需求上线两周了基于新需求的用例在复用推荐里永远搜不到。原因知识库的更新机制没有跟研发流程挂钩。知识库建设做了一遍初始灌库之后就放在那里新用例沉淀进Ztest共享用例库后没有触发向量库的增量更新。解决把知识库更新接入发布流水线。用例评审通过合入共享库的动作自动触发测试点抽取和向量化入库。注意这里的增量更新要做对只更新增量部分而不是每次全量重建。全量重建的成本随着库的增大线性上升到几十万的QA对规模时一次全量重建可能要用小时计。增量更新的另一个好处是即时性——用例刚合入就能被检索到。5.3 检索阈值与切片大小召回质量的两个玄学旋钮现象复用用例推荐偶尔推出一批跟当前测试点八竿子打不着的用例工程师看一眼就关掉推荐窗口之后就再也不用了。原因阈值设得太低或者语义检索的切片粒度太大。语义检索返回的是相似度分数相似度阈值0.7还是0.75看着差别不大但实际检索结果集会差出好几倍。切片粒度的问题更大——如果一段切片里包含了多个测试点向量化后的语义被平均掉了什么都能命中什么都不精准。解决阈值不要拍脑袋设定。准备一批人工标注的相关/不相关样本对用验证集做阈值扫描选F1分数最高的点。切片粒度上按材料里的规范严格执行——测试点原子化且切片只包含一个测试点及其对应的用例。看着像是规范问题本质上是数据质量问题。5.4 测试点不原子化一个测试点对应多个验证点的连锁反应现象用例复用推荐的结果里经常出现看起来相关但是没法直接用的用例TSE需要大量修改才能复用复用意愿降低。原因上游GWT生成测试点时原子化约束执行不严。有的测试点描述写成在FTTR组网场景下验证WAN侧连通性、Wi-Fi覆盖和POTS语音功能三个验证点揉在一起。这条测试点向量化后的语义是模糊的检索时它跟多个查询都能算相关但谁的精度都不够。解决知识规范在GWT生成和人工抽检两个环节同时卡口。生成时Prompt里强调原子化约束抽检时把多验证点揉杂作为否决项。历史数据用大模型做二次拆分把非原子化的存量测试点自动拆成多条原子化测试点。这个拆分工作用模型做比人工快得多但要抽检拆分结果——模型偶尔会把一条用例拆出重复或遗漏。提示知识工程建设中规范的执行力度比规范本身更重要。定了规范不执行等于没定。6. 效果验证与下一步演进从覆盖率拐点到Autowork方案落地不是把AI工具嵌进流程就完事了效果验证才是闭环的关键。这套方案在实际项目里最直接的收益看三个指标文本用例交付吞吐量是否提升、自动化脚本交付效率是否提升、自动化覆盖率是否出现拐点。材料里明确提到该方案已在多个项目推广显著提高了测试用例和自动化脚本的交付效率。衡量框架建议按分层来做需求层看GWT生成测试点的有效率和复用用例的采纳率用例层看文本用例生成的一次通过率脚本层看AI生成脚本的可执行率和执行通过率。复用用例的采纳率是关键中的关键。推荐了十条用例TSE真正采纳了几条如果采纳率低说明检索质量不过关要回头调阈值和检查知识规范如果采纳率高说明RAG链路是健康的可以放心投入更多资源扩充知识库。这个指标比模型输出看起来多聪明更实在。下一步的演进方向是Autowork即探索自生成、自校验、自修复的全流程自动化。现在的链路是AI生成人工兜底人力介入发生两个环节GWT生成后的抽检和脚本生成后的人工检查。Autowork的目标是把这两个环节也自动化——脚本执行失败后AI读取日志、分析失败原因、自动修复脚本并重跑。这个方向技术上是可行的因为它跟前端的RAG链路共享同一套知识库失败特征知识库和问题分析知识库就是为自修复准备的数据基础。从那以后我在设计AI测试开发方案时都会强制走一遍知识工程闭环先在知识规范上花时间再谈模型和算法。很多团队做AI测试提效上来就调Prompt、换大模型折腾一圈效果还是不稳定问题根本不在模型而在知识的地基。这条经验不管是做RAG方案还是Agent方案都适用。希望帮到你。本文还有配套的精品资源点击获取
返回列表