ARTICLE DETAIL

资讯详情

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

测试人转型AI测试开发:用LangChain搭建UI自动化脚本生成Agent

测试人转型AI测试开发:用LangChain搭建UI自动化脚本生成Agent 测试行业这两年最明显的变化不是工具变多了而是招聘JD里的要求变了。以前打开岗位描述清一色写着熟悉Selenium、Appium、Postman有接口自动化经验优先现在再刷越来越多的岗位开始加一条有AI测试开发经验者优先或者了解大模型应用能独立搭建测试智能体。这个信号其实很直白——不是测试这个岗位要消失了而是只会写脚本、只会点点点的那部分工作正在被重新定价。我带过几个从功能测试转过来的同学也见过不少在测试开发岗位上卡了三五年、想往上走却找不到突破口的人。大家普遍的困惑是AI测试开发到底是个什么东西是让我去学算法、调参、训模型吗还是说只是把AI当个高级工具用一用这个班要解决的问题就是把这层窗户纸捅破——测试人转型AI测试开发核心不是转行去做算法工程师而是把大模型能力嵌进你原本就熟悉的测试流程里让用例生成、脚本编写、缺陷分析、数据构造这些环节的效率发生质变。这篇文章我会把转型的底层逻辑、需要补的能力、以及一个能直接上手的实战项目用LangChain搭一个读用例自动生成UI自动化脚本的Agent完整拆开讲适合正在观望的测试人、想给团队引入AI能力的测试负责人以及刚入行想提前卡位的同学。1. 为什么测试转AI测试不是让你去卷算法1.1 先厘清一个被传歪了的概念很多人一听AI测试开发脑子里第一反应是完了要学高数、要学反向传播、要会PyTorch。这个理解偏差特别普遍也是很多人迟迟不敢动的根本原因。我先把结论摆出来企业招聘的AI测试开发岗绝大多数不是算法岗而是懂测试业务 会用大模型能力 能工程化落地的复合岗。这两者的区别用一句话就能说清。算法工程师关心的是这个模型本身准不准、怎么训练得更准AI测试开发关心的是怎么把已经训练好的模型接进我的测试流程解决我手头的具体问题。前者要造发动机后者要会开车、还得会改装车。你不需要知道发动机的燃烧室怎么设计但你要知道这车在什么路况下该挂什么挡、油耗高了该查哪里。所以转型的第一道门槛不是数学而是把测试问题翻译成AI能处理的任务。比如帮我写个登录页的自动化脚本翻译过来就是输入是用例描述文本输出是符合框架规范的代码中间需要一个能理解语义、能按模板生成结构化内容的模型。这个翻译能力恰恰是测试人最该练、也最容易练出来的。1.2 测试人的三个天然优势别自己丢掉我观察下来测试人转AI测试开发其实有三个别人抢不走的优势但很多人自己没意识到。第一个是对边界条件的敏感。做测试的人天生会想输入为空怎么办超长了怎么办并发的时候会不会出问题这种思维在做AI应用时极其值钱。因为大模型的输出是不稳定的同一个问题问两遍答案可能不一样普通开发可能写完就交差了但测试出身的人会本能地去设计各种异常输入去验证模型在极端情况下的表现。这就是所谓的对抗性测试思维在AI应用质量保障里是核心竞争力。第二个是对业务流程的熟悉。你测过电商的下单流程、测过金融的转账流程你知道哪个环节容易出bug、哪个字段是核心校验点。当你去设计一个AI测试助手的时候你能准确地告诉它重点检查这几个地方而不是泛泛地让它生成测试用例。这种业务理解是纯算法背景的人短时间补不上的。第三个是工程化的落地习惯。测试开发本来就天天跟CI/CD、跟脚本、跟报告打交道你知道一个工具怎么才能真正被团队用起来——不是demo跑通就行而是要能集成进流水线、要有清晰的日志、要能复现问题。这个习惯决定了你做的AI工具是玩具还是生产力。1.3 市场到底在为什么样的能力买单我把近期看到的AI测试相关岗位要求做了个粗略归类大致能分成三档你可以对照看看自己在哪一档。能力档位典型要求对应薪资区间参考转型难度入门应用层会用大模型辅助写用例、写脚本了解Prompt基本技巧与普通测开持平或略高低1-2个月可上手工程落地层能基于LangChain等框架搭建测试Agent能集成进现有流程明显高于普通测开中需3-6个月项目积累平台架构层能设计企业级AI测试平台懂模型选型、成本控制、效果评估对标高级测开/技术专家高需1年以上深耕大部分测试人转型目标应该锁定在第二档——工程落地层。这一档的需求量最大而且它不要求你从零造轮子市面上成熟的框架和API足够你搭出可用的东西。第一档太浅容易被当成会用工具而不是有能力第三档太深投入产出比对多数人不划算。把第二档吃透你就已经甩开一大半同行了。2. 转型路上真正要补的四块能力2.1 大模型交互能力从会聊天到会指挥很多人觉得自己天天用AI聊天这关应该没问题。但会聊天和会指挥模型干活是两码事。聊天是你问它答随意性很强而工程化使用要求你把模糊的需求变成精确的指令并且让输出稳定可控。这里最核心的技能是Prompt工程但我不想把它讲得玄乎。说白了就是三件事把角色说清楚、把任务拆明白、把输出格式定死。举个例子你要模型生成测试用例差的写法是帮我写一下登录功能的测试用例好的写法是你是一名资深测试工程师请针对用户名密码登录功能从正常场景、异常场景、边界场景三个维度生成测试用例每条用例包含用例编号、前置条件、操作步骤、预期结果用Markdown表格输出。差别在哪后者限定了角色影响语气和专业度、限定了维度避免遗漏、限定了格式方便后续程序解析。我实测下来加了格式约束之后输出的可用率能从三成提到七成以上。这个提升不是模型变聪明了而是你把要求说清楚了。还有一个容易被忽略的点是温度参数temperature的控制。做测试用例生成这种需要稳定输出的任务温度要调低一般0.2到0.3比较合适太高了每次生成的东西都不一样没法做回归而如果是做头脑风暴、想让它多给几个思路温度可以调到0.7以上。这个参数怎么调后面实战部分我会给具体配置。2.2 框架与工具链LangChain为什么值得先学大模型本身只是个大脑它记不住上下文、连不上你的数据库、也没法调用外部工具。要让它真正干活需要一个骨架把它和外部世界连起来LangChain就是目前最主流的这类框架之一。我推荐测试人先学LangChain理由很实在它的抽象层次刚好既不用你从零写HTTP请求调API又不会把你完全框死。它的几个核心概念用测试的语言翻译一下就很好懂PromptTemplate相当于你的用例模板把变量填进去就生成完整指令。LLM/ ChatModel就是那个大脑负责根据指令产出内容。OutputParser相当于断言器把模型输出的自然语言解析成程序能用的结构化数据。Chain把上面几个串起来形成一条完整的处理流水线类似你的测试执行链。Agent更高级的形态能自己决定调用哪个工具、按什么顺序执行这就是我们后面要做的测试智能体。你看这些概念和测试里的模板、执行、断言、流程编排几乎是一一对应的。你不是在学一个陌生的东西你是在用新的方式重组你已经会的技能。这个心态转变过来学习曲线会平缓很多。2.3 工程化能力让AI工具真正跑在流水线里Demo跑通和真正能用中间隔着一条河。我见过太多人做了个输入用例、输出脚本的小工具自己玩得挺开心但一放到团队里就没人用。问题出在哪通常是这几个没有错误处理模型偶尔抽风返回一堆废话程序直接崩了没有兜底。没有缓存机制同样的用例反复生成白白烧钱。没有人工审核环节AI生成的脚本直接提交出了bug没人负责。没有效果度量用了一个月说不清到底省了多少时间、生成质量如何。这些恰恰是测试人的强项。你在做自动化测试的时候不也要考虑失败重试、用例管理、报告统计吗把这套思路搬到AI工具上你的工具就能从个人玩具升级成团队资产。工程化能力是测试人转型AI测试开发时最容易被低估、但实际最值钱的一块。2.4 数据与评估能力怎么证明你的AI工具靠谱这是最容易被跳过、但决定你能不能往上走的一环。AI的输出不像传统程序那样非黑即白它可能看起来对但实际错也可能这次对下次错。你得有一套方法去衡量它到底靠不靠谱。我的做法是建一个小规模的评估集。比如做脚本生成我就挑20条有代表性的测试用例人工写好标准答案然后让AI生成对比准确率。每次调整Prompt或者换模型都跑一遍这个评估集看指标是涨了还是跌了。这套方法不复杂但它能让你在跟领导汇报的时候拿得出生成准确率从65%提升到82%这样的硬数据而不是空口说挺好用的。评估维度我一般看三个正确性生成的脚本能不能跑通、完整性该覆盖的步骤有没有漏、规范性符不符合团队的代码风格。这三个维度各占多少权重根据你的实际场景定。有了这套评估你做的AI工具才算真正可交付。3. 一个能直接上手的实战用LangChain搭测试脚本生成Agent3.1 需求拆解这个Agent到底要干什么我们来做点实在的。目标很明确输入一段自然语言的测试用例描述输出一段可以直接运行的UI自动化测试脚本。这个场景在真实工作里价值很高因为写UI脚本最耗时的就是那些重复的定位、点击、断言代码而这些恰恰是模式化程度最高、最适合交给AI的部分。先把需求拆细。一个完整的处理流程应该包含这几步读取测试用例文本可能来自Excel、来自用例管理平台、或者直接手输。理解用例的意图要测什么页面、做什么操作、验证什么结果。按照目标框架的规范生成脚本代码。对生成的代码做基本校验语法对不对、有没有明显遗漏。输出结果并保留人工审核的入口。这里有个关键决策用什么框架作为生成目标。我选Playwright原因有三个。一是它的API设计现代、语义清晰模型学起来容易生成质量相对高二是它自带等待机制生成的脚本不容易因为时序问题而失败减少了后期调试成本三是它的选择器策略灵活模型可以根据用例描述选择合适的方式定位元素。当然如果你的团队用的是Selenium把Prompt里的框架规范换掉就行思路完全一样。3.2 环境准备与依赖安装动手之前把环境搭好。我假设你已经会Python基础不会也没关系跟着敲就行。# 创建虚拟环境避免污染全局 python -m venv ai_test_env source ai_test_env/bin/activate # Windows用 ai_test_env\Scripts\activate # 安装核心依赖 pip install langchain langchain-openai playwright openpyxl python-dotenv # 安装Playwright的浏览器驱动 playwright install chromium这里解释几个关键依赖的作用。langchain是主框架langchain-openai是模型接入层如果你用其他模型换成对应的包即可playwright是目标测试框架openpyxl用来读Excel用例python-dotenv用来管理API密钥这类敏感配置。注意API密钥千万不要硬编码在代码里也不要提交到代码仓库。用.env文件管理并且把.env加进.gitignore。这是工程化的基本素养也是很多新手容易栽跟头的地方。.env文件长这样OPENAI_API_KEY你的密钥 OPENAI_BASE_URL你的接口地址3.3 核心链路搭建从用例文本到可执行脚本先搭最基础的链路把读用例→生成脚本这条线跑通。我把它拆成三个模块Prompt模板、模型调用、输出解析。import os from dotenv import load_dotenv from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser load_dotenv() # 1. 初始化模型温度调低保证输出稳定 llm ChatOpenAI( modelgpt-4o, # 按你实际可用的模型替换 temperature0.2, api_keyos.getenv(OPENAI_API_KEY), base_urlos.getenv(OPENAI_BASE_URL) ) # 2. 定义Prompt模板 prompt ChatPromptTemplate.from_messages([ (system, 你是一名资深的UI自动化测试工程师精通Playwright框架。 你的任务是根据测试用例描述生成可直接运行的Playwright Python脚本。 生成规范 1. 使用 sync_playwright 同步API 2. 每个测试步骤都要有对应的操作代码和注释 3. 使用 expect 做断言不要用 assert 4. 元素定位优先用 get_by_role、get_by_label 等语义化方式 5. 脚本要包含完整的页面打开和关闭逻辑 6. 只输出Python代码不要输出任何解释性文字), (human, 请根据以下测试用例生成Playwright脚本\n\n{test_case}) ]) # 3. 组装链路 chain prompt | llm | StrOutputParser() # 4. 测试一下 test_case 用例编号LOGIN-001 用例名称正常登录 前置条件已打开登录页面 操作步骤 1. 在用户名输入框输入 testuser 2. 在密码输入框输入 Test123456 3. 点击登录按钮 预期结果页面跳转到首页显示欢迎信息 result chain.invoke({test_case: test_case}) print(result)跑一下这段代码你应该能看到生成的Playwright脚本。如果第一次跑不通八成是模型配置或者网络的问题先确认API能正常调用。这里有个细节值得说为什么用ChatPromptTemplate而不是简单的字符串拼接。因为前者把system和human的角色分开了模型对system指令的遵循度明显更高。我实测过同样的内容放在system里比放在human里生成质量能高出一截。这个技巧在做任何需要模型守规矩的任务时都适用。3.4 加上工具调用让Agent自己决定怎么处理上面那条链路是一条道走到黑但真实场景里用例的格式可能五花八门有的来自Excel有的是纯文本有的甚至需要先查一下页面元素。这时候就需要Agent出场了——它能根据输入情况自己决定调用哪个工具。我们给它配两个工具一个读Excel用例一个做代码语法检查。from langchain.tools import tool from langchain.agents import AgentExecutor, create_openai_tools_agent import openpyxl import ast tool def read_excel_cases(file_path: str) - str: 读取Excel文件中的测试用例返回文本格式的用例内容。 Excel格式要求第一列用例编号第二列用例名称第三列操作步骤第四列预期结果。 wb openpyxl.load_workbook(file_path) ws wb.active cases [] for row in ws.iter_rows(min_row2, values_onlyTrue): if row[0]: cases.append(f用例编号{row[0]}\n用例名称{row[1]}\n操作步骤{row[2]}\n预期结果{row[3]}) return \n\n.join(cases) tool def check_python_syntax(code: str) - str: 检查Python代码的语法是否正确返回检查结果。 try: ast.parse(code) return 语法检查通过 except SyntaxError as e: return f语法错误{e}有了工具再组装Agenttools [read_excel_cases, check_python_syntax] agent_prompt ChatPromptTemplate.from_messages([ (system, 你是一名AI测试开发助手。你可以使用工具来读取测试用例文件 并根据用例内容生成Playwright自动化测试脚本。 生成脚本后请调用语法检查工具验证代码正确性。 如果语法有问题请修正后重新检查。), (human, {input}), (placeholder, {agent_scratchpad}) ]) agent create_openai_tools_agent(llm, tools, agent_prompt) agent_executor AgentExecutor(agentagent, toolstools, verboseTrue) # 使用 result agent_executor.invoke({ input: 请读取 cases.xlsx 中的测试用例为每条用例生成Playwright脚本并检查语法 }) print(result[output])这个Agent的价值在于它有了自主性。你不需要写死先读文件再生成再检查的流程它会自己判断。输入是文件路径它就调读Excel的工具生成完代码它会主动去调语法检查。这种灵活性是普通Chain给不了的。不过要提醒一句Agent不是越自主越好。自主性越高不确定性也越大调试起来越麻烦。我的经验是流程固定的任务用Chain需要根据情况分支的任务才用Agent。别为了炫技而用Agent那是给自己找麻烦。3.5 实测效果与调优记录我把这套东西在真实项目里跑了一段时间说几个实测数据和调优过程。第一版跑下来生成的脚本能直接运行的比例大概在六成左右。失败的原因主要有三类元素定位方式不对占一半以上、等待逻辑缺失占三成、断言写得不准占两成。针对这三类问题我做了几轮Prompt优化针对定位问题在system里明确要求优先使用get_by_role和get_by_label避免使用XPath定位准确率明显提升。针对等待问题要求在关键操作后加上expect等待不要用sleep脚本稳定性好了很多。针对断言问题给了几个断言的标准写法示例让模型照着模仿。优化之后直接可运行的比例提到了八成五左右。剩下的那一成半基本是业务逻辑特别复杂、或者页面元素命名特别不规范的用例这种本来人工写也费劲交给AI不现实。这里有个心得给模型几个标准答案当范例比写一堆规则描述管用得多。这叫few-shot是Prompt工程里性价比最高的技巧之一。你不需要解释什么叫好的断言直接给它两三个好断言的例子它自己就学会了。4. 落地到团队时踩过的坑和应对4.1 别指望AI一步到位人机协作才是正解我见过最典型的失败案例是有人想做个全自动的系统用例进去、脚本出来、直接提交、自动执行中间不要人管。结果呢生成的脚本有一半跑不通跑不通的还得人去查反而比手写还累。正确的姿势是把AI定位成高级助手而不是替代者。它负责生成初稿人负责审核和修正。这个定位下效率提升是实打实的——原来写一条脚本要15分钟现在AI生成加人工审核5分钟搞定而且人做的是审核这种相对轻松的活不是从零开始敲代码。我在团队里推的时候专门设了一个审核关卡AI生成的脚本必须经过人工确认才能进用例库。这个关卡看起来降低了自动化程度但实际上它保证了质量也让团队成员对AI工具有信任感。信任是一点点建立的别一上来就搞全自动出了事整个项目都会被质疑。4.2 成本控制别让API账单吓到领导大模型调用是要花钱的这个成本如果不控制很容易失控。我踩过的坑是早期没做缓存同一条用例反复生成一个月下来账单比预期高了好几倍。后来加了几个措施。一是结果缓存同样的输入直接返回缓存结果不重复调用。二是批量处理把多条用例合并成一次请求减少调用次数。三是分级使用简单的用例用便宜的小模型复杂的才用大模型。四是设置预算上限超过阈值就告警。import hashlib import json cache {} def get_cache_key(test_case: str) - str: return hashlib.md5(test_case.encode()).hexdigest() def generate_with_cache(test_case: str): key get_cache_key(test_case) if key in cache: return cache[key] result chain.invoke({test_case: test_case}) cache[key] result return result这几招下来成本降了大概六成。成本意识是工程化思维的一部分做AI工具不能只看效果不看代价这一点在跟领导汇报的时候尤其重要。4.3 效果评估怎么用数据说话前面提过要建评估集这里说具体怎么落地。我建了一个20条用例的小评估集覆盖了登录、搜索、下单、支付等几个典型场景每条都有人工写好的标准脚本。每次调整Prompt或者换模型就跑一遍统计三个指标评估指标定义目标值语法通过率生成脚本能通过语法检查的比例≥95%可运行率脚本能实际跑通的比例≥80%步骤覆盖率用例步骤被正确实现的比例≥90%有了这三个指标你就能客观地判断一次改动是变好了还是变差了。我遇到过好几次感觉变好了但指标其实降了的情况全靠这套评估集才发现。凭感觉调Prompt是大忌一定要有数据支撑。4.4 团队推广从一个人用到一群人用工具做好了怎么让团队用起来这是另一门学问。我的经验是先找一两个愿意尝鲜的同事一起用做出效果再推广。别一上来就全员推那样阻力大、问题多容易夭折。具体做法是先在小范围试点收集反馈把明显的坑填掉然后做一次内部分享用真实的数据展示效果比如这个月我们用它生成了200条脚本节省了XX小时最后把它集成进现有的工作流让大家在不知不觉中就用上了。推广的关键不是工具多牛而是让大家觉得用了确实省事。还有一点要做好文档和培训。我见过太多工具因为没人会用而荒废。写一份简单的使用说明录个几分钟的操作视频比什么都管用。5. 给不同阶段测试人的转型建议5.1 功能测试同学先补编程再谈AI如果你现在主要做功能测试编程基础比较薄弱我的建议是别急着上AI先把Python基础打牢。AI测试开发再怎么变底层还是写代码你连循环和函数都写不利索学LangChain就是空中楼阁。具体路径花一到两个月把Python基础语法、常用库requests、pytest过一遍能独立写个简单的接口自动化脚本。有了这个底子再学LangChain就顺了。顺序不能反基础不牢学啥都费劲。5.2 测试开发同学你离AI测试开发只差一层窗户纸如果你已经在做测试开发会写自动化框架那转型对你来说真的不难。你缺的不是编程能力而是对大模型能力的认知和使用经验。建议你直接从这个实战项目入手把Agent搭起来跑通然后想想怎么用到你现有的工作里。你原有的框架设计能力、工程化能力在AI测试开发里全都是加分项。你不需要推倒重来只需要在现有技能树上嫁接一个新分支。5.3 测试负责人怎么给团队引入AI能力如果你是带团队的想给团队引入AI测试能力我的建议是先自己搞懂再带着团队搞。你自己都没跑通过一个Agent怎么指导别人先花时间把这个实战项目做一遍踩过的坑记下来然后挑一两个有潜力的同学一起做形成小范围的最佳实践再逐步推广。另外别把AI当成KPI硬压。强制要求每人每月用AI生成多少脚本只会催生一堆应付了事的垃圾数据。正确的做法是创造使用的场景和便利让大家自发地用起来。6. 关于这个班我想说的几句实在话市面上讲AI的课很多但专门针对测试人转型的、能落到具体项目上的确实不多。这个班的设计思路就是不跟你扯虚的直接带你把这个Agent从零搭出来跑通再讲怎么用到真实工作里。学完之后你手里会有一个能拿得出手的项目面试的时候能讲清楚我做过什么、怎么做的、效果如何这比背一堆概念有用得多。我也不想把它包装成学完就能年薪百万那种。转型是个过程这个班能帮你把路走对、把基础打牢、把第一个项目做出来剩下的靠你在实际工作里持续积累。测试这个行业从来都是靠真本事吃饭的AI时代也一样。如果你还在观望我的建议是先动手把文章里这个项目跑一遍。跑通了你自然就知道自己缺什么、该补什么也就知道这个方向适不适合自己了。观望的成本往往比试错的成本更高。
返回列表