基于LangChain手工测试用例转接口自动化测试生成工具

接口自动化测试用例是一个老生常谈的问题,在未引入人工智能之前,也有非常多的生成方案,比如如下所示,通过har生成接口自动化测试用例:

但是以上的生成方式依然是有一些弊端,比如 har 本身虽然能表述一定的接口信息和业务信息,但是毕竟无法用来表述全部的应用场景与用例场景。而大部分的应用场景和用例场景,均是通过自然语言进行描述的。而解析自然语言,则是大语言模型擅长做的事情。

实践演练

需求说明

以下内容为3条接口测试用例:

测试模块测试标题测试步骤预期结果
接口功能正常情况下的请求发送一个正常的GET请求响应状态码为 200 ,并返回请求者的IP地址
接口功能非法请求方法发送一个非GET请求,如POST或者PUT响应状态码为 405
接口功能无效的请求路径发送一个不存在的路径响应状态码为404

以下为一个获取ip接口的har文件:

  • 接口Har文件(需要可留言领取)

实现原理

接下来,将通过这两个数据文件自动生成对应的测试用例。

通过功能用例生成测试脚本

在这个过程中,测试用例本身是自然语言,自然语言的解析与处理本身就是大模型非常擅长的工作。而可以通过 LangChain 简化整个的实现的过程。

编写的提示词模版信息如下所示:

template = """
你是一个自动化测试工程师,精通的技术栈为 Python pytest requests库
以下是这个接口的具体信息,

{context}

Question: {input}"""

通过功能测试用例生成的自动化测试脚本如下所示:

#1. Test case: 正常情况下的请求
import pytest
import requests

def test_normal_request():
    url = 'http://example.com/normal_request'
    response = requests.get(url)
    assert response.status_code == 200
    assert response.json()['ip_address'] == 'requester_ip'
#2. Test case: 非法请求方法
import pytest
import requests
def test_invalid_request_method():
    url = 'http://example.com/invalid_request_method'
    response = requests.post(url)
    assert response.status_code == 405
# 3. Test case: 无效的请求路径
import pytest
import requests
def test_invalid_request_path():
    url = 'http://example.com/invalid_request_path'
    response = requests.get(url)
    assert response.status_code == 404

当然,在此过程中可以很明显的发现,自动生成的用例是没有任何的接口信息的。原因是我们给到的数据里面就是没有接口信息的。

填充接口数据

接下来,将读取har文件中的接口数据信息,和脚本进行结合。

提示词模版如下:

template = """
    你是一个自动化测试工程师,你非常熟悉requests库
    {context}
    Question: 
    请根据传入的接口信息提取request中的 ip 、 url 、method、json。
    key值为前面提到的字段,如果没有则无需添加。如果有则提取对应的value。
    要求返回的格式为json格式
"""

生成结果如下:

{
  "ip": "182.92.156.22",
  "url": "https://httpbin.ceshiren.com/ip",
  "method": "GET"
}

完整代码

再将以上的过程结合之后,完整版的代码如下所示

from langchain_community.chat_models.openai import ChatOpenAI
from langchain_community.document_loaders.text import TextLoader
from langchain_core.output_parsers import JsonOutputParser, StrOutputParser
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough
from utils.langchain_debug import langchain_debug

langchain_debug()
llm = ChatOpenAI()


def get_by_filename(filename):
    info = TextLoader(f'./data/{filename}')
    return info.load()


def get_case_data(_):
    template = """
        你是一个自动化测试工程师,你非常熟悉requests库
        {context}
        Question: {input}
        请根据传入的接口信息提取request中的 ip 、 url 、method、json。
        key值为前面提到的字段,如果没有则无需添加。如果有则提取对应的value。
        要求返回的格式为json格式
        """
    prompt = PromptTemplate.from_template(template=template, )
    data_chain = (
            RunnablePassthrough.assign(context=lambda x: get_by_filename("ip.har"), )
            | prompt
            | llm
            | JsonOutputParser()
    )
    return data_chain


def get_case():
    """
    通过大模型生成测试数据。
    :return:
    """
    template = """
        你是一个自动化测试工程师,精通的技术栈为 Python pytest requests库
        以下是这个接口的具体信息,你的

        {context}

        请求的参数信息将输入一个字典,输入的内容为
        {req}

        Question: {input}"""
    # 模板提示,输出 json 格式的回答
    prompt = PromptTemplate.from_template(
        template=template, )
    chain = (
            RunnablePassthrough.
            assign(context=lambda x: get_by_filename("获取ip测试用例.md"),
                   req=get_case_data)
            | prompt
            | llm
            | StrOutputParser()
    )

    input_template = """
    根据每条测试用例的测试步骤,生成对应的测试数据信息,
    每条测试用例要求都有一条对应的单独的pytest函数
    """
    print(chain.invoke({"input": input_template}))


if __name__ == '__main__':
    get_case()

总结

  1. 掌握接口自动化测试用例生成的原理。
  2. 了解如何通过大语言模型生成接口自动化测试脚本与数据。
  3. 掌握通过LangChain生成完整版接口自动化测试用例的方法。

推荐学习

【霍格沃兹测试开发】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]中的枚举类型)。 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值