跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI

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

探讨了利用 LangChain 框架结合大语言模型实现自动化测试用例生成与执行的方案。通过封装自定义工具(Tool)并配置 Agent,系统能够根据源码信息自动生成 Python 测试文件,并利用 subprocess 调用 pytest 执行测试。文章详细阐述了工具定义、参数约束、提示词优化及 Agent 编排的实现细节,同时提供了代码示例与安全实践建议,旨在提升测试效率并降低人工成本。

GitMaster发布于 2025/2/7更新于 2026/9/868 浏览
基于 LangChain 的自动化测试用例生成与执行

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

引言

随着人工智能技术的发展,软件测试领域正经历着从传统自动化向智能化转变的过程。利用大语言模型(LLM)和 LangChain 框架,我们可以构建智能体(Agent)来辅助甚至自动完成测试用例的编写与执行。本文将深入探讨如何基于 LangChain 实现这一流程,包括工具封装、Agent 配置以及实际应用场景的结合。

应用价值

引入 AI 驱动的自动化测试主要带来以下核心价值:

  1. 效率提升:通过人工智能代替人工操作的部分重复性工作,显著节省时间。
  2. 能力扩展:通过封装更多的 Tools,让 Agent 具备更广泛的执行能力,处理复杂的测试场景。
  3. 准确性增强:标准化的代码生成减少了人为编写测试脚本时的语法错误。

实践演练

实现原理

整个系统的核心在于让 Agent 理解需求并调用相应的工具来完成特定任务。基本流程如下:

  1. 接收用户输入的需求或源码信息。
  2. Agent 分析意图,决定调用哪个工具。
  3. 工具执行具体操作(如写入文件、运行命令)。
  4. 返回结果给 Agent,由 Agent 总结或直接输出给用户。

实现思路

在理解需求之后,我们需要让 Agent 具备两个核心功能:

  1. 输入源码信息,生成 Python 测试文件。
  2. 输入文件名,执行 pytest 测试文件功能。

为了实现上述需求,我们采取以下两个步骤:

  1. 工具包封装:将文件写入和命令执行封装为 LangChain 可识别的 Tool。
  2. 实现 Agent:配置 LLM 和 Prompt,使其能够调度这些工具。
工具包封装

为了让工具包更易被大模型理解,我们将注释调整为英文,提升准确率。同时为了传参的时候不出现格式错误问题,通过 args_schema 限制参数结构与格式。LangChain 支持使用 Pydantic 模型来定义工具的输入结构,这有助于 LLM 准确解析参数。

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()
 ():
        
    :
         (filename, , encoding=)  f:    
            f.write(source_code)
         
     Exception  e:
         
        


 ():
        
     subprocess    
    :
        
        result = subprocess.run([, filename], capture_output=, text=, timeout=)    
        
         result.returncode == :   
            msg =     
        :   
            msg =     
        (result.stdout)    
         
     Exception  e:
         
args_schema=PythonFileInput
def
write_file
filename, source_code
""" Generate python files based on input source code """
try
with
open
"w"
"utf-8"
as
return
f"File {filename} created successfully."
except
as
return
f"Error creating file: {str(e)}"
@tool(args_schema=PytestFileName)
def
execute_test_file
filename
""" Pass in the file name, execute the test case and return the execution result """
import
try
# 使用 subprocess 模块执行 pytest 命令
'pytest'
True
True
60
# 检查 pytest 的执行结果
if
0
"测试运行成功!"
else
"测试运行失败:"
print
return
f"{msg}\n{result.stdout}"
except
as
return
f"Error executing test: {str(e)}"

注意事项:

  • 在 write_file 中增加了异常捕获,防止因路径不存在等原因导致程序崩溃。
  • 在 execute_test_file 中增加了超时设置,避免测试挂起。
  • 返回值统一为字符串,便于 Agent 后续处理。
通过 AGENT 实现需求
  1. 首先封装 Agent,绑定工具,输入提示词。在示例中,是在 LangChain 官方提供的 structured-chat-agent 提示词基础之上修改的提示词,添加了一个 code 变量。目的是为了后面 code 可以由其他的 chain 的执行结果而来。
# 注意:需要再原提示词的基础上添加 {code} 变量
# 实际项目中建议从 hub.pull 获取最新提示词模板
# prompt = hub.pull("hwchase17/structured-chat-agent")

from langchain.chat_models import ChatOpenAI
from langchain.agents import create_structured_chat_agent, AgentExecutor

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

tools_all = [write_file, execute_test_file]

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__':
    # 模拟输入
    response = agent_executor.invoke({
        "input": "请根据以上源码生成文件", 
        "code": """def test_demo(): return True"""
    })
    print(response['output'])

执行上述代码后,Agent 会分析输入,调用 write_file 工具生成源码文件。生成的文件内容即为传入的 code 变量内容。

在生成源码文件后,可以继续补充提示词,要求 Agent 执行对应的测试用例。此时 Agent 会再次规划步骤,调用 execute_test_file 工具。

与其他场景结合

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

注意:load_case 如何实现在前面章节已有对应讲解,此处假设该函数已存在并返回接口的自动化测试用例代码。

# 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 的复杂任务处理能力。

安全与最佳实践

在使用 Agent 执行代码时,安全性至关重要。

  1. 沙箱环境:建议在 Docker 容器或隔离环境中运行 subprocess 命令,防止恶意代码破坏宿主系统。
  2. 权限控制:确保运行测试的用户权限最小化,仅允许访问必要的目录。
  3. 输入验证:对传入的文件名和代码内容进行严格校验,防止路径遍历攻击。
  4. 超时控制:如前文所示,必须为长时间运行的命令设置超时时间,避免资源耗尽。

总结

本文详细介绍了自动化测试用例的生成与执行的实现原理与思路。

  1. 明确了自动化测试用例的生成与执行的实现原理,即通过 Agent 调度工具完成任务。
  2. 阐述了自动化测试用例的生成与执行的实现思路,包括工具封装和 Agent 配置。
  3. 展示了如何利用 Agent 实现自动化测试用例的生成与执行,并结合了其他场景进行链式调用。
  4. 强调了在实际生产环境中需要注意的安全问题和最佳实践。

通过这种方式,我们可以构建一个更加智能、高效的测试辅助系统,减少重复劳动,让测试人员专注于更高价值的测试设计工作。

目录

  1. 基于 LangChain 的自动化测试用例生成与执行
  2. 引言
  3. 应用价值
  4. 实践演练
  5. 实现原理
  6. 实现思路
  7. 工具包封装
  8. 通过 AGENT 实现需求
  9. 注意:需要再原提示词的基础上添加 {code} 变量
  10. 实际项目中建议从 hub.pull 获取最新提示词模板
  11. prompt = hub.pull("hwchase17/structured-chat-agent")
  12. 与其他场景结合
  13. load_case 的返回结果是接口的自动化测试用例
  14. 安全与最佳实践
  15. 总结

更多推荐文章

查看全部
  • 八种常见排序算法详解
  • VSCode 本地运行 DeepSeek 模型指南
  • Python 网络爬虫入门实战指南
  • 提示词工程师:AI 大模型时代的新兴职业与技术解析
  • AR 技术在电力配电运维中的应用与解决方案
  • Python 在图像处理、爬虫及数据分析中的实际应用
  • 前端 Base64 格式文件上传详解:原理、实现与最佳实践
  • Agent AI 探索多模态交互前沿领域综述(一)
  • Python 核心语法详解:变量、流程控制与函数基础
  • AI 绘画报错修复:CheckpointLoaderSimple 模型缺失处理
  • Java 注解与反射实战:自定义日志与参数校验注解实现
  • Linux 进程池原理与实现:从 fork 到任务复用
  • ConcurrentHashMap JDK 7/8 底层原理与实现细节
  • LLM 大模型原理详解:词向量、Transformer 与训练机制
  • LLaMA Factory 核心原理讲解
  • 2024 年常见 Redis 面试题:同步机制详解
  • Python 基础语法总结
  • FPGA 验证:全方位解析 AXI Verification IP (AXI VIP)
  • OpenManus 开源 AI Agent 核心架构与工具链解析
  • 6 个 Python 办公自动化技巧:PDF 解析、邮件发送与数据分析实战

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online