网易首页 > 网易号 > 正文 申请入驻

Agent+LangChain的自动化测试全链路

0
分享至

作为一名测试工程师,你是否经历过这样的场景:

● 加班加点写好的UI自动化脚本,因为前端一个按钮ID变更就全部失效;

● 为了覆盖一个边界条件,绞尽脑汁设计测试用例,结果上线后依然出现漏测;

● 发现一个偶现缺陷,复现步骤写了半小时,开发却说“我这边复现不了”……



这些痛点,正在被LangChain + 大模型Agent彻底改变。本文将通过三个核心生产级案例,展示智能体如何让测试自动化迈入全新境界,让测试工程师真正告别“脚本维护地狱”和“点点点”的重复劳动。

测试工程师的三大核心痛点

与Agent的破局之道



下面,我们通过三个完整案例,逐一拆解Agent如何攻克这些难题,并深度融入自动化测试的各个环节。

案例一:智能用例生成与CI/CD集成

从需求文档到自动化测试全链路

痛点还原

产品经理发来一份2000字的需求文档,描述了一个“优惠券叠加使用”的功能。你需要:

● 理解所有业务规则(满减券、折扣券、互斥条件、优先级)

● 设计正常场景、异常场景、边界场景(至少50+用例)

● 将用例转化为自动化脚本(Pytest/Playwright)

● 将脚本集成到CI/CD流水线,并维护测试数据

传统方式下,这是一个耗时且容易遗漏的过程。

Agent解决方案:构建“测试设计Agent”

该Agent能够:

● 读取需求文档(PDF/Word/Markdown)

● 提取业务规则,构建决策表和状态转换图

● 自动生成Gherkin场景(Given-When-Then)

● 输出可直接运行的Pytest参数化脚本

● 同时生成测试数据配置文件和Jenkins/GitLab CI流水线片段



实现原理(基于LangChain)

from langchain.agents import create_agentfrom langchain.tools import toolfrom langchain_community.document_loaders import PDFLoaderfrom langchain_core.prompts import ChatPromptTemplate@tooldef extract_business_rules(doc_path: str) -> dict: """从需求文档中提取规则,输出结构化规则集""" loader = PDFLoader(doc_path) pages = loader.load() prompt = ChatPromptTemplate.from_template(""" 从以下需求中提取业务规则,输出JSON格式: - 条件(Condition) - 动作(Action) - 互斥关系(Exclusion) - 优先级(Priority) 需求内容:{content} """) response = llm.invoke(prompt.format(content=pages[0].page_content)) return json.loads(response.content)@tooldef generate_decision_table(rules: dict) -> list: """根据规则生成决策表,覆盖所有条件组合(使用Pairwise或全组合算法)""" # 使用组合测试算法生成最小有效用例集 pass@tooldef generate_pytest_code(scenarios: list, test_data: dict) -> str: """生成pytest参数化测试代码,并附带数据驱动文件""" code_template = """import pytestimport jsonfrom utils.test_helpers import setup_coupon_test@pytest.mark.parametrize("case", json.load(open("test_data/coupon_cases.json")))def test_coupon_stack(case): # 从配置文件加载环境 # 执行操作 # 断言 pass""" return code_template@tooldef generate_ci_pipeline(test_files: list) -> str: """生成GitLab CI或Jenkinsfile,包含测试阶段、并行执行、报告归档""" yaml = """stages: - testtest: stage: test parallel: matrix: - BROWSER: [chrome, firefox] DEVICE: [desktop, mobile] script: - pytest {test_files} --browser=$BROWSER --device=$DEVICE --junitxml=report.xml artifacts: reports: junit: report.xml""" return yamlagent = create_agent( model="gpt-4o", tools=[extract_business_rules, generate_decision_table, generate_pytest_code, generate_ci_pipeline], system_prompt="你是一位资深测试架构师,擅长将需求转化为可执行的自动化测试全链路。")# 输入需求文档路径,一键生成所有产物result = agent.invoke({ "messages": [("user", "分析 docs/coupon_requirement.pdf,生成完整的测试代码、测试数据、CI配置")]})

深度集成:自动化测试的完整闭环

●测试数据自动生成:Agent根据规则生成边界值、等价类、异常数据,并输出为JSON/CSV,供数据驱动测试使用。

●环境配置管理:Agent可读取docker-compose.yml或K8s配置,生成测试环境的初始化脚本(如准备测试账号、清空缓存、预置优惠券数据)。

●并行执行策略:Agent根据用例之间的依赖关系(通过分析共享状态)自动划分可并行的用例组,生成pytest-xdist的配置。

●失败重试与自愈:在生成的测试代码中,Agent可注入重试装饰器(如@pytest.mark.flaky(reruns=2)),并对常见网络超时、元素未加载等问题预设等待策略。

●CI/CD集成:Agent生成的流水线文件支持多浏览器、多设备矩阵运行,并将测试报告(JUnit、Allure)自动归档,同时触发钉钉/飞书通知。

通过上述设计,原本需要人工编写的测试代码、数据、配置、CI文件,现在全部由Agent自动生成,测试人员只需审核和微调。

案例二:永不失效的UI测试

自适应UI自动化+多模态智能断言

痛点还原

传统UI自动化脚本使用固定定位符(ID、XPath),前端任何微小改动都会导致脚本崩溃。维护成本占自动化总成本的50%以上。

此外,传统断言只能验证文本或属性,无法检测视觉错位、颜色对比度不足、文字截断等UI缺陷。

Agent解决方案:构建“自适应UI自动化Agent”

该Agent具备:

●语义定位:根据自然语言描述(如“页面上的登录按钮”)实时识别元素,不依赖固定ID

●多模态理解:同时分析截图和DOM树,理解UI的视觉和结构

●智能断言:对比基准截图,发现布局异常、文字溢出、颜色错误等视觉缺陷

●自适应等待:根据页面动态加载情况自动调整超时,而非硬编码sleep



实现原理

from langchain.agents import create_agentfrom langchain.tools import toolfrom selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC@tooldef semantic_find(description: str, timeout: int = 10) -> dict: """根据自然语言描述找到元素,返回坐标和DOM路径,支持动态等待""" driver = webdriver.Chrome() # 轮询页面变化,直到元素出现或超时 for _ in range(timeout): screenshot = driver.get_screenshot_as_base64() dom = driver.page_source response = llm.invoke([ ("system", f"在截图中找到{description},输出元素中心点坐标和XPath"), ("user", [{"image": screenshot}, {"text": dom}]) ]) if response.get("found"): return response time.sleep(1) raise Exception(f"Element '{description}' not found after {timeout}s")@tooldef visual_assert(expected_screenshot_path: str, threshold: float = 0.95) -> str: """对比当前页面与基准截图,返回视觉差异描述,支持像素容忍度""" current = driver.get_screenshot_as_base64() expected = base64.b64encode(open(expected_screenshot_path, "rb").read()).decode() # 使用OpenCV进行结构相似性(SSIM)比较 diff = cv2.compare_ssim(expected, current) if diff < threshold: # 进一步用LLM解释差异区域 explanation = llm.invoke(f"解释以下差异区域:{diff['regions']},用测试报告语言描述") return f"视觉断言失败(相似度{diff:.2f}):{explanation}" return f"视觉一致(相似度{diff:.2f})"@tooldef execute_parallel_on_browsers(instruction: str, browsers: list) -> dict: """在多浏览器(Chrome, Firefox, Safari)上并行执行同一指令,汇总结果""" from concurrent.futures import ThreadPoolExecutor def run_on_browser(browser_name): # 动态创建WebDriver实例 driver = create_driver(browser_name) result = agent.invoke(...) # 递归调用 driver.quit() return result with ThreadPoolExecutor() as executor: results = executor.map(run_on_browser, browsers) return dict(zip(browsers, results))agent = create_agent( model="gpt-4-vision", tools=[semantic_find, visual_assert, execute_parallel_on_browsers], system_prompt="你是自适应UI自动化Agent,根据自然语言指令执行操作并验证视觉表现,支持多浏览器并行。")# 测试脚本示例agent.invoke({ "messages": [ ("user", "在Chrome、Firefox、Safari上同时执行:点击登录按钮,输入用户名test,点击提交,然后验证首页欢迎语,并对比基准截图") ]})

深度集成:UI自动化的工程化实践

1.多模态定位的鲁棒性增强:

● Agent内部维护一个短期记忆,记录最近成功定位的元素特征(截图patch + DOM子树),当页面发生微小变化时,可通过相似度匹配快速定位,无需每次调用LLM。

●支持CSS选择器备选:如果语义定位失败,Agent可尝试根据历史经验生成多个可能的XPath,并用试探性点击验证。

2.视觉回归测试的自动化基线管理:

● Agent可与Git LFS集成,自动管理基准截图版本。当UI有意变更时,测试人员只需在Agent对话中输入“更新登录页面的基准截图”,Agent会自动替换旧截图并提交到Git。

●支持差异区域标注:Agent将差异区域用红色边框标出,并生成HTML报告,方便人工快速审核。

3.跨浏览器并行执行与结果聚合:

● 利用pytest-xdist或Selenium Grid,Agent动态分配测试任务到不同节点,并将各浏览器的执行日志、截图、性能数据聚合到一个Allure报告中。

● Agent还能自动判断某些缺陷是否为特定浏览器特有(如“仅在Safari上出现布局错位”),并在报告中高亮。

4.失败自愈机制:

● 当元素定位失败时,Agent会尝试重新加载页面、清除缓存、切换网络代理等恢复步骤。

● 若断言失败,Agent会主动捕获控制台错误和网络请求,分析是否为后端接口问题,而非UI本身问题,从而避免误报。

5.性能测试集成:

● 在UI操作过程中,Agent可同时采集LCP、FID、CLS等Web Vitals,并与基准值比较,发现性能退化。例如:“点击结算按钮后,页面响应时间从200ms增加到800ms”。

通过上述设计,UI自动化脚本从“脆弱的固定脚本”进化为“具有感知、适应、自愈能力的智能体”,彻底消除了维护成本。

☑️想涨薪、想走得更远,最稳妥的办法永远是投资自己的技能。

☑️可如果行业的天花板已经压到头顶,与其在原地内卷,不如借AI的东风换个赛道。

☑️软件测试,正是个低门槛、高成长的方向。

即可加入——>【个人号绿泡泡:annasea0928】领转行、入门、提升、需要的各种干货资料

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
商家拒收数字人民币,一句“没开通”能免责吗?

商家拒收数字人民币,一句“没开通”能免责吗?

马俊哲律师
2026-10-28 11:43:46
这一回中国真要杀鸡给猴看,挑中的是荷兰。不是美国,不是日本,不是菲律宾,是荷兰

这一回中国真要杀鸡给猴看,挑中的是荷兰。不是美国,不是日本,不是菲律宾,是荷兰

扶苏聊历史
2026-10-26 14:36:51
皇马官方声明道歉:俱乐部和姆巴佩一同公开道歉!对中国怀有深深敬意

皇马官方声明道歉:俱乐部和姆巴佩一同公开道歉!对中国怀有深深敬意

念洲
2026-10-28 17:29:35
台“防长”顾立雄发表严正声明

台“防长”顾立雄发表严正声明

果妈聊娱乐
2026-10-28 08:25:16
你在公司捞过的最大油水是什么?网友:车在我名下,老板跑路了

你在公司捞过的最大油水是什么?网友:车在我名下,老板跑路了

夜深爱杂谈
2026-10-26 21:11:13
10月28号收评:三大指数全天放量上涨,明天是红色星期四?还是黑色星期四?

10月28号收评:三大指数全天放量上涨,明天是红色星期四?还是黑色星期四?

春江财富
2026-10-28 15:20:35
莱阳战役,纵队司令成钧亲率敢死队,谭震林:敢胡来就开除你党籍

莱阳战役,纵队司令成钧亲率敢死队,谭震林:敢胡来就开除你党籍

漫步史书
2026-10-27 17:36:47
自媒体人"徽剑" 因曝光电诈骨干被灭口,谁透露了他的地址、照片、车牌号?

自媒体人"徽剑" 因曝光电诈骨干被灭口,谁透露了他的地址、照片、车牌号?

新商业派
2026-10-27 13:52:30
中期选举前夕民调出炉:特朗普支持率脱离低点,民主党大概率赢下众议院

中期选举前夕民调出炉:特朗普支持率脱离低点,民主党大概率赢下众议院

财联社
2026-10-27 11:54:19
西部排名大变脸!4队全胜,火箭排第1,掘金掉到第10,勇士倒数第4

西部排名大变脸!4队全胜,火箭排第1,掘金掉到第10,勇士倒数第4

大卫的篮球故事
2026-10-28 18:57:55
宝马设计是进步还是退步?1968年宝马E9 2800 CS赛博改装

宝马设计是进步还是退步?1968年宝马E9 2800 CS赛博改装

玩车改装分享
2026-10-27 11:24:04
外交部回应姆巴佩道歉!有人算了笔账:24小时蒸发约1.6亿,还能挽回吗?

外交部回应姆巴佩道歉!有人算了笔账:24小时蒸发约1.6亿,还能挽回吗?

上观新闻
2026-10-28 16:40:51
杨瀚森两场NBA未出场!开拓者探花郎现形:37分钟10中1,6分5失误

杨瀚森两场NBA未出场!开拓者探花郎现形:37分钟10中1,6分5失误

球场没跑道
2026-10-28 14:35:18
内塔尼亚胡阵营丢14席,对手却卡在61席门槛外

内塔尼亚胡阵营丢14席,对手却卡在61席门槛外

爬虫饲养员
2026-10-28 04:13:11
"丧尽天良!"西安挖出秦始皇女儿的陵墓,墓里的惨状,连考古专家都倒吸一口凉气

"丧尽天良!"西安挖出秦始皇女儿的陵墓,墓里的惨状,连考古专家都倒吸一口凉气

扶苏聊历史
2026-10-27 16:08:24
真心补不起啊!高三数学一对一两小时报价6000元,一小时3000元,家长直呼无力承担,评论区炸锅

真心补不起啊!高三数学一对一两小时报价6000元,一小时3000元,家长直呼无力承担,评论区炸锅

火山詩话
2026-10-26 08:37:00
男子和四十多岁女网友认识后,频繁发生关系,最后一次在车内,男子死亡后家属向女子索要巨额赔偿

男子和四十多岁女网友认识后,频繁发生关系,最后一次在车内,男子死亡后家属向女子索要巨额赔偿

丫头舫
2026-10-13 22:10:25
名记:皇马内部不理解姆巴佩发声明为何不通过俱乐部,俱乐部认为处理类似事情更有经验

名记:皇马内部不理解姆巴佩发声明为何不通过俱乐部,俱乐部认为处理类似事情更有经验

尘语者
2026-10-28 17:07:59
昭通小伙担心婚礼冷清邀网友喝喜酒,数百人赶来撑场面,有人送冰柜也有人送整头猪,村干部:已安排工作人员帮忙维持秩序

昭通小伙担心婚礼冷清邀网友喝喜酒,数百人赶来撑场面,有人送冰柜也有人送整头猪,村干部:已安排工作人员帮忙维持秩序

极目新闻
2026-10-28 18:28:28
大冷!14亿欧阿森纳遭英乙第18名淘汰:身价是对方500倍 无缘4冠王

大冷!14亿欧阿森纳遭英乙第18名淘汰:身价是对方500倍 无缘4冠王

风过乡
2026-10-28 06:35:40
2026-10-28 19:20:49
51Testing软件测试网 incentive-icons
51Testing软件测试网
中国软件测试人的精神家园
1669文章数 13285关注度
往期回顾 全部

科技要闻

AI世界开口说话!谷歌新模型Genie 4有多神

头条要闻

新郎是孤儿担心婚礼冷清邀网友来撑撑场面 数百人到场

头条要闻

新郎是孤儿担心婚礼冷清邀网友来撑撑场面 数百人到场

体育要闻

0胜4负与篮网国王一桌 热火字母哥赌错了?

娱乐要闻

巾帼不让须眉!章子怡拿下重磅荣誉

财经要闻

iPhone Duo七年等来一场吐槽大会

汽车要闻

电动大掀背+无框车门+激光雷达 一汽-大众ID. AURA L5真能打动年轻家庭

态度原创

健康
本地
亲子
旅游
公开课

查不出猝死风险?可能是项目没做对

本地新闻

十月奔赴迪庆,解锁梅里日照金山

亲子要闻

“真想一头撞死在这儿”,全职宝妈晒厨房:人生都浪费在这里了

旅游要闻

“宅度假”兴起带货沙漠雪山酒店 消费者扎堆“住进风景里”丨新经济观察

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版