微信扫码
与创始人交个朋友
我要投稿
接口自动化测试用例是一个老生常谈的问题,在未引入人工智能之前,也有非常多的生成方案,比如如下所示,通过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()
掌握接口自动化测试用例生成的原理。
了解如何通过大语言模型生成接口自动化测试脚本与数据。
掌握通过LangChain生成完整版接口自动化测试用例的方法。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-12-25
基于LangChain构建安全Agent应用实践(含代码)
2024-12-22
ANTHROPIC:高端的食材往往需要最朴素的烹饪方法: prompt, workflow, agent
2024-12-21
用LangChain教AI模仿你的写作风格:详细教程
2024-12-18
一站式 LLM 工程观测平台:Langfuse,让所有操作可观测
2024-12-17
LLMs开发者必看!Pydantic AI代理框架震撼登场!
2024-12-16
用LangChain实现一个Agent
2024-12-16
通过阿里云 Milvus 和 LangChain 快速构建 LLM 问答系统
2024-12-16
大模型部署调用(vLLM+LangChain)
2024-04-08
2024-08-18
2024-06-03
2024-10-10
2024-04-08
2024-04-17
2024-06-24
2024-07-13
2024-04-11
2024-09-04
2024-12-02
2024-11-25
2024-10-30
2024-10-11
2024-08-18
2024-08-16
2024-08-04
2024-07-29