加特林机:循环遍历我的Feeder CSV文件中的所有有效负载的问题

时间:2018-09-07 19:11:50

标签: scala performance-testing load-testing gatling scala-gatling

我有一个CSV文件,该文件的会话有效负载约为1万。我正在使用加特林的内置csv馈送器在我的请求中遍历所有这些。但是我可以根据测试中的用户数量来获取请求。

例如,如果我有10个用户,则在运行时仅提取csv的前10条记录。下面是我正在使用的源代码。

  val rqstFeeder = csv("rqst.csv")
  val user = ConfigFactory.load().getInt("app.loadVariables.user")
  var URL: String = ConfigFactory.load().getString("app.loadVariables.URL")

  val httpProtocol = http
    .header(HttpHeaderNames.Accept, HttpHeaderValues.ApplicationJson)
    .inferHtmlResources()

  object GSLBRequest {
    val getData =
      exec(
        http("Get GSLB Data")
          .post(URL)
          .body(StringBody(ConfigFactory.load().getString("app.loadVariables.body"))).asJSON
          .check(status.is(200))
      )
  }

  val customInject = constantUsersPerSec(user) during (5 seconds)
  val source = scenario("GSLB Endpoint")
    .feed(rqstFeeder)
    .forever(exec(GSLBRequest.getData)).inject(customInject);

  )

  setUp(source)
    .protocols(httpProtocol).maxDuration(30 seconds)

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是送纸器的工作方式。每次调用feed(feeder)时,都会得到一组完整的值另存为属性-如果是CSV,则为一行。由于您每个用户调用一次,因此仅使用10行。将feeder放入循环中,然后将在每次迭代中获取值。

您还需要将馈线模式设置为圆形或随机特征。

val rqstFeeder = csv("rqst.csv").circular

如果没有该默认模式,则将仅获取每个记录一次,此后模拟将由于“空进纸器”而失败。循环模式将在遇到列表末尾时再次从头开始馈送数据,当然随机会随机进行,因此列表大小不是问题。您必须记住,这不能保证每行将只使用一次。如果模拟很短,它将不会使用所有记录;如果模拟时间太长,则需要多次使用一些记录。如果您需要精确地运行每行一次,那么最好以1万个用户运行模拟或保留10个用户,但是将forever替换为repeat(1000)循环。