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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 本文介绍利用大语言模型自动生成接口自动化测试用例的方法。首先展示传统通过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生成完整版接口自动化测试用例的方法。
相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
6天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
21 3
|
10天前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
32 4
|
9天前
|
运维 Linux Apache
Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例
【10月更文挑战第8天】本文介绍了Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例。Puppet通过定义资源状态和关系,确保系统配置始终如一,支持高效管理基础设施。文章详细讲解了Puppet的安装步骤、配置方法及DSL语言示例,帮助读者快速掌握Puppet的使用技巧。
29 2
|
13天前
|
监控 虚拟化 云计算
从物理到云:使用自动化工具简化服务器迁移流程
【10月更文挑战第4天】随着云计算的快速发展,越来越多的企业选择将物理服务器迁移到云环境以提高效率和降低成本。本文详细介绍了使用自动化工具简化从物理到云的服务器迁移流程的技术实现细节,并提供了代码示例。
46 6
|
9天前
|
测试技术
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
本文介绍了如何使用Pytest和Allure生成自动化测试报告。通过安装allure-pytest和配置环境,可以生成包含用例描述、步骤、等级等详细信息的美观报告。文章还提供了代码示例和运行指南,以及重构项目时的注意事项。
40 1
自动化测试项目学习笔记(五):Pytest结合allure生成测试报告以及重构项目
|
15天前
LangChain-26 Custom Agent 自定义一个Agent并通过@tool绑定对应的工具 同时让大模型自己调用编写的@tools函数
LangChain-26 Custom Agent 自定义一个Agent并通过@tool绑定对应的工具 同时让大模型自己调用编写的@tools函数
29 3
LangChain-26 Custom Agent 自定义一个Agent并通过@tool绑定对应的工具 同时让大模型自己调用编写的@tools函数
|
8天前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
9天前
|
人工智能 运维 监控
自动化运维:从脚本到工具的演变之路
【10月更文挑战第8天】在数字化时代的浪潮中,运维不再是简单的硬件维护,它已经演变成一场关于效率、稳定性和创新的技术革命。本文将带您领略自动化运维的魅力,从最初的脚本编写到现代复杂的自动化工具,我们将一探究竟,看看这些工具如何帮助运维人员简化日常任务,提升工作效率,并最终推动业务发展。
|
10天前
|
监控 数据可视化 测试技术
软件测试中的自动化测试实践指南
【10月更文挑战第7天】 在软件开发的生命周期中,测试是确保产品质量的重要环节。随着技术的进步和应用的复杂性增加,自动化测试逐渐成为提升测试效率和覆盖范围的关键手段。本文将深入探讨自动化测试的基本概念、实施步骤及其在不同应用场景中的最佳实践。通过对自动化测试框架的选择、脚本开发、执行及维护的详细解析,帮助读者更好地理解和应用自动化测试技术,从而优化测试流程,提高软件质量。
21 2
|
9天前
|
测试技术 Python
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法
本文介绍了使用Python的unittest框架来加载测试用例的四种方法,包括通过测试用例类、模块、路径和逐条加载测试用例。
24 0
自动化测试项目学习笔记(三):Unittest加载测试用例的四种方法