使用 feeder 随机访问地图数组中的一行

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

我试图做一个非常简单的操作,但当我们是 scala/gadling 的初学者时,它会变得非常复杂。

我只需要根据每个请求在地图数组中随机选择一条线...

我正在处理一个看起来像这样的 JSON:

[
 { "name": "a", "age": 33 },
 { "name": "b", "age": 34 },
 { "name": "c", "age": 38 }
]

所以这是我正在尝试做的草稿:

val user = feed(jsonFile("peoples.json"))
  .exec( session => {
    val someone = session[random()] // How to code that ?
    http(someone.age)
      .get("/users/${someone.name}")
  })

val scn = scenario("").exec(user)

会话似乎包含用户数据,但我不知道如何访问它来构建我的http请求的路径!

我已经看到了许多不同的方法来完成可能接近我想要实现的目标的事情,但我找不到清晰的工作示例。

scala gatling
2个回答
1
投票

检查 Feeders 文档:https://docs.gadling.io/reference/script/core/session/feeders/

你基本上可以只使用随机喂食器:

feed(jsonFile("peoples.json")).random

然后就可以用DSL访问了:

val myFeeder = jsonFile("peoples.json").random
val userRequest = exec(http("someones ${age}")
      .get("/users/${name}"))

val scn = scenario("x").exec(feed(myFeeder),userRequest)

1
投票

一般来说,在 Scala 中,如果你有一个

Seq
访问随机元素会像这样

import scala.util.Random

val random = new Random
val list = List(1, 2, 3, 4, 5)
list(random.nextInt(list.length))

gatling
中我相信它会给你
Seq[Map[String, Any]]
作为输入。所以你会做类似的事情

val random = new Random
val someone = session(random.nextInt(session.length))
http(someone("age")) ...
© www.soinside.com 2019 - 2024. All rights reserved.