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
相关产品推荐
相关产品推荐

