LangChain手工测试用例转接口自动化工具排行榜

2026-06-18阅读 0热度 0
ai 人工智能

接口自动化测试用例的自动生成算不上一项前沿技术。在AI广泛落地之前,业内已有成熟方案,例如基于HAR文件转换。如下图所示:

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

不过,这种模式存在明显短板。HAR文件虽能记录接口的请求与响应数据,却无法覆盖完整的业务场景与测试用例。真实用户操作和复杂业务逻辑,多数时候依赖自然语言描述。而解析自然语言恰好是大语言模型的核心优势。

实战演练

需求说明

先看具体数据。以下是3条典型的接口测试用例:

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

此外,我们准备了一个获取IP接口的HAR文件。

实现原理

接下来基于这两份数据,自动生成对应的测试代码。关键在于:测试用例本身是自然语言,大模型处理这类文本轻车熟路。借助LangChain,整个流程能大幅简化。

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

编写一个提示词模板,告知模型它是自动化测试工程师,精通Python、pytest和requests库,再将接口信息与用例需求一并传入。模板大致如下:

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文件中提取接口的真实数据,与脚本结合。本轮提示词目标更明确:提取请求中的ip、url、method、json字段,并以JSON格式返回。

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,能够将用例解析、接口数据提取、代码生成三个环节无缝串联,构建一套完整的自动化工具链。
免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策