如何在gatlingKotlin中为每个请求动态生成body

chhkpiq4  于 2023-06-24  发布在  Kotlin
关注(0)|答案(1)|浏览(153)

我有如下代码:

private val payloadBatchSizes = (1..1001 step 100).toList()

private val httpProtocol = http
    .baseUrl(apiGatewayUrl)
    .acceptHeader("application/json")
    .header("A", "foo")
    .header("B", "bar")
    .header("C", "foo")
    .header("Authorization", authToken)

private val success = scenario("""
  basic scenario
""".trimIndent()).foreach(payloadBatchSizes, "item", "counter").on(
    exec { session ->
        http("collector")
            .post("/v1/events")
            .body(StringBody(getPayloadBatch(session.getInt("item"))))
        session
    }
)

 init {
        setUp(success.injectOpen(
            atOnceUsers(1)
        ).protocols(httpProtocol)
        )
    }

我试图发出一个请求,不同的批量大小范围从1.. 1001具有100间隔步长。但是,当我运行它时,它会失败,并出现以下情况:
模拟在0秒内完成
正在分析日志文件...正在分析日志文件已完成正在生成报告...线程“main”出现异常java.lang.UnsupportedOperationException:在模拟期间没有发送请求,报告将不会在io.gatling.charts.report.ReportsGenerator.generateFor(ReportsGenerator.scala:46)在io.gatling.app.RunResultProcessor.generateReports(RunResultProcessor.scala:63)在io.gatling.app.RunResultProcessor.processRunResult(RunResultProcessor.scala:38)在io.gatling.app.Gatling$.start(Gatling.scala:99)在io.gatling.app.Gatling$.fromArgs(Gatling.scala:51)在io. gatling.app.Gatling$.main(Gatling.scala:39)在io.gatling.app.Gatling.main(Gatling.scala

hec6srdp

hec6srdp1#

你在加特林的函数用法错误。
请阅读exec文档:你不能在函数中使用加特林组件。
这是另一种方式:你必须把你的函数传递给Gatling组件see doc

.foreach(payloadBatchSizes, "item").on(
  exec(
    http("collector")
      .post("/v1/events")
      .body(
        StringBody { session -> getPayloadBatch(session.getInt("item")) }
      )
  )
)

相关问题