gpt4 book ai didi

scala - 如何将一个简单的迭代循环转变为加特林的馈送器?

转载 作者:行者123 更新时间:2023-12-02 01:21:19 28 4
gpt4 key购买 nike

为了在运行性能脚本之前向系统中填充大量数据,我们理想的用例是使用 Gadling 来实现这一点。除了具有唯一的主 ID 之外,数据无需不同。

object Object {

val create = repeat(4, "n")
{
exec(http("Create Object")
.post("/our/api/objects")
.body(ELFileBody("CreateObject_0001_request.txt"))
.check(status.is(201)))
}
}

val createObjects = scenario("ModularSimulation").exec(CreateObjects.create);

setUp(
createObjects.inject(atOnceUsers(1))
).protocols(httpProtocol)

上面的示例可以通过更改 repeat 的值来创建任意数量的对象,但是在大规模(例如 100,000 个对象)下,线性地执行此操作变得不切实际。所以我想做的是有一个由 100 个用户创建的共享对象池。

这当然是馈线的用例。使用简单的迭代循环(例如 0100000)。

我知道(从 documentation 和其他 questions ) Feeder 是 Iterator[Map[String, T]] 的类型别名,所以我认为这应该非常简单 - 但我似乎找不到这个最基本案例的简单示例。

任何帮助将不胜感激。

最佳答案

我不确定你想要不实现什么,但是使用 feeder 很容易。假设您有:

import scala.util.Random

// An infinite feeder generating random strings
// accessible under "yourInfiniteSessionKey" from session
val infiniteFeeder = Iterator.continually(
Map("yourInfinteSessionKey" -> Random.alphanumeric.take(20).mkString)
)

// A finite feeder (in sense of possible values)
// accessible under "yourFiniteSessionKey" from session
// it contains just 2 values for illustration purposes
val finiteFeeder = (for (i <- 0 until 2) yield {
Map("yourFiniteSessionKey" -> s"I'm finite $i")
})

// A fixed feeder (again in sense of possible values)
// accessible under "yourFixedSessionKey" from session
// again it contains just 2 values for illustration purposes
val fixedFeeder = Array(
Map("yourFixedSessionKey" -> s"I'm fixed 1"),
Map("yourFixedSessionKey" -> s"I'm fixed 2")
)

val scn = scenario("Feeding")
.feed(infiniteFeeder)
.feed(finiteFeeder)
.feed(fixedFeeder)
.exec(http("root")
.get("/${yourInfinteSessionKey}/${yourFiniteSessionKey}/${yourFixedSessionKey}"))

仅作为示例,我们的场景从所有 feeder 获取数据,并使用这些值针对“/”组成 GET 请求。

在本例中,fixedFeederArray[Map[String, _]finiteFeederIndexedSeq[Map[String, _] ]。如果有限进料器中的元素数量与您的设置相匹配,那么您就可以运行该场景,例如像:

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

安装程序只有两个虚拟用户,因此运行不会出现问题。当您的设置中有更多虚拟用户时,例如:

setUp(
scn.inject(constantUsersPerSec(1) during(30.seconds)) // equals 30 virtual users
).protocols(httpConf)

您将遇到有限/固定馈线的问题,加特林会提示它,您的模拟将像这样停止:

[error] java.lang.IllegalStateException: Feeder is now empty, stopping engine
[error] at io.gatling.core.action.SingletonFeed.feed(SingletonFeed.scala:59)
[error] at io.gatling.core.action.SingletonFeed$$anonfun$receive$1.applyOrElse(SingletonFeed.scala:28)
[error] at akka.actor.Actor$class.aroundReceive(Actor.scala:467)

好消息是,您可以使用 RecordSeqFeederBuilder 的 Ga特林 API 方法使有限/固定馈线无限。 ,例如:

// Now the feeder from fixed values is infinite
val fixedFeeder = Array(
Map("yourFixedSessionKey" -> s"I'm fixed 1"),
Map("yourFixedSessionKey" -> s"I'm fixed 2")
).circular // go back to the top of the array once the end is reached

您还可以直接在场景定义中使用此类 API 方法调用,并且保持固定/有限馈线不变,例如:

val scn = scenario("Feeding")
.feed(infiniteFeeder)
.feed(finiteFeeder.random) // now is finiteFeeder infinite
.feed(fixedFeeder.circular) // fixedFeeder is infinite too
.exec(http("root")

享受

关于scala - 如何将一个简单的迭代循环转变为加特林的馈送器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35730086/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com