我有几个. csv文件,我想在Gatling中用于相同的数据。这些文件中的每一个都有一定数量的ID,我希望可以公平地访问它们。我不想把它们都放在同一个文件中,因为. csv文件是由SQL查询生成的,虽然我在一个文件中可能有很多ID,但在另一个文件中我只有几个。对我来说重要的是,我从每个文件中都有一个随机样本和一种指定分布的方法。
我找到了一个如何执行此操作的示例,但在我的案例中应用它时遇到了困难。这是我到目前为止的代码。我尝试1)在会话中打印来自feeder的值,2)尝试在get请求中使用来自feeder的值。两次尝试都失败了,出现了各种错误,我在下面详细说明:
import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
import util.Random
class FeederTest extends Simulation {
//headers...
val userCreds = csv("user_creds.csv")
val sample1 = csv("sample1.csv")
val sample2 = csv("sample2.csv")
def randFeed(): String = {
val foo = Random.nextInt(2)
var retval = ""
if (foo == 0) retval = "file1"
if (foo == 1) retval = "file2"
return retval
}
val scn = scenario("feeder test")
.repeat(1) {
feed(userCreds)
.doSwitch(randFeed)(
"file1" -> feed(sample1),
"file2" -> feed(sample2)
)
.exec(http("request - login")
.post("<URL>")
.headers(headers_login)
.formParam("email", "${username}")
.formParam("password", "<not telling>"))
.exec(session => {
println(session)
println(session("first").as[String])
session})
.exec(http("goto_url")
.get("<my url>/${first}"))
}
setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}
这是当我尝试在会话中打印出进纸器值时得到的错误(如上面使用会话的代码(
[ERROR] [03/13/2015 10:22:38.221] [GatlingSystem-akka.actor.default-dispatcher-8] [akka://GatlingSystem/user/sessionHook-2] key not found: first
java.util.NoSuchElementException: key not found: first
at scala.collection.MapLike$class.default(MapLike.scala:228) at scala.collection.AbstractMap.default(Map.scala:59)
at scala.collection.MapLike$class.apply(MapLike.scala:141)
at scala.collection.AbstractMap.apply(Map.scala:59)
at io.gatling.core.session.SessionAttribute.as(Session.scala:40)
at FeederTest$$anonfun$2.apply(feeder_test.scala:81)
at FeederTest$$anonfun$2.apply(feeder_test.scala:79)
at io.gatling.core.action.SessionHook.executeOrFail(SessionHook.scala:35)
at io.gatling.core.action.Failable$class.execute(Actions.scala:71)
at io.gatling.core.action.SessionHook.execute(SessionHook.scala:28)
at io.gatling.core.action.Action$$anonfun$receive$1.applyOrElse(Actions.scala:29)
at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:171)
at akka.actor.Actor$class.aroundReceive(Actor.scala:465)
at io.gatling.core.akka.BaseActor.aroundReceive(BaseActor.scala:22)
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)
at akka.actor.ActorCell.invoke(ActorCell.scala:487)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)
at akka.dispatch.Mailbox.run(Mailbox.scala:221)
at akka.dispatch.Mailbox.exec(Mailbox.scala:231)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
我还尝试在会话中使用EL表达式
${first}
。{string}这是所有的代码。类似地,在上一篇中。get
行我收到一个错误,说“没有定义名为'first'的属性”。
我目前使用的CSV文件只有两列,第一列和最后一列,如下所示:
sample1.csv:
first, last
george, bush
bill, clinton
barak, obama
sample2.csv:
first, last
super, man
aqua, man
bat, man
我用的是加特林2.1.4。
我从未使用过馈线,但从文档中,我看到了两个可能的问题:
randFeed
返回“foo”或“bar”,但您正在映射“file1”和“file2”,所以是否加载了任何内容?(文件中说,“如果没有选择开关,则开关被旁路。”)
doSwitch
采用表达式[Any]
,这是会话的类型别名=
这正是你要做的。即使
randFeed
是def,它仍然不会返回函数,而是返回字符串。
由于您希望每次虚拟用户通过此步骤时都调用randFeed,因此必须将
randFeed
包装在函数中,即使您不使用会话输入参数。
doSwitch(_ => randFeed)
然后,您的randFeed既丑陋(无意冒犯)又低效(随机同步):
import scala.concurrent.forkjoin.ThreadLocalRandom
def randFeed(): String =
ThreadLocalRandom.current().nextInt(2) match {
case 0 => "file1"
case 1 => "file2"
}
我可以用这种喂食器 但是当我得到这样的文件时,我如何使用feeder来替换超文本传输协议路径、标题和帖子正文?
我对加特林和斯卡拉都是新手。我有一个清单,记录我的价值观。我想稍后迭代该列表以测试get操作。我该怎么做。 我基本上希望feeder对列表中给定的数据不断重复。 我试着用下面的方式创建feeder。但这是个例外 有人能帮我从列表中创建一个feeder吗
我的加特林版本是2.2.0,例如: 只是一个接受用户名并返回凭据字符串的函数。 如您所见,用户名存储在
我试着用各种“Rest”和“atOnceUser”进行注射。我在留档上没有找到一个好的解决方案。 我的方法是使用本地计数器创建一个名为“getNextNumber()”的函数,以增加“atOnceUser”的数量,但该函数一开始只调用一次。 有什么想法吗? 我的代码:
Gatling解析Strings参数值并将它们转换为函数,这些函数将根据存储在会话中的数据计算结果,然后对其进行评估。 加特林文件 有没有办法在exec中手动执行此操作? 我有多个使用EL属性的请求体模板,发送的请求将因进纸器而异 我目前拥有的代码如下: 我希望没有办法评估嵌套的EL属性,但是有没有办法使用会话变量手动评估它?类似于 我在其他一些问题中看到过ELCompiler被引用,但不确定从哪
我有一个包含JSON数组的JSON文件 测验json 我想针对endpoint测试JSON数组中的每个元素,以观察系统针对唯一有效负载的性能 目前我有 测试ervice.scala 我无法从作为JSON Gatling文档称JSON Feeder将数组的每个元素加载到一个记录集合中 https://gatling.io/docs/2.3/session/feeder/ 即: 并将正文设置为 问题是