scala (字符串插值)如何使用会话中的值作为键将值保存到会话中?

9gm1akwq  于 2023-02-08  发布在  Scala
关注(0)|答案(2)|浏览(182)

我有下面的代码,可以发出一个简单的POST请求。它应该如何工作?在发出请求之前,我生成一个测试值"orderName1",并将其保存到会话中。接下来,我使用函数"create"发出请求,并在函数中使用生成的值。它工作正常!我的请求成功了。因此,我有一个动态生成名称为"Name_68hKl90G"的订单。但是我想将从服务器返回的id保存到会话中。我想将"Name_68hKl90G"作为key使用到会话中。

    • 工作方式(会议):**

订单名称1-〉名称_68hKl90G
姓名:68hKl90G-〉63d80b25cb6c2a7e7e845e40

    • 实际工作方式(会话):**

订单名称1-〉名称_68hKl90G
${订单名称1}-〉63d80b25cb6c2a7e7e845e40
代码:

val generateStr = (symbols: Integer) => Random.alphanumeric.take(symbols).mkString

val prepareData = exec(
  session => {
    val newSession = session
      .set("orderName1", "Name_" + generateStr(8))
    newSession
  }
)

def create(name: String) = exec(
  http("Create order")
    .post("/shop/order")
    .body(StringBody(s"""{"name":"${name}"}""".stripMargin)).asJson
    .check(status.is(201))
    .check(jsonPath("$.id").saveAs(s"${name}")) 
)

val userScn = scenario("Scenario")
  .exec(
    prepareData,
    create("${orderName1}")
  )

setUp(
  userScn.inject(rampUsers(rampUpUserCount) during (rampUpDuration seconds)),
).protocols(httpProtocol)
uhry853o

uhry853o1#

def create(name: String) =
exec(
  http("Create order")
    .post("/shop/order")
    .body(StringBody(s"""{"name":"#{$name}"}""")).asJson
    .check(status.is(201))
    .check(jsonPath("$.id").saveAs("id")) 
).exec { session =>
  val nameValue = session(name).as[String]
  val id = session("id").as[String]
  session.remove("id").set(nameValue, id)
}

create("orderName1")

老实说,这看起来太复杂了,我不明白为什么你不想使用两个不同的属性,一个用于键,一个用于值。

ibps3vxo

ibps3vxo2#

不需要使用会话值作为其他值的键。您可以通过以下代码满足所有需要:

val generateStr = (symbols: Integer) => Random.alphanumeric.take(symbols).mkString

val prepareData = exec(
  session => {
    val newSession = session
      .set("orderName1", "Name_" + generateStr(8))
    newSession
  }
)

def create(name: String) = exec(
  http("Create order")
    .post("/shop/order")
    .body(StringBody(session => s"""{"name":"${session(name).as[String]}"}""".stripMargin)).asJson
    .check(status.is(201))
    .check(jsonPath("$.id").saveAs(s"${name}_id")) 
)

def rename(name: String, newName: String) = exec(
  http("Update order name")
    .patch(session => s"/shop/order/${session(name + "_id").as[String]}")
    .body(StringBody(session => s"""{"name":"${newName}"}""".stripMargin)).asJson
    .check(status.is(200))
)

val userScn = scenario("Scenario")
  .exec(
    prepareData,
    create("orderName1"),
    rename("orderName1", "New name")
  )

setUp(
  userScn.inject(rampUsers(rampUpUserCount) during (rampUpDuration seconds)),
).protocols(httpProtocol)

相关问题