为了在运行性能脚本之前用大量数据填充系统,我们理想的用例是使用Gatling。数据不需要不同,除了具有唯一的主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
的值来创建任意数量的对象,但是在大范围(例如100000个对象)下,线性地这样做变得不切实际。所以我想做的是有一个共享的对象池,由100个用户创建。
当然,这就是喂食器的使用案例。而不是生成一个静态的。csv文件
或使用Redis
使用简单的迭代循环(例如0
到100000
)似乎最简单。
我知道(从文档和其他问题中)Feeder是迭代器[Map[String,T]]的一个类型别名,所以我认为这应该非常简单——但我似乎找不到这个最基本情况的简单示例。
任何帮助都将不胜感激。
很好的答案是Teliatko,当你需要一个基于有限馈线的无限馈线时,你也可以添加到阵列中。像这样的随机或循环:
val infiniteFeeder = (for (i <- 0 until 2) yield {
Map("yourFiniteSessionKey" -> s"I'm finite $i")
}).toArray.random
我不确定你想不想实现什么,但使用feeders很容易。假设您有:
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}"))
只是为了举例,我们的场景从我们所有的馈送器中获取并使用值来针对“/”组成GET请求。
在这种情况下,fix edFeeder
是Array[Map[String,_]
和finiteFeeder
是IndexedSeq[Map[String,_]
。如果有限馈源中的项目数与您的设置匹配,则可以运行该场景,例如:
setUp(
scn.inject(atOnceUsers(2))
).protocols(httpConf)
安装程序只有两个virual用户,因此它运行起来没有问题。当您的设置中有更多虚拟用户时,例如:
setUp(
scn.inject(constantUsersPerSec(1) during(30.seconds)) // equals 30 virtual users
).protocols(httpConf)
您将遇到有限/固定馈线的问题,Gatling将对此进行投诉,您的模拟将停止如下:
[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的Gatling 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")
享受吧
我有一个CSV文件,其中有大约10K个条目(我的会话的请求有效负载)。我正在使用内置的CSV进纸器在我的请求中循环遍历所有这些条目。但是只执行与测试中的用户数相对应的请求数。我希望整个提要都被执行。 例如,如果我有10个用户,那么在运行时只获取CSV的前10条记录。 这是我的代码:
如何在Gatling中创建一个简单的进纸器而不使用csv文件?我尝试了Gatling留档中的脚本。我在留档中看到了一个例子 我不明白上面的代码。 我尝试了一个带有使用csv文件的进纸器的脚本并成功执行。与其从csv文件中馈送数据,不如如何编写可以取定义值的进纸器。
问题内容: 问题很简单。我的代码中有一个循环: 在此循环中,当我们处于第一次或最后一次迭代时,我想做出不同的反应。 这个怎么做? 问题答案: 您可以使用一个计数器:
问题内容: 我想知道是否有任何内置方法可以继续进行python外循环中的下一次迭代。例如,考虑以下代码: 我希望此继续语句退出jj循环并转到ii循环中的下一项。我可以通过其他方式(通过设置标志变量)来实现此逻辑,但是有一种简单的方法可以做到这一点,还是像要求太多? 问题答案: 在一般情况下,当您有多个循环级别且对您不起作用时(因为您要继续上一个循环,而不是当前循环的右上循环),可以执行以下操作之一
我将获取一个用户列表作为数组,对数据进行分页,并以表格的形式显示在视图中。 为了迭代数组,我使用 foreach 循环。但是我的前循环迭代不起作用。 这是一个示例数组,当我执行< code>print_r()时,我有< code>id、< code>email和< code>full_name字段,我想在视图中显示它们 这是我迭代数组的视图部分。结果存储在< code>$userList中。这个数
我有以下Python生成器: 而且我想在Java中实现一个,它的行为有点像之前的生成器。我曾尝试使用两个内部迭代器,但它不起作用。 我该怎么修?