问题原因

当调用 /v1/chat/completions 接口后立即请求 /api/log 查询日志时,经常找不到对应的日志记录。原因是:

接口响应 ≠ 数据入库

/v1/chat/completions 返回响应时,后端的日志数据可能还在异步写入数据库过程中,此时查询 /api/log 自然查不到。


解决方案

/v1/chat/completions 请求后、 /api/log 请求前添加延时。

当前脚本结构

/api/user/login
  ↓
/v1/chat/completions     ← 执行耗时操作
  ↓
[延时等待]               ← 等待数据库写入
  ↓
/api/log                 ← 此时能查到日志
  ↓
/api/user/logout

延时配置详细说明

方式一:通过全局变量配置(当前脚本使用)

JMeter GUI 操作步骤:

  1. 打开测试计划文件
  2. 在左侧目录树中点击 Test Plan(测试计划)
  3. 在下方找到 User Defined Variables(用户定义的变量)区域
  4. 找到 RESPONSE_DELAY 变量,修改其值
  5. 保存脚本

变量配置示例:

变量名说明推荐值
RESPONSE_DELAY响应延时(毫秒)10000

方式二:通过定时器配置(手动添加)

JMeter GUI 操作步骤:

  1. 在左侧目录树中找到需要添加延时的请求(例如 /api/log
  2. 右键点击该请求 → AddTimerConstant Timer
  3. Thread Delay(线程延迟)中输入延时值(毫秒)
  4. 保存脚本

定时器配置示例:

Name: Response Delay Timer
Thread Delay: 10000

脚本 XML 中的配置位置

定时器需要添加在目标请求的 hashTree 节点内,位于请求和其 HeaderManager 之间:

<HTTPSamplerProxy ...>
...
</HTTPSamplerProxy>
<hashTree>
 <HeaderManager .../>
 <hashTree/>
 <ConstantTimer guiclass="ConstantTimerGui" testclass="ConstantTimer" testname="Response Delay Timer">
   <stringProp name="ConstantTimer.delay">${RESPONSE_DELAY}</stringProp>
 </ConstantTimer>
</hashTree>

不同定时器类型说明

定时器类型说明适用场景
Constant Timer固定延时固定等待时间(当前使用)
Gaussian Random Timer高斯随机延时模拟真实用户行为
Uniform Random Timer均匀随机延时随机延时范围
BeanShell Timer自定义脚本延时复杂延时逻辑

为什么需要延时

场景说明
异步写入后端将日志写入数据库的操作通常是异步的,接口返回成功不代表数据已落库
业务延迟部分业务逻辑可能需要额外处理时间
测试稳定性延时可以提高测试脚本查询结果的稳定性,避免误报

注意事项

  • 延时过长会影响整体测试执行时间
  • 延时过短可能导致日志仍查询不到
  • 建议根据实际业务响应时间调整,推荐 10-15 秒
  • RESPONSE_DELAY 是全局变量,一处修改全局生效