You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gatling Session变量替换失败及POST请求URI捕获求助

针对Gatling性能测试问题的解决方案

问题1:Session变量AuctionId在Payload中未替换

Gatling的#{AuctionId} EL表达式仅在Gatling DSL的特定上下文(如直接定义在请求body的字符串中)才会自动解析。如果你的generateSlotNo是普通Scala方法,直接在方法内使用#{AuctionId}占位符不会触发变量替换——因为该方法脱离了Gatling的Session解析流程。

解决方案:

修改generateSlotNo方法,让它接收Session作为参数,手动从Session中提取AuctionId的值:

def generateSlotNo(session: Session): String = {
  val auctionId = session("AuctionId").as[String]
  s"slot_${auctionId}" // 按实际Payload格式拼接内容
}

在请求定义中,通过函数式方式调用该方法,确保Session被传入:

.exec(http("POST Request")
  .post("/your-endpoint")
  .body(StringBody(session => generateSlotNo(session)))
)

这样就能正确从Session中获取AuctionId并生成替换后的Payload。

问题2:捕获POST请求的目标URI

场景1:目标URI提前构造/从CSV读取

如果POST目标URI是从CSV读取或提前通过Session变量构造的,直接在请求前将其存入Session即可:

// 假设CSV包含targetUri字段
.exec(csv("test-data.csv").circular)
.exec(session => {
  val targetUri = session("targetUri").as[String]
  session.set("requestTargetUri", targetUri)
})
.exec(http("POST Request")
  .post(session => session("requestTargetUri").as[String])
)

场景2:捕获含动态参数的实际请求URI

如果URI包含动态生成的参数,可通过Gatling的check机制或自定义日志输出:

.exec(http("POST Request")
  .post("/api/auction")
  .formParam("auctionId", "#{AuctionId}")
  // 捕获跳转后的URI(若存在跳转)
  .check(currentLocation.saveAs("responseLocation"))
  // 直接打印请求URI到日志
  .extraInfoExtractor(session => {
    println(s"Sent POST to: ${session("requestTargetUri").as[String]}")
    Nil
  })
)

若需在测试报告中展示URI,可将其存入Session后,通过自定义报告处理器或日志工具提取。

内容的提问来源于stack exchange,提问作者Banu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:55:28