首页 > 解决方案 > Gatling - 在执行场景之前打印当前时间并将该值传递给下一个场景

问题描述

我正在执行 2 个连续场景,我有一个要求,我需要在第一个场景开始之前记录当前时间,然后将该时间值传递给下一个场景。有人可以建议如何实施。请检查下面我的代码

def fileUpload() = foreach("${datasetIdList}","datasetId"){
  println("File Upload Start Time::::"+Calendar.getInstance().getTime+" for datasetId ::: ${datasetId}")
  exec(http("file upload").post("/datasets/${datasetId}/uploadFile")
    .formUpload("File","./src/test/resources/data/Scan_good.csv")
    .header("content-type","multipart/form-data")
    .check(status is 200).check(status.saveAs("uploadStatus")))
    .exec(session => {
      if(session("uploadStatus").as[Int] == 200)
        counter +=1
    session
  })
}

def getDataSetId() = foreach("${datasetIdList}","datasetId"){
    exec(http("get datasetId")
      .get("/datasets/${datasetId}")
      .header("content-type","application/json")
      .check(status is 200)
    )

我需要记录 datasetIdList 每次迭代的上传开始时间,并将该值传递给下一个场景并为每个 datasetId 打印该值。有人可以建议如何实施吗

标签: gatlingscala-gatling

解决方案


您可以尝试使用before部分

package load

import io.gatling.core.Predef._
import io.gatling.http.Predef._

class TransferTimeSimulation extends Simulation {

  var beforeScn1Start: Long = 0L

  before {
    println("Simulation is about to start!")
    beforeScn1Start = System.currentTimeMillis()
  }

  after {
    println("Simulation is finished!")
  }

  val scn1 = scenario("Scenario 1").exec(
    http("get google")
      .get("http://google.com")
      .check(status.is(200))
  )

  val scn2 = scenario("Scenario 2")
    .exec { session =>
      println("beforeScn1Start = " + beforeScn1Start)
      session
    }

  setUp(
    scn1.inject(atOnceUsers(1))
      .andThen(scn2.inject(atOnceUsers(1)))
  )
    .protocols(http)
    .maxDuration(10)
    .assertions(
      forAll.failedRequests.count.is(0),
    )
  
}

为了更灵活,您还可以考虑使用惰性 val 初始化 https://www.baeldung.com/scala/lazy-val


推荐阅读