Gattle 将列表作为函数参数传递

问题描述 投票:0回答:1

我似乎无法用 ProduceTestMessage("A", "${userNames}") 修复最后一次 exec 调用 它需要一个当然是正确的列表,但是如何正确传递字符串的 userNames 列表??

当前仅限于 Scala 主要版本 2.13

这是我在另一个文件中的函数定义

 def produceTestMessage(prop1: String, propLines: List[String]): ChainBuilder = {
   ..
 }
 

这是我的最小化场景文件:

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

class MyScenario extends KafkaChainBuilder { {

  def produceTestMessage(): ChainBuilder =
    exec(produceTestMessage("A", session => session("${userNames}").as[List[String]]))


  // Function to set session variables
  def setSessionVariables(): ChainBuilder =
    exec(session => session
      .set("userId", "12345")
      .set("userNames", List("john_doe", "jane_doe", "bob_smith")) // Setting userNames as a List[String]
    )

  // Function to use session variables in another chain call
  def useSessionVariables(): ChainBuilder =
    exec(http("Example Request")
      .get("/user/${userId}/${userNames(0)}") // Accessing the first userName from the list
      .check(status.is(200))
    )

  val httpConf = http.baseUrl("http://example.com") // Configure base URL

  val scn = scenario("My Scenario")
    .exec(setSessionVariables()) // Call function to set session variables
    .exec(useSessionVariables()) // Call function to use session variables
    .exec(produceTestMessage("A", "${userNames}"))

  setUp(
    scn.inject(atOnceUsers(1)) // Simulate one user
  ).protocols(httpConf)
}

任何帮助表示赞赏:)

scala scala-gatling
1个回答
0
投票

您可以直接从函数中使用会话变量

class MySimulation extends Simulation {

  def produceTestMessageL(): ChainBuilder =
    exec(produceTestMessage("A"))

  def setSessionVariables(): ChainBuilder = {
    exec(session => session
      .set("userId", "5")
      .set("userNames", List("john_doe", "jane_doe", "bob_smith")) 
    )
  }

  def useSessionVariables(): ChainBuilder =
    exec(http("Example Request")
      .get("/users/#{userId}")
      .check(status.is(200))
    )

  private val httpConf = http.baseUrl("https://jsonplaceholder.typicode.com") 

  private val scn = scenario("My Scenario")
    .exec(setSessionVariables()) 
    .exec(useSessionVariables())
    .exec(produceTestMessageL())

  setUp(
    scn.inject(atOnceUsers(1)) 
  ).protocols(httpConf)

}


object Message extends StrictLogging {

  def produceTestMessage(prop1: String): ChainBuilder =
    exec(
      session => {
        val userId = session("userId").as[String]
        val userNames = session("userNames").as[List[String]]
        logger.info(s"$userNames")
        logger.info(s"${userNames.head}")
        logger.info(s"$userId")
        session
      }
    )
}
© www.soinside.com 2019 - 2024. All rights reserved.