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

简介: 本文介绍利用大语言模型自动生成接口自动化测试用例的方法。首先展示传统通过HAR文件生成测试用例的方式及其局限性,随后提出结合自然语言描述的测试需求与HAR文件来生成更全面的测试脚本。通过LangChain框架,设计特定的提示词模板,使模型能够解析测试需求文档和HAR文件中的接口信息,并据此生成Python pytest测试脚本。示例展示了正常请求、非法请求及无效路径三种测试场景的自动化脚本生成过程。最终,整合流程形成完整代码实现,帮助读者理解如何利用大模型提高测试效率和质量。

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

image.png

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

实践演练

需求说明

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

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

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

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

实现原理

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

image.png

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

在这个过程中,测试用例本身是自然语言,自然语言的解析与处理本身就是大模型非常擅长的工作。而可以通过 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生成完整版接口自动化测试用例的方法。
相关实践学习
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
5月前
|
人工智能 缓存 监控
使用LangChain4j构建Java AI智能体:让大模型学会使用工具
AI智能体是大模型技术的重要演进方向,它使模型能够主动使用工具、与环境交互,以完成复杂任务。本文详细介绍如何在Java应用中,借助LangChain4j框架构建一个具备工具使用能力的AI智能体。我们将创建一个能够进行数学计算和实时信息查询的智能体,涵盖工具定义、智能体组装、记忆管理以及Spring Boot集成等关键步骤,并展示如何通过简单的对话界面与智能体交互。
1810 1
|
5月前
|
人工智能 测试技术 调度
写用例写到怀疑人生?AI 智能测试平台帮你一键生成!
霍格沃兹测试开发学社推出AI智能测试用例生成功能,结合需求文档一键生成高质量测试用例,大幅提升效率,减少重复劳动。支持自定义提示词、多文档分析与批量管理,助力测试人员高效完成测试设计,释放更多时间投入核心分析工作。平台已开放内测,欢迎体验!
|
5月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
507 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
5月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
293 6
|
4月前
|
人工智能 自然语言处理 测试技术
让AI帮你跑用例-重复执行,不该成为测试工程师的主旋律
测试不该止步于重复执行。测吧科技推出用例自动执行智能体,通过AI理解自然语言用例,动态规划路径、自主操作工具、自动重试并生成报告,让测试工程师从“点点点”中解放,专注质量思考与创新,提升效率3倍以上,节约人力超50%,重构测试生产力。
|
6月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
1336 10
|
6月前
|
存储 人工智能 前端开发
​​LangChain默认工具正在污染你的知识库!PDF解析崩溃真相​
本文深入探讨RAG项目中PDF解析的痛点与解决方案,分析LangChain默认工具的局限性,提出专业级文档处理架构设计与工具选型策略,涵盖表格图像处理、多模态解析与可扩展管道实现,助力提升RAG系统效果。
534 6
|
6月前
|
监控 Java 数据挖掘
利用Jmeter工具进行HTTP接口的性能测试操作
基础上述步骤反复迭代调整直至满足预期目标达成满意水平结束本轮压力评估周期进入常态监控阶段持续关注系统运转状态及时发现处理新出现问题保障服务稳定高效运作
897 0
|
7月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
8月前
|
数据可视化 测试技术 Go
Go 语言测试与调试:`go test` 工具用法
`go test` 是 Go 语言内置的测试工具,支持单元测试、基准测试、示例测试等功能。本文详解其常用参数、调试技巧及性能测试命令,并提供实际项目中的应用示例与最佳实践。