大数跨境

测试人的破局之道:Agent+LangChain的自动化测试全链路(下)

测试人的破局之道:Agent+LangChain的自动化测试全链路(下) 51Testing软件测试网
2026-09-03
3
导读:构建缺陷诊断Agent:失败时自动捕获上下文、映射源码定位根因、Git blame追责、创建Jira工单并触发回归。

点击蓝字

关注我们

戳这里可查看上期内容,上期学习了通过Agent攻克测试工程师难题的前两个案例,接下来我们将继续第三个案例,并探讨如何快速上手第一个测试Agent。


案例三:直达代码行的精准定位

缺陷根因分析 + 全流程闭环


痛点还原

测试执行中发现一个崩溃:点击“结算”按钮后,页面白屏。传统流程下,测试人员需要手动复现、录屏、抓日志,然后提交给开发。


开发花费数小时定位,发现是某个JavaScript变量未定义。整个流程耗时漫长,且沟通成本高。



Agent解决方案:构建“缺陷诊断Agent”

在断言失败时自动触发,完成:

●上下文捕获:截图、DOM快照、网络请求、控制台日志、操作轨迹


●因果追溯:结合源码映射(source map)定位到原始代码行


●根因分析:使用Git blame找到责任人,并生成修复建议


●自动提交:创建Jira工单,附上所有证据,分配给对应开发


●触发回归验证:修复后自动运行相关用例,确认问题解决



实现原理

printf("hello world!");@tooldef capture_failure_context() -> dict:    """捕获失败时的完整上下文,包括浏览器日志、网络请求、用户操作序列"""    return{        "screenshot": driver.get_screenshot_as_base64(),        "dom_snapshot": driver.page_source,        "console_logs": driver.get_log("browser"),        "network_requests": driver.get_network_logs(),  # 需配置代理        "user_actions": get_recent_actions(),  # 自定义记录        "environment": {            "browser": driver.capabilities['browserName'],            "resolution": driver.get_window_size(),            "backend_version": os.getenv("API_VERSION")        }    }
@tooldef trace_to_source(error_msg: str, source_map_url: str) -> dict:    """将前端错误栈映射到原始源码位置,支持TypeScript/Vue/React"""    # 解析错误栈中的行列号    # 下载source map文件,进行映射    # 返回原始文件路径、行号、代码片段    pass
@tooldef git_blame(file_path: str, line: int) -> dict:    """获取某行代码的最后修改者、提交信息、MR链接"""    import subprocess    result = subprocess.run(        ["git""blame""-L"f"{line},{line}""--porcelain", file_path],        capture_output=True, text=True    )    # 解析输出,返回author, commit, mr_url    return parsed
@tooldef create_jira_ticket(analysis: dict) -> str:    """自动创建缺陷工单,附带截图、日志、根因分析"""    # 调用Jira REST API    # 将截图作为附件上传    # 设置优先级、标签、指派人    pass
@tooldef trigger_regression_pipeline(test_case_ids: list) -> str:    """触发CI流水线运行指定回归测试,并轮询结果"""    # 调用Jenkins API或GitLab API    pass
agent = create_agent(    tools=[capture_failure_context, trace_to_source, git_blame, create_jira_ticket, trigger_regression_pipeline],)
# 当断言失败时自动调用failure_result = agent.invoke({    "messages": [("user""刚才的测试失败了,请分析根因、提交缺陷,并标记需要回归的用例")]})



深度集成:缺陷管理的自动化流水线

1.操作轨迹回放:Agent记录用户操作的每一步(点击、输入、滚动)以及时间戳,并将其转换为可复现的脚本(如Playwright代码)。开发可以直接运行该脚本在本地复现缺陷。


2.反事实推理定位偶现缺陷:

●Agent记录完整的操作轨迹后,会尝试删除某个操作或调整操作间隔,看缺陷是否仍出现。


●通过多次模拟,找出缺陷的必要触发条件(如“需要在3秒内连续点击两次”),并自动生成精准的复现步骤。


3.智能缺陷分类与优先级:

●Agent根据错误类型(崩溃、逻辑错误、性能问题)、影响范围(通过调用链分析)、出现频率(从历史数据库查询)自动分配优先级(P0-P3)。


●对于阻塞性缺陷,Agent可立即触发回滚流水线,阻止问题代码进入生产环境。


4.修复验证闭环:

●开发修复代码并推送后,Agent自动监听Git webhook,触发针对该缺陷的回归测试(仅运行相关用例)。


●验证通过后,Agent自动关闭Jira工单,并在测试报告中标记“已修复”。


●若修复不彻底,Agent会重新打开工单,并附加新的失败证据。


5.知识库沉淀:

● 每次缺陷分析的结果(根因、修复方案、相关代码)都会被存入向量数据库,供后续Agent检索。


● 当类似错误再次出现时,Agent可直接匹配历史案例,秒级给出修复建议。


通过上述设计,缺陷管理从“人工沟通驱动”转变为“智能体自动驱动”,大幅缩短了MTTR(平均修复时间)。


测试人员的新角色

Agent教练与自动化架构师

看了以上案例,你可能会问:Agent会取代测试工程师吗?


答案是否定的。但测试工程师的职责会发生深刻转变,从“执行者”升级为“教练”和“架构师”:



需要学习的新技能

LangChain工具开发:用@tool装饰器将任何功能(如数据库查询、桩服务、消息推送)封装成Agent可调用的工具。


提示词工程:教会Agent如何理解你的测试领域(如“支付流程中的幂等性校验”),并设计System Prompt约束Agent行为。


评估与调优:使用LangSmith分析Agent的决策链,找出失败模式,持续改进。


多模态模型调用:结合截图和DOM进行视觉断言,以及结合日志和源码进行根因分析。


30分钟快速上手

你的第一个测试Agent

最后,提供一个极简可运行的代码,让你立刻体验Agent的威力。


环境准备

pip install langchain langchain-openai pytest selenium webdriver-managerexport OPENAI_API_KEY="sk-xxx"



完整代码(testagentdemo.py)

from langchain.agents import create_agentfrom langchain.tools import toolfrom langchain_openai import ChatOpenAIimport subprocessimport json
@tooldef run_pytest(test_path: str) -> str:    """执行pytest并返回结果,支持指定标签和并行度"""    result = subprocess.run(        ["pytest", test_path, "-v""-n""auto""--tb=short"],        capture_output=True, text=True    )    return result.stdout
@tooldef analyze_failure(log: str) -> dict:    """分析失败日志,提取错误类型、位置、可能原因"""    prompt = f"分析以下pytest失败日志,输出JSON格式:错误类型、错误位置、可能原因、相关代码行\n{log}"    response = llm.invoke(prompt)    return json.loads(response.content)
@tooldef suggest_fix(error_info: dict) -> str:    """根据错误信息给出修复建议,可结合代码上下文"""    # 可以调用git blame获取责任人    return f"建议:检查{error_info['location']}{error_info['possible_cause']}。可参考历史修复:{get_similar_fix(error_info)}"
llm = ChatOpenAI(model="gpt-4o")agent = create_agent(    model=llm,    tools=[run_pytest, analyze_failure, suggest_fix],    system_prompt="你是测试助手。用户提供测试文件路径时,运行并分析失败原因,给出修复建议。")
if __name__ == "__main__":    result = agent.invoke({        "messages": [("user""运行 tests/test_calculator.py,如果有失败帮我分析并给出修复建议,同时生成Jira工单草稿")]    })    print(result)



运行效果(示例输出)

全程无需你手动分析日志,Agent自动完成。

● 执行结果:1 failed, 2 passed, 1 skipped

● 失败用例:test_add_negative

● 错误类型:AssertionError

● 错误位置:test_calculator.py:12

● 可能原因:add函数未正确处理负数相加,导致返回值错误

● 相关代码行:return a + b  # 未考虑符号

● 修复建议:修改add函数,使用math.fsum或处理符号逻辑

● Jira工单草稿:已生成,摘要为“计算器负数相加错误”,可手动提交。


......

本文节选自第九十一期《51测试天地》

原创文章

当测试遇上Agent:LangChain驱动的智能测试革命》

文章后续为大家详细讲解了:

解决的三个核心问题与下一步行动建议

    

想继续阅读全文

或查看更多《51测试天地》的原创文章

请点击下方 阅读原文或扫描二维码 查看

图片

声明:本文为51Testing软件测试网 半夏 用户投稿内容,该用户投稿时已经承诺独立承担涉及知识产权的相关法律责任,并且已经向51Testing承诺此文并无抄袭内容。发布本文的用途仅仅为学习交流,不做任何商用,未经授权请勿转载,否则作者和51Testing有权追究责任。如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:editor@51testing.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

【声明】内容源于网络
0
0
51Testing软件测试网
博为峰51Testing软件测试网提供各种线上招聘、线上课程等网络服务,出版软件测试系列丛书及电子杂志,组织线上技术交流活动;同时还举办多种线下公益活动,如软件测试沙龙、软件测试专场招聘会等。
内容 3939
粉丝 0
51Testing软件测试网 博为峰51Testing软件测试网提供各种线上招聘、线上课程等网络服务,出版软件测试系列丛书及电子杂志,组织线上技术交流活动;同时还举办多种线下公益活动,如软件测试沙龙、软件测试专场招聘会等。
总阅读2.8k
粉丝0
内容3.9k