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

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_基础版,每接口每天50万次
简介: 本文介绍利用大语言模型自动生成接口自动化测试用例的方法。首先展示传统通过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推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
3天前
|
敏捷开发 Java 测试技术
探索软件测试中的自动化:从基础到高级应用
在软件工程的广阔领域中,自动化测试以其高效、可靠和可重复的特性成为提升软件开发质量的关键手段。本文旨在通过实际案例和代码示例,引导读者理解自动化测试的基本概念,掌握其在不同阶段的应用,并最终能够独立设计和实施高效的自动化测试策略。
|
2天前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
10 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
1天前
|
监控 虚拟化 云计算
从物理到云:使用自动化工具简化服务器迁移流程
【10月更文挑战第4天】随着云计算的快速发展,越来越多的企业选择将物理服务器迁移到云环境以提高效率和降低成本。本文详细介绍了使用自动化工具简化从物理到云的服务器迁移流程的技术实现细节,并提供了代码示例。
19 6
|
5天前
|
设计模式 敏捷开发 Java
软件测试中的自动化测试实践指南
本文旨在探讨软件测试领域中的自动化测试。通过详细的案例分析和步骤讲解,帮助读者掌握自动化测试的实施方法与最佳实践。
24 10
|
2天前
|
机器学习/深度学习 运维 监控
提升运维效率:自动化工具与实践的融合
【10月更文挑战第3天】 在当今信息技术迅猛发展的时代,运维作为保持系统稳定性和性能的关键角色变得越来越重要。本文将探讨如何通过结合自动化工具和最佳实践来优化运维流程,实现高效、可靠的运维管理。从基础监控到高级自动化,我们将一步步引导您了解如何搭建和维护一个高效的运维体系。
13 3
|
3天前
|
运维 Prometheus 监控
运维中的自动化实践每月一次的系统维护曾经是许多企业的噩梦。不仅因为停机时间长,更因为手动操作容易出错。然而,随着自动化工具的引入,这一切正在悄然改变。本文将探讨自动化在IT运维中的重要性及其具体应用。
在当今信息技术飞速发展的时代,企业对系统的稳定性和效率要求越来越高。传统的手动运维方式已经无法满足现代企业的需求。自动化技术的引入不仅提高了运维效率,还显著降低了出错风险。本文通过几个实际案例,展示了自动化在IT运维中的具体应用,包括自动化部署、监控告警和故障排除等方面,旨在为读者提供一些实用的参考。
|
3天前
|
测试技术 持续交付 Python
软件测试中的自动化策略与实践
【10月更文挑战第2天】在软件开发的海洋中,自动化测试如同一座灯塔,为追求高效率和高质量的航程提供方向。本文将深入探讨自动化测试的策略与实践,从基础理论到实际应用,带领读者领略自动化测试的魅力和挑战。
|
3天前
|
测试技术 持续交付 数据安全/隐私保护
软件测试中的自动化策略:提升效率与准确性
【10月更文挑战第2天】本文深入探讨了软件测试自动化的重要性,并提供了实用的自动化测试策略。文章首先概述了自动化测试的优势,然后详细解释了如何设计有效的测试用例和选择恰当的自动化工具。通过实例演示,我们展示了如何在软件开发周期中整合自动化测试,以提高产品质量和开发效率。最后,文章讨论了自动化测试面临的挑战及应对策略,为读者提供了一套完整的解决方案。
|
1天前
|
中间件 测试技术 持续交付
软件测试中的自动化测试实践指南
【10月更文挑战第4天】 本文探讨了软件测试中自动化测试的重要性,并详细介绍了如何有效实施自动化测试。从选择合适的工具到设计测试用例,再到实际执行与持续集成,我们将一步步引导读者了解自动化测试的全过程。通过具体案例分析,我们展示了自动化测试在提高测试效率、保障软件质量方面的显著优势。无论是初学者还是资深测试工程师,都能从中获得实用的指导和启示。
16 1
|
2天前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
【10月更文挑战第3天】在软件开发的海洋里,自动化测试犹如一艘航船,引领着项目向着质量的彼岸航行。本文将揭开自动化测试框架的神秘面纱,从理论到实践,深入浅出地探讨如何构建和运用这一工具,确保软件产品的稳定性和可靠性。我们将通过一个实际案例,展示自动化测试框架的搭建过程,以及它如何在提高测试效率、减少人力成本等方面发挥巨大作用。无论你是测试新手还是资深开发者,这篇文章都将为你提供宝贵的知识和启示。