点击蓝字
关注我们
戳这里可查看上期内容,上期学习了通过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")}}def trace_to_source(error_msg: str, source_map_url: str) -> dict:"""将前端错误栈映射到原始源码位置,支持TypeScript/Vue/React"""# 解析错误栈中的行列号# 下载source map文件,进行映射# 返回原始文件路径、行号、代码片段passdef git_blame(file_path: str, line: int) -> dict:"""获取某行代码的最后修改者、提交信息、MR链接"""import subprocessresult = subprocess.run(["git", "blame", "-L", f"{line},{line}", "--porcelain", file_path],capture_output=True, text=True)# 解析输出,返回author, commit, mr_urlreturn parseddef create_jira_ticket(analysis: dict) -> str:"""自动创建缺陷工单,附带截图、日志、根因分析"""# 调用Jira REST API# 将截图作为附件上传# 设置优先级、标签、指派人passdef trigger_regression_pipeline(test_case_ids: list) -> str:"""触发CI流水线运行指定回归测试,并轮询结果"""# 调用Jenkins API或GitLab APIpassagent = 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 jsondef 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.stdoutdef analyze_failure(log: str) -> dict:"""分析失败日志,提取错误类型、位置、可能原因"""prompt = f"分析以下pytest失败日志,输出JSON格式:错误类型、错误位置、可能原因、相关代码行\n{log}"response = llm.invoke(prompt)return json.loads(response.content)def 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

