在加特林中,每次执行调用时如何生成随机数? (不使用进纸器)

In Gatling, how can I generate a random number each time a call is executed? (not using feeder)

我需要找到一种方法在每次执行 REST 调用时生成一个随机数。

我有以下 GET 调用:

    exec(http("Random execution")
      .get("/randomApi")
      .queryParam("id", getRandomId()))
  }

显然它不起作用,因为随机数只生成一次,我最终得到了相同的结果 每当执行此调用时。我不能使用馈线选项,因为我的馈线已经很大并且由第 3 方为每个测试生成。

.queryParam 将 Expressions 作为其参数,并且由于 Expression 是会话函数的别名,您可以只做...

.queryParam("id", session => getRandomId())

您还可以定义第二个馈线,它使用函数生成值 - 无需更新现有馈线或添加另一个 csv 文件。如果您有更复杂的逻辑来获取/生成 Id

,这将很有用
val idFeeder = Iterator.continually(Map("id" -> Random.nextInt(999999)))

//in your scenario...
.feed(idFeeder)
.exec(http("Random execution")
  .get("/randomApi")
  .queryParam("id", "${id}")
)

本着拥有选择的精神,您拥有的另一个选择是在支持 toString 的会话中存储一个对象,它会生成您需要的任何内容。这是一个绝妙的技巧,可以用于各种事情。

object RANDOM_ID {
  toString() { return RandomId().toString() }
}
... 
exec( _.set( "RANDOM_ID", RANDOM_ID ) )
...
.exec( 
  http("Random execution")
  .get("/randomApi")
  .queryParam( "id", "${RANDOM_ID}" )
)

您可以应用相同的原理来生成随机名称、地址、电话号码,随您便。

那么,哪个是更好的解决方案?馈线,还是会话中的对象?

大多数情况下,它会是供稿器,因为您可以控制它何时更新。 session中的对象每次都会不同,而feeder方案,你控制什么时候值更新,然后你可以多次引用它再改变它。

但在某些情况下,存储对象解决方案可能会使代码更易于阅读,前提是您能够接受每次访问时更改的值。所以很高兴知道它是一个选项。