基于 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"""})

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

2、在生成源码文件后,可以继续补充提示词,要求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. 根据上一步生成的源码文件,进行执行测试用例操作,并返回终的执行结果
                """})

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

总结

  1. 自动化测试用例的生成与执行的实现原理。
  2. 自动化测试用例的生成与执行的实现思路。
  3. 利用 Agent 实现自动化测试用例的生成与执行。

在这里插入图片描述

推荐学习

【霍格沃兹测试开发】7天软件测试快速入门带你从零基础/转行/小白/就业/测试用例设计实战

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (上集)

【霍格沃兹测试开发】最新版!Web 自动化测试从入门到精通/ 电子商务产品实战/Selenium (下集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(上集)

【霍格沃兹测试开发】明星讲师精心打造最新Python 教程软件测试开发从业者必学(下集)

【霍格沃兹测试开发】精品课合集/ 自动化测试/ 性能测试/ 精准测试/ 测试左移/ 测试右移/ 人工智能测试

【霍格沃兹测试开发】腾讯/ 百度/ 阿里/ 字节测试专家技术沙龙分享合集/ 精准化测试/ 流量回放/Diff

【霍格沃兹测试开发】Pytest 用例结构/ 编写规范 / 免费分享

【霍格沃兹测试开发】JMeter 实时性能监控平台/ 数据分析展示系统Grafana/Docker 安装

【霍格沃兹测试开发】接口自动化测试的场景有哪些?为什么要做接口自动化测试?如何一键生成测试报告?

【霍格沃兹测试开发】面试技巧指导/ 测试开发能力评级/1V1 模拟面试实战/ 冲刺年薪百万!

【霍格沃兹测试开发】腾讯软件测试能力评级标准/ 要评级表格的联系我

【霍格沃兹测试开发】Pytest 与Allure2 一键生成测试报告/ 测试用例断言/ 数据驱动/ 参数化

【霍格沃兹测试开发】App 功能测试实战快速入门/adb 常用命令/adb 压力测试

【霍格沃兹测试开发】阿里/ 百度/ 腾讯/ 滴滴/ 字节/ 一线大厂面试真题讲解,卷完拿高薪Offer !

【霍格沃兹测试开发】App自动化测试零基础快速入门/Appium/自动化用例录制/参数配置

【霍格沃兹测试开发】如何用Postman 做接口测试,从入门到实战/ 接口抓包(最新最全教程)

<think>好的,我现在需要回答用户关于如何使用LangChain框架生成执行测试用例的问题。首先,我要确保自己正确理解用户的需求。用户提到了引用[1]和引用[2],这些内容涉及LangChain测试用例生成执行中的应用,特别是自动化测试的实现。用户的问题具体是询问如何利用LangChain实现这一过程,因此我需要结合提供的引用信息,并按照系统级指令中的要求来组织回答。 首先,我需要回顾引用中的内容。引用[1]提到了一个使用RunnablePassthrough和AgentExecutor的链式结构,其中load_case函数用于加载测试用例,然后通过代理执行。引用[2]则介绍了测试用例设计方法的枚举类型,包括等价类和因果图方法,并提到集成到测试平台的可能性。 接下来,我需要将这些信息结构化,分步骤解释生成执行测试用例的过程。根据系统指令,回答需要结构清晰,逐步解决问题,并引用相关段落。同时,要确保正确使用LaTeX格式,如行内数学表达式用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,主要关注代码和流程。 首先,可能需要分步骤说明:测试用例生成测试用例加载、执行测试用例。每个步骤需要结合引用中的代码示,比如引用[1]中的chain和agent_executor的设置,以及引用[2]中的DesignType枚举类。 然后,需要确保代码块正确展示,比如Python代码的语法是否正确,是否有必要的解释。如,在引用[1]中,代码展示了如何通过RunnablePassthrough分配code变量,然后执行代理。这部分需要解释每个组件的作用,如RunnablePassthrough、agent1、tools_all等。 另外,用户可能关心如何选择不同的测试用例设计方法,比如等价类或因果图,这需要引用[2]中的DesignType枚举,说明如何集成到生成过程中。 还要注意系统指令中的要求,比如生成相关问题,需要提出三个相关问题,可能涉及性能优化、集成方法、异常处理等。 在组织回答时,要确保每个部分引用正确的来源,如引用[1]和引用[2],并在末尾添加引用标识。同时,检查是否有遗漏的步骤,如是否需要配置环境、如何处理测试结果等,但根据提供的引用,可能主要聚焦于生成执行的代码结构。 最后,确保回答符合中文语言要求,避免使用Markdown格式,使用自然的口语化表达,同时保持逻辑清晰和技术准确性。需要验证所有步骤是否覆盖用户的问题,并正确引用提供的资料,避免添加未提及的内容。</think>### 如何使用 LangChain 实现测试用例生成自动执行 #### 一、测试用例生成执行的实现步骤 1. **测试用例生成** LangChain 通过定义测试用例设计方法的枚举类型(如等价类、因果图)实现灵活选择生成策略。如引用[2]中定义的`DesignType`类: ```python class DesignType(Enum): EP = "等价类测试用例设计" CE = "因果图测试用例设计" ``` 通过大模型(如集成 Spark 3.0)解析需求文档,生成符合选定方法的测试用例[^2]。 2. **测试用例加载绑定** 使用`RunnablePassthrough`将生成测试用例加载到执行链中。引用[1]中的代码展示了如何通过`load_case`函数加载用并绑定到链式操作: ```python chain = ( RunnablePassthrough.assign(code=load_case) | agent1 ) ``` 此步骤将生成测试用例转换为可执行的代码逻辑[^1]。 3. **执行测试用例** 通过`AgentExecutor`实现自动化执行,支持工具集成和中间步骤追踪: ```python agent_executor = AgentExecutor( agent=chain, tools=tools_all, verbose=True, return_intermediate_steps=True, handle_parsing_errors=True ) agent_executor.invoke({"input": "执行测试用例"}) ``` 执行结果会包含测试通过率、失败原因等详细信息[^1]。 #### 二、关键组件说明 - **`load_case`函数**:需提前实现用加载逻辑(如从文件或数据库读取),返回结构化测试数据[^1]。 - **工具集成(`tools_all`)**:可包含 HTTP 请求工具、断言库等,用于实际接口调用和结果验证。 - **错误处理**:`handle_parsing_errors=True`确保执行过程中语法或逻辑错误能被捕获并反馈。 #### 三、典型应用场景 1. **接口自动化测试**:将手工测试用例转换为自动化脚本(如引用[1]中描述的转换工具)。 2. **多方法测试设计**:根据需求动态选择等价类或因果图方法生成(如引用[2]中的枚举类型)。 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值