当前位置: 首页 > news >正文

AI应用测试:遇到类ChatGPT的流式接口要如何压测?

先说结论:

使用最普遍的JMeter 就能支持类 OpenAI 的流式接口(如 ChatGPT 的流式聊天接口)的测试

总体设置

  • JMeter 支持测试 OpenAI 的流式接口,但需要额外配置(如启用 KeepAlive 和调整超时)。
  • 如果需要实时处理流式响应,使用 Regular Expression Extractor 或自定义脚本(如 Groovy)进行处理。
  • 对于复杂的流式接口测试,建议结合 JMeter 和自定义脚本实现。

1. OpenAI 流式接口有什么特殊性?

OpenAI 的流式接口(streaming API)会以 Server-Sent Events (SSE)chunked transfer encoding 的形式返回数据。这意味着响应是分块的,而不是一次性返回完整的 JSON。

JMeter 默认不支持直接处理流式响应,但可以通过以下方法实现测试。


2. 使用 JMeter 测试流式接口的步骤

步骤 1:添加 HTTP 请求
  1. 在 JMeter 中添加一个 HTTP Request 组件。
  2. 配置 HTTP 请求:
    • Server Name or IP: 填写 OpenAI 的 API 地址(如 api.openai.com)。
    • Path: 填写 API 路径(如 /v1/chat/completions)。
    • Method: 选择 POST
    • Body Data: 填写请求体,例如:
      {
             
        "model": "gpt-4",
        "messages": [{
             "role": "user", "content": "Hello!"}],
        "stream": true
      }
      
    • 设置 Header
      • Content-Type: application/json
      • Authorization: Bearer <your-api-key>
步骤 2:启用流式响应处理

默认情况下,JMeter 会等待完整的 HTTP 响应。为了处理流式响应,需要修改以下配置:

  1. 在 HTTP 请求中,勾选 Use KeepAlive
  2. HTTP Request 的高级选项中,设置:
    • Implementation: 选择 HttpClient4
    • Response Timeout: 设置为一个较大的值(如 60000 毫秒),以确保不会超时。
步骤 3:添加后置处理器

由于流式接口会分块返回数据,可以使用 Regular Expression ExtractorJSON Extractor 提取响应中的内容。

  1. 添加 Regular Expression Extractor

    • 正则表达式:根据流式响应的格式提取数据。例如,如果响应是 data: {...},可以使用:
      data: (\{.*?\})
      
    • 模板:$1$
    • 匹配编号:0(表示提取所有匹配项)。
  2. 如果需要处理 JSON 数据,可以添加 JSON Extractor

    • JSON Path 表达式:例如 $.choices[0].delta.content
步骤 4:添加监听器
  1. 添加 View Results Tree 监听器,查看请求和响应的详细信息。
  2. 添加 Summary ReportAggregate Report,查看性能测试结果。

总体来看,处理流式响应的挑战有这几点:
  • 分块响应:JMeter 默认会将所有分块合并为一个完整的响应。如果需要实时处理每个分块,可能需要自定义脚本。
  • 超时设置:流式接口可能会持续较长时间,需要适当调整超时设置。
  • 性能测试:流式接口的性能测试可能需要模拟长时间连接和高并发场景。

3. 替代方案:使用自定义脚本

如果 JMeter 的功能无法满足需求,可以考虑使用 JSR223 Sampler 编写自定义脚本(如 Groovy 或 Python)来处理流式响应。例如:

Groovy 脚本示例
import org.apache.http.client.methods.HttpPost
import org.apache.http.entity.StringEntity
import org.apache.http.impl.client.CloseableHttpClient
import org.apache.http.impl.client.HttpClients
import org.apac

相关文章:

  • rust笔记11:虚拟方法表VTable 和 dyn
  • LC109. 有序链表转换平衡二叉搜索树
  • 【操作系统】设备管理
  • 多机多卡训练和单机多卡训练速度对比
  • VTP协议故障排除——三层交换机
  • MySQL零基础教程15—简单的表连接(join)
  • Windows系统还原详解
  • 51单片机使用DS18B20温度传感器
  • day27 第八章 贪心算法 part01
  • 深度学习R8周:RNN实现阿尔兹海默症(pytorch)
  • 补丁供应链案例:CVE-2024-7254. Protobuf. Google
  • FastGPT 引申:知识库辅助开发(代码符号自动提取与文件匹配工具详解)
  • FastGPT 引申:如何基于 LLM 判断知识库的好坏
  • cesium+vue3自定义HTML实体弹窗、加高德路网、防实体漂浮、让用户画圆、鹰眼
  • 51c自动驾驶~合集53
  • 从建筑设计到施工工具:软件体系结构与框架的协同之道
  • el-input 设置类型为number时,输入中文后光标会上移,并且会出现上下箭头
  • RK3568平台(GPIO篇)libgpiod的使用
  • 为AI聊天工具添加一个知识系统 之133 详细设计之74通用编程语言 之4 架构及其核心
  • AI学习笔记:LM studio大模型加载参数说明
  • 南阳理工网站建设/百度的网站
  • 网站建设官网免费模板/石家庄seo结算
  • wordpress显示某一类文章/seo综合查询
  • 南京网站制作西安/抖音seo排名系统哪个好用
  • 北京网站建设明细/北海百度seo
  • 厦门景观绿环建设行业协会网站/app开发用什么软件