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

Gatling中如何打印并验证POST请求URI的正确性?

在Gatling中打印并验证POST请求的动态URI

问题描述

我希望在Gatling性能测试框架中打印POST请求的URI,并验证该URI在完成变量替换、动态生成后是否正确,请问该如何实现?

我的代码实现

object BidSubmission extends HttpUtil {

  val orders_feeder = csv("data/Round-1.csv").circular

  def orderSubmission: ChainBuilder =
    pause(pauseBy(5) seconds)
      .repeat(1) {
        feed(orders_feeder)
          .exec(postToUri(s"${Constants.orderSubmission_URL}/#{$AuctionId}/base-orders/proxy-bid", "")
            .queryParam("employeeId", "#{empNo}")
            .body(StringBody(session => {
              println(session)
              println(session.attributes("empNo"))
              val empNo = session.attributes("empNo").asInstanceOf[String]
              val orderNo = session.attributes("orderNo").asInstanceOf[String]
              println(s"\n\n\n $orderNo \n\n\n")
              var slotNos = orderNo.replace("[", "").replace("]", "").split(" +")
              println(s"\n\n\n ${generatePayload(empNo, slotNos)} \n\n\n")
              generatePayload(empNo, slotNos)
              " "
            }))
          )
      }

实现方案

方法1:自定义步骤提前构建并打印URI

在feed之后、请求执行之前,添加独立的exec步骤,从session提取变量拼接完整URI,直接打印同时做验证:

def orderSubmission: ChainBuilder =
  pause(pauseBy(5) seconds)
    .repeat(1) {
      feed(orders_feeder)
        // 新增URI打印与验证步骤
        .exec(session => {
          // 从session中提取变量
          val auctionId = session("AuctionId").as[String]
          val empNo = session("empNo").as[String]
          
          // 拼接完整请求URI(包含路径和查询参数)
          val basePath = s"${Constants.orderSubmission_URL}/$auctionId/base-orders/proxy-bid"
          val fullUri = s"$basePath?employeeId=$empNo"
          
          // 打印生成的URI
          println(s"当前POST请求URI:$fullUri")
          
          // 按需添加验证逻辑,比如检查变量是否正确替换
          if (!fullUri.contains(auctionId)) {
            println(s"异常:URI未正确替换AuctionId变量,当前值为$auctionId")
          }
          
          // 必须返回session,保证流程正常执行
          session
        })
        .exec(postToUri(s"${Constants.orderSubmission_URL}/#{$AuctionId}/base-orders/proxy-bid", "")
          .queryParam("employeeId", "#{empNo}")
          .body(StringBody(session => {
            val empNo = session("empNo").as[String]
            val orderNo = session("orderNo").as[String]
            var slotNos = orderNo.replace("[", "").replace("]", "").split(" +")
            generatePayload(empNo, slotNos)
          }))
        )
    }

方法2:通过日志配置打印请求详情

不想手动拼接的话,直接调整Gatling日志级别,让框架自动输出完整请求信息:

  • 找到项目中的logback.xml文件,添加或修改如下配置:
<logger name="io.gatling.http" level="DEBUG" />
  • 开启DEBUG级别后,Gatling会输出每个请求的完整URL、请求头、请求体等细节,方便直接查看URI是否正确。注意:正式压测时改回INFO或WARN级别,避免日志量过大影响性能。

注意事项

  • 不要在StringBody的闭包里处理URI打印,这个闭包的职责是生成请求体,放在这里会导致逻辑耦合,还可能影响请求体生成效率。
  • 从session取值时,用session("key").as[String]比直接调用attributes更符合Gatling规范,也能保证类型安全。

内容的提问来源于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 15:31:58