ARTICLE DETAIL

资讯详情

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

AI测试开发实战:基于LangChain与Playwright的自动化脚本生成

AI测试开发实战:基于LangChain与Playwright的自动化脚本生成 这段时间不断有同行问我AI 测试开发到底是不是个噱头自动化测试做了这么多年框架搭了一套又一套现在大模型一出来是不是又要推翻重来说实话我一开始也带着这种疑虑。直到自己真的把 LLM 接进测试流程跑通了测试用例自动生成、UI 脚本自动产出、缺陷智能分析这一条链路之后才意识到这不是简单的工具升级而是整个测试开发岗位的工作方式在换底层的逻辑。这篇文章就是围绕人工智能测试开发训练营六大模块加 10 大实战项目这套体系展开的。我会把训练营里模块设计的逻辑、项目递进的思路以及我在实操中踩过的坑和验证过的经验一条一条掰开来讲。无论你是还在观望的测试工程师还是已经在用 AI 辅助写脚本的人这篇文章都能给你一个相对完整的地图——知道该按什么顺序学学到什么程度能上手干活以及哪些环节特别容易被网上的营销话术带偏。1. 为什么测试开发岗突然都在聊 AI行业变化和训练营的定位测试开发这个岗位说实话挺特殊的。在国内互联网公司的组织架构里它既要做功能测试的兜底又要承担自动化框架、CI/CD 集成、性能测试平台这类基建工作。过去几年我见过太多测试同学把大量的精力花在维护 UI 自动化脚本上——页面改个 class脚本废掉一批需求迭代两次用例维护的成本比手工执行还高。这种状态下大家嘴上不说心里都清楚自动化测试的投入产出比正在被越来越多的团队质疑。1.1 传统自动化测试的痛点恰好是 LLM 擅长的领域我举一个最常见的场景。接口自动化里写一个完整的测试用例需要做三件事理解接口文档、设计入参和边界值、用代码或配置去断言返回结果。这几件事里最耗时的是前两件——读文档和设计用例。而大模型最擅长的恰好就是读一段文字然后按规则输出结构化内容。所以你会发现把 LLM 接进测试流程之后真正省下来的不是执行时间而是用例设计时间和脚本编写时间。UI 自动化也一样。过去用 Playwright 或 Selenium 写一条用例从定位元素到处理等待至少十几分钟。但如果让模型理解业务场景描述直接输出 Playwright 代码脚本从零到能跑时间可能压缩到原来的五分之一。这就是 AI 测试开发这个方向存在的根本意义——不是替代测试工程师而是把那些重复的、模式化的、消耗脑力的工作拿掉让人去解决真正复杂的问题。1.2 训练营围绕能上手干活而不是懂概念来设计很多线上的 AI 课程我扫过一眼就关掉了原因很简单讲了一堆 Transformer 原理、Attention 机制最后你还是不知道怎么写一个自动生成测试用例的工具。而这个训练营有一个特点它没有把重心放在模型原理上而是直接按测试开发岗位日常要交付的东西来切模块。我看了一下这套体系里的六大模块基本是这么分布的Python 编程基础与自动化测试框架、大模型应用开发Prompt 工程、LangChain 工作流、AI 辅助接口测试分析与生成、AI 辅助 UI 自动化测试基于 Playwright、AI Agent 实现测试任务闭环、真实项目实战与部署。每一个模块对应一种具体的交付物。也就是说学完一个模块你能交出一个可运行的工具或者脚本而不是只在笔记里多几个名词。1.3 适合什么人学以及学了之后能做什么从我带的团队经验来看最适合这条学习路径的是已经有一定测试基础但还没系统接触过 LLM 开发的人。你不需要懂机器学习但你需要懂测试流程本身——知道用例怎么设计、断言怎么写得合理、CI 流程怎么串。因为 AI 只是帮你加速流程上的判断力还是得自己来。另外那些已经在写接口自动化、UI 自动化的开发同学切过来也会很快。毕竟框架本身没变变的只是用例来源和脚本生成方式。训练营里 10 个实战项目基本覆盖了测试开发日常会接到的所有活接口测试工具、UI 自动化框架、测试数据生成器、缺陷分类助手、测试报告智能分析、自定义测试 Agent 等等。做完这些项目简历上能写的东西就很实了。2. 六大模块拆解不是知识罗列是一条完整的技能生产链如果只看课程大纲六大模块听起来跟常规培训没什么区别。但实际学下来或者带人学下来你会发现它是一条有先后逻辑的链条——每个模块都在为下一个模块做铺垫最终指向同一个目标让 AI 在测试流程里承担真实的、可交付的工作。2.1 第一模块自动化测试框架的底盘必须自己扎实这个模块不直接讲 AI而是把 Python 和测试框架的底子打好。重点不是语法而是 unittest/pytest 的体系、requests 写接口用例、Playwright/Selenium 写 UI 用例、数据驱动和关键字驱动的设计模式。为什么放到第一个因为后面所有 AI 生成的东西最终都要落到这些框架里跑起来。我自己带人的时候发现一个普遍问题很多人对 AI 生成代码的容忍度高到离谱生成出来报错了就丢回给 AI 改改三遍还不行就换个说法再生成。这实际上是把调试的活外包了但响应的质量取决于你能否看懂报错信息、知道怎么定位问题。所以框架和语言的基本功不可跳过。严格说第一个模块至少要达到不依赖 AI 也能写出一条完整用例的程度。2.2 第二模块大模型应用开发把重点放在 LangChain 工作流上这个模块是整个训练营跟传统自动化测试培训最大的分水岭。它从 Prompt 工程开始教你如何把一个模糊的需求变成模型能理解、能稳定输出的指令然后进入 LangChain 的工作流设计——怎么把读取测试用例文档、生成 Playwright 脚本、执行脚本、回传结果拆成多个步骤让模型只负责其中的某些环节。这里有个很关键的点不是所有步骤都适合丢给 LLM。比如 UI 元素的定位策略、执行流程的控制这些更适合用代码逻辑来处理而不是靠模型自由发挥。LangChain 在里面的作用是做编排——把代码函数和模型调用串起来形成一个完整的链路。你写一个读取 Excel 用例的函数让模型根据用例描述生成 Playwright 代码然后代码执行器去跑这个脚本最后再让模型分析失败日志。每一步都是可控的而不是把整个测试流程扔给一个 Agent 黑盒。2.3 第三、四模块接口测试和 UI 测试的 AI 化改造这两个模块分别对应测试开发最常做的两类工作。接口测试这一块核心是让 LLM 解析 API 文档OpenAPI/Swagger 格式自动生成接口测试用例和断言逻辑。我到目前为止见到的比较靠谱的做法是把接口的出入参描述以结构化文本喂给模型让它输出 pytest 风格的用例代码再由本地执行器运行。这里面最难的是断言怎么写——模型容易生成状态码 200这种过于表面的断言。所以要用 Prompt 约束它分析字段的约束条件比如类型、范围、必填项再生成精确断言。UI 测试这边落点是结合 Playwright。为什么选 Playwright 而不是 Selenium不只是因为它更现代化更关键的是它自带的 codegen 工具和 web-first 断言机制跟 LLM 生成代码的配合度更高。模型生成代码之后Playwright 可以自动等待元素出现这大大降低了脚本不稳定带来的挫败感。模块里一个典型的实践是给定业务步骤描述如用户登录后点击个人中心修改昵称并保存模型生成对应的 Playwright 脚本测试人员在本地微调并执行。2.4 第五、六模块Agent 闭环和项目实战把碎片能力整合成产品所谓 Agent 闭环通俗点说就是让系统具备接到任务—拆解—执行—反馈—修正的完整能力。比如你告诉它去跑一遍订单流程的回归测试。它会自己拆成多个步骤调测试框架执行用例发现失败后分析日志把结果汇总成报告。这一块非常依赖前面所有模块的综合能力因为你必须清楚每个环节的边界才能设计出靠谱的 Agent 工作流。第六模块则是把这些能力综合应用到真实项目里。训练营给的 10 个实战项目不是分散的而是从小到大、从工具到系统的递进。我建议学习的时候不要急着把项目全做完而是每做完一个都回头想想如果我用纯代码做要花多少时间为什么要 AI 来做这个问题想不清楚项目做得再多也还是停留在调 API的层面。3. 10 大实战项目从工具到系统的四层进阶路线10 这个数字挺容易让人误会的——以为是十个难度差不多的练习项目凑数。实际上我梳理了一下这些项目有明显的层次关系。按进阶路线看基本能分成四层。3.1 第一层AI 辅助的单项工具这层大概有三四个项目核心是一个小工具解决一个具体问题。比如基于 LLM 的接口测试数据生成器你给它一个字段描述它生成一批符合边界条件的测试数据再比如测试报告摘要工具把 pytest 的输出喂给模型让它生成定位到具体失败原因的分析结论。这类项目的最大的价值是让你建立信心——原来大模型真的能在测试流程里干活而且干得不赖。同时它们的技术门槛低不需要复杂的工作流编排一个 Prompt 加几十行代码就能跑起来。我建议学习时重点关注 Prompt 的设计质量因为后续所有项目里Prompt 都会像代码一样持续迭代。3.2 第二层自动化测试脚本生成器这层是训练营的重头戏也是面试里最能讲出亮点的项目。核心是基于 LangChain 搭建一个能读取测试用例、自动生成 UI 自动化测试脚本的 Agent。输入是业务侧的用例描述中文自然语言输出是可直接执行的 Playwright 脚本。这对应了搜索热词里基于 langchain 开发一个能读取测试用例自动生成 ui 自动化测试脚本的 agent这个核心方向。实现的时候有几个细节要注意。首先模型的输出不一定一次就对所以代码生成后要加一个静态检查环节——比如用 AST 解析确认没有语法错误再用 Playwright 的 linter 检查 API 调用是否合理。其次Playwright 脚本里最麻烦的是选择器策略模型生成的 XPath 经常意图正确但路径冗长。我自己会另外写一个选择器优化函数让代码在执行前自动尝试多种定位方式减少人工介入。这个阶段的产出物已经可以作为测试平台的插件来用实用性很强。3.3 第三层测试分析中的 LLM 深度介入到了这层AI 就不只是生成脚本了而是参与测试过程的分析侧。典型项目包括缺陷单智能分类与优先级推荐、基于历史用例的回归范围预测、UI 自动执行失败后的截图与日志联合分析。我印象最深的是失败分析这个项目。过去 UI 自动化跑挂了测试人员要开截图、翻日志、对比预期结果才能判断是前端改动、网络问题还是脚本失效。现在可以让模型同时读截图描述和日志内容给出可能的失败原因和置信度。这真的非常省时间尤其在大促前的回归阶段一晚上跑出几十条失败用例人工根本处理不过来。3.4 第四层定制化测试 Agent 与闭环系统最上面一层是把前面所有能力组装成一个完整系统。比如做一个面向业务团队的自然语言测试平台——业务人员用中文描述一个功能需求系统自动生成测试用例、生成 UI 自动化脚本、执行并返回报告。这个听起来很科幻但基于现在的 LangChain 生态和 Playwright是可以做出 demo 级别的闭环的。这类项目做下来的核心收获不是技术本身而是系统设计的权衡能力哪些环节可以交给模型自动处理哪些必须保留人工确认模型输出出错时的降级方案是什么执行结果如何反馈到一个可追踪的报表里。这些经验在真实团队里非常值钱。4. 核心实战基于 LangChain 和 Playwright 的 UI 自动化脚本生成 Agent这一节我直接把这个训练营最有代表性、也是被讨论最多的项目拆开讲——基于 LangChain 开发一个能读取测试用例、自动生成 UI 自动化测试脚本的 Agent。搜索热词里频繁出现的 Playwright 相关词也印证了这个方向是大家关注的焦点。我会给出设计思路、关键代码片段以及我在实操里反复调优的点。4.1 整体架构把生成、校验、执行、反馈拆成四个可独立迭代的环节我先说结论不要试图让模型一次性干完所有事。一个成熟的做法是拆成四个环节——用例读取与解析、脚本生成、静态校验与修复、执行与反馈。每个环节都对应一个 LangChain 的工具节点。第一个环节读取测试用例文件。格式一般选择 Markdown 或 Excel因为这两种格式结构清晰便于模型解析。每个用例包含用例 ID、前置条件、操作步骤、预期结果。第二步把用例内容组装到 Prompt 模板里要求模型生成 Playwright 脚本指定使用 pytest-playwright 插件遵循 Page Object 模式。第三步对生成的脚本做本地检查。这一步非常关键因为模型偶尔会使用不存在的 API 或者逻辑不完整的循环。最省事的方案是先让 Playwright 的 codegen 底层能力做辅助校验再跑 AST 语法检查。第四步执行用例并采集结果。执行失败时把异常信息重新喂给模型让它提出修复建议或者直接生成修复补丁。from langchain.tools import BaseTool from playwright.sync_api import sync_playwright class ScriptGenerator(BaseTool): name script_generator description 根据测试用例步骤生成 Playwright 脚本 def _run(self, case_step: str) - str: # 这里是调用 LLM 生成脚本的入口 # 实践中建议使用 ChatOpenAI 或本地部署的 Qwen 模型 prompt f 你是一个 Playwright 自动化测试专家。 请根据以下操作步骤生成 pytest 风格的 Playwright 测试脚本。 要求使用 page.goto、page.locator 等 API不要使用 page.wait_for_timeout。 步骤{case_step} result llm.invoke(prompt) return result.content4.2 Prompt 设计里最容易踩的坑和对应的解法Prompt 设计是这个项目里回报率最高的调优点。我踩过的最大的坑是用例描述含糊时模型倾向于自行脑补操作细节。比如用例写着进入个人中心页面模型不知道是从首页点击进入还是直接访问 URL生成出来的脚本五花八门。解决办法是在 Prompt 里强制要求如果用例描述中有跳转动作必须显式使用 page.goto如果描述中的定位目标不明确必须退出生成并提示人工补充元素信息。另一个常见问题是断言写得过于保守。模型默认生成元素可见文本存在这类低价值断言这会削弱 UI 自动化的意义。我的做法是在 Prompt 里给出一段高品质断言的示例——比如断言列表项数量、断言某个状态码请求成功、断言某项数据出现在表格中。这叫 few-shot 示例法比单纯写规则效果好得多。值得注意的是这类优化不是一次性的而是随着用例库的积累不断迭代的。4.3 执行反馈闭环让 Agent 具备自我修复的雏形当脚本执行失败时agent 不应该只是简单报错而应该拿着失败信息回到生成环节形成一个生成→执行→失败→修复→再执行的循环。我在实际项目中是这么做的捕获 pytest 输出的 traceback截取最后 30 行异常信息连同当前脚本内容和失败截图路径一起发给模型要求它分析是代码问题还是环境问题。如果是代码问题直接输出修复后的完整脚本如果是环境问题则返回明确的环境检查建议。这个闭环的实现难度不大但效果非常惊人。原本需要人工介入的脚本维护工作很大一部分可以自动化。团队里维护 UI 用例的同事从原来的每天追着脚本跑变成了只在关键节点做抽查和审核。pytest_result run_pytest_script(script_path) if pytest_result.returncode ! 0: fix_suggestion llm.invoke( f以下是测试失败信息{pytest_result.stderr}请给出脚本修复方案 ) apply_fix(script_path, fix_suggestion)4.4 本地模型部署在这套方案里的取值与代价项目里如果涉及敏感数据的测试环境远程 API 的调用就会有合规顾虑。这时候可以走本地部署这条路。搜热词里能看到AI 大模型本地部署配置AI 大模型本地部署相关搜索说明大家确实关心这一点。以 Qwen 系模型为例7B 级别的量化版本用一张消费级显卡就能跑起来处理 Playwright 脚本生成这种任务足够用了。不过本地部署一定是有代价的。最大的问题是代码生成质量不如大参数模型稳定。如果你对脚本的准确率要求很高我建议用本地模型远程模型双通道的方案——常规用例走本地模型复杂场景走远程模型。这个判断标准可以简单一点用例步骤少于三步的走本地多于五步或包含复杂断言的走远程。实践中这个切换逻辑用 LangChain 的 router 就能实现。5. AI 测试开发的边界哪些环节能自动化哪些必须人来把关整个训练营体系学下来你会清楚地感知到一个事实AI 在测试领域的角色更接近超级助理而不会是一个全能的独立的测试执行者。有些环节非常适合 AI 深度介入有些环节硬要让 AI 做反而会引入更多不确定性。5.1 适合 AI 深度介入的环节一是测试用例的批量生成。只要你把业务规则和接口约束描述清楚模型生成用例的速度和覆盖面都远超人工。尤其是边界值、异常分支这种容易遗漏的用例类型模型反而做得比人更系统。二是脚本的自动修复。UI 自动化失效一半以上是定位器失效或页面结构微调模型读报错信息定位问题的速度很快而且不受情绪影响。三是测试报告的智能解读。过去写测试总结报告要从几十个用例里抽氛围、找原因模型可以在几秒内给出结构化分析。5.2 必须人来把关的环节测试环境的稳定性和测试数据的可控性这两件事是 AI 替代不了的。比如一套用例在测试环境执行失败原因是数据被前一个脚本污染了模型从日志里很难判断这个因果关系。这时候还是得靠测试开发对环境的理解。另外核心业务的断言标准必须人来定。模型知道状态码 201代表创建成功但它不知道在你们公司的业务上下文里201 还要配合返回体里的某个业务字段才是真正的成功。我的建议是设置一个明确的人机分工线——凡是涉及业务规则判断的地方AI 只能给建议不能直接下结论凡是模式识别、文本转换、代码拼接这些环节放手让 AI 去做。这样既保证质量又能把人的精力省出来做更有价值的事情。5.3 现实中的效果预期把 AI 当成性能放大器而不是替代者跟很多测试朋友交流时我发现大家对 AI 的预期存在两种极端。一种是不屑一顾觉得 AI 生成的测试代码质量不行没法落地另一种是 PUA 自己觉得再不学 AI 就要失业了。这两种心态都不利于做事。我自己的体会是AI 在测试开发里的真实定位是打工人手里的性能放大器。它会放大你的产出效率也会放大你的盲区。基本功扎实、流程判断清晰的人用了 AI 工具效率提升 3 到 5 倍是正常的而如果你连自动化测试本身都还不熟AI 生成的代码报错后不知道怎么排查那效率反而会下降。所以回到训练营的设计逻辑它把六大模块安排在项目实战前面不是随意为之的——底子不牢AI 放大器只会把问题放大。6. 关于学习和实践的几条具体建议最后这部分我就不说什么大而全的框架了单纯分享一些我在实操和带人过程中觉得特别重要的细节。如果你想入这个方向或者已经在做 AI 测试开发下面这些可以直接当作行动清单来用。6.1 从最熟悉的自动化场景切入不要一上来就搭平台我见过不少人学完课程之后第一反应是搭一个全功能的 AI 测试平台把报告展示、CI 集成、权限管理全部规划进去。结果两三个星期过去平台骨架搭出来了业务侧的用例却还没接进去项目很容易烂尾。更务实的做法是先从你日常最痛的一个环节开始改造。比如你的接口用例里有大量参数组合要手工设计那就先写一个 AI 数据生成脚本如果你每天要花一小时分析失败的 UI 用例那就先做失败分析的小工具。小工具跑通一段时间后你会很自然地发现它需要跟现有流程结合这时候再考虑平台化也不迟。实战项目里真正锻炼人的恰恰是这些从一到十的扩展过程而不是搭空架子。6.2 把 Prompt 当代码来维护建立版本控制大部分测试开发在接触 AI 应用开发时对 Prompt 的重视程度都不够。实际上Prompt 是这个系统里最需要持续迭代的部分。接口文档变了、模型版本升级了、业务语言风格调整了都可能让 Prompt 失效。我建议把所有的 Prompt 模板放在独立的目录里跟随代码一起提交到 Git每次修改都写清楚变更原因。另外同一个任务可以准备两到三个不同风格的 Prompt 做对比测试。比如一个采用直接指令式一个采用角色扮演式跑同样一批用例数据看哪个生成的脚本质量更稳定。这种 A/B 验证的思路会让你对 AI 系统的可控性理解深入很多。6.3 无论用什么模型结果必须经过确定性校验这句话是整个 AI 测试开发最核心的原则大模型的输出带有随机性而测试工具必须具备确定性。你不能接受同一条用例上一次生成能跑的脚本下一次生成的脚本就报错。所以任何 LLM 参与生产环节的地方都必须加一道确定性校验的闸门。脚本生成后先做语法和静态检查测试数据生成后先过一遍约束校验报告摘要生成后要经过信息完整性检查。这其实是在回归测试开发的老本行——我们本来就是用系统性手段保障质量的。AI 是一个新的不确定源那么我们的工作就是把这种不确定源约束在可控的范围里。谁能把这件事做好谁就是未来团队里不可替代的人。最后分享一个我个人的实际操作体会这轮 AI 测试开发的浪潮真正拉开差距的不是你用了多先进的模型而是你有没有把测试流程本身拆解清晰再合理地分配给人力和模型。训练营里那 10 个实战项目表面上是练技术实际上练的是流程拆解能力和系统集成思维。把这套思路带回到日常工作里你手里的任何测试任务都会变得不一样。
返回列表