news 2026/2/27 21:44:11

基于 LangChain 的自动化测试用例的生成与执行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 LangChain 的自动化测试用例的生成与执行

在前面的章节中,分别介绍了 Web、App、接口自动化测试用例的生成。但是在前文中实现的效果均为在控制台打印自动化测试的用例。用例需要手动粘贴,调整之后再执行。

那么其实这个手动粘贴、执行的过程,也是可以直接通过人工智能完成的。

应用价值

通过人工智能代替人工操作的部分,节省时间,提升效率。

通过封装更多的 Tools,让 Agent 更为智能。

实践演练

实现原理

实现思路

在理解需求之后,我们可以了解到我们需要让 Agent 具备两个功能:

1、输入源码信息,生成 python 文件。

2、输入文件名,执行 pytest 测试文件功能。

如此,可以通过如下两个步骤实现需求:

1、工具包封装。

2、实现 Agent。

工具包封装

为了让工具包更易被大模型理解,我们将注释调整为英文,提升准确率。同时为了传参的时候不出现格式错误问题,通过args_schema限制参数结构与格式(tools 章节有具体讲解)。

from langchain_core.tools import tool from pydantic.v1 import BaseModel, Field class PythonFileInput(BaseModel): # 定义参数的描述 filename: str = Field(description="filename") source_code: str = Field(description="source code data") class PytestFileName(BaseModel): # 定义参数的描述 filename: str = Field(description="The name of the file to be executed") @tool(args_schema=PythonFileInput) def write_file(filename, source_code): """ Generate python files based on input source code """ with open(filename, "w") as f: f.write(source_code) @tool(args_schema=PytestFileName) def execute_test_file(filename): """ Pass in the file name, execute the test case and return the execution result """ import subprocess # 使用subprocess模块执行pytest命令 result = subprocess.run(['pytest', filename], capture_output=True, text=True) # 检查pytest的执行结果 if result.returncode == 0: print("测试运行成功!") else: print("测试运行失败:") print(result.stdout) return result.stdout

通过 AGENT 实现需求

1、首先封装 Agent,绑定工具,输入提示词。在示例中,是在 LangChain 官方提供的 structured-chat-agent提示词基础之上修改的提示词,添加了一个code变量。目的是为了后面 code 可以由其他的 chain 的执行结果而来。

# 注意:需要再原提示词的基础上添加 {code} 变量 # prompt = hub.pull("hwchase17/structured-chat-agent") llm = ChatOpenAI() agent1 = create_structured_chat_agent(llm, tools_all, prompt) agent_executor = AgentExecutor( agent=agent1, tools=tools_all, verbose=True, return_intermediate_steps=True, handle_parsing_errors=True) if __name__ == '__main__': agent_executor.invoke({"input": "请根据以上源码生成文件", "code": """def test_demo(): return True"""})

由以上的步骤,即可生成一个源码文件:

1、在生成源码文件后,可以继续补充提示词,要求Agent 执行对应的测试用例:

if __name__ == '__main__': agent_executor.invoke({"input": """ 请根据以下步骤完成我让你完成操作,没有完成所有步骤不能停止: 1. 先根据以上源码生成文件。 2. 根据上一步生成的源码文件,进行执行测试用例操作,并返回终的执行结果 """, "code": """def test_demo(): return True"""})


到这里,通过 Agent 就能自动生成测试用例文件,执行测试用例了。

与其他的场景结合
在前面的章节中,已经实现了自动生成接口自动化测试用例的操作。可以直接与前面的操作结合,自动生成接口自动化测试用例,并执行测试用用例。

注意:load_case 如何实现在前面章节:《基于LangChain手工测试用例转接口自动化测试生成工具》,已有对应讲解

# load_case 的返回结果是接口的自动化测试用例 chain = ( RunnablePassthrough.assign(code=load_case) | agent1 ) agent_executor = AgentExecutor( agent=chain, tools=tools_all, verbose=True, return_intermediate_steps=True, handle_parsing_errors=True) if __name__ == '__main__': agent_executor.invoke({"input": """ 请根据以下步骤完成我让你完成操作,没有完成所有步骤不能停止: 1. 先根据以上源码生成文件。 2. 根据上一步生成的源码文件,进行执行测试用例操作,并返回终的执行结果 """})

执行之后,即可在控制台看到生成的接口自动化测试用例的执行记录。

总结

自动化测试用例的生成与执行的实现原理。

自动化测试用例的生成与执行的实现思路。

利用 Agent 实现自动化测试用例的生成与执行。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/17 13:14:00

渗透测试怎么做?

渗透测试就是利用我们所掌握的渗透知识,对网站进行一步一步的渗透,发现其中存在的漏洞和隐藏的风险,然后撰写一篇测试报告,提供给我们的客户。客户根据我们撰写的测试报告,对网站进行漏洞修补,以防止黑客的…

作者头像 李华
网站建设 2026/2/27 5:43:09

【南京大学主办,SPIE出版 (ISSN: 0277-786X) | 计算机与量子技术交叉创新领域主题均可 | EI会议征稿通知】2026 计算机科学与量子信息技术国际会议(CSQIT 2026)

2026 计算机科学与量子信息技术国际会议(CSQIT 2026) 2026 International Conference on Computer Science and Quantum Information Technology 2026年3月27日-3月29日,中国-南京 会议官网:www.csqit.com【投稿参会】 会议时…

作者头像 李华
网站建设 2026/2/17 13:07:36

导师严选9个一键生成论文工具,本科生搞定毕业论文!

导师严选9个一键生成论文工具,本科生搞定毕业论文! AI 工具助力论文写作,告别手忙脚乱 随着人工智能技术的不断进步,越来越多的本科生开始借助 AI 工具来辅助毕业论文的撰写。这些工具不仅能够帮助学生快速生成初稿,还…

作者头像 李华
网站建设 2026/2/25 20:42:43

太湖水那么浅,为什么却数千年都没有干涸?

太湖是位于长江三角洲南缘的浅水湖,平均水深仅1.9米,最深处也不过4米左右。 然而就是这片看似脆弱的水域,却已经存在了上千年之久。 相比之下,曾经面积达2.6万平方公里的云梦泽和作为中国第二大内陆湖的罗布泊,都早已…

作者头像 李华
网站建设 2026/2/23 13:30:38

很有可能,你对东西半球的划分一直都有误解

你知道吗? 真正的东西半球划分,并非是以本初子午线(0经线)作为标准进行划分的。 事实上,为了避免将欧洲和非洲的一些国家分割在两个半球,国际上通常采用西经20和东经160​ 这条经线圈作为东西半球的分界线…

作者头像 李华
网站建设 2026/1/30 20:04:18

ABAP 采购订单增强--自定义校验提示 E类型阻断

BADI: ME_PROCESS_PO_CUST check中获取的item是前台的全量(保存,检查都会进入; process_item获取的是单条,循环进入(只有行项目发生变更才会进到这里 方法:CHECK 绑定消息到弹出框 ch_failed abap_true."则会…

作者头像 李华