【问题标题】:Gatling: loop through all the entries in a feederGatling:循环遍历馈线中的所有条目
【发布时间】:2019-02-13 03:41:34
【问题描述】:

我有一个包含大约 10K 条目的 CSV 文件(为我的会话请求有效负载)。我正在使用内置的 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)

【问题讨论】:

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


    【解决方案1】:

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

    您还需要将馈线模式设置为循环或随机馈线。:

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

    如果不使用默认模式,它只允许获取每条记录一次,之后模拟将由于“空馈线”而失败。如果遇到列表末尾,循环模式将重新提供数据,随机当然会随机执行,因此列表大小不是问题。您必须记住,这并不能保证每一行都只使用一次。如果模拟时间太短,它不会使用所有记录,如果太长,则需要多次使用一些记录。如果您需要每行只运行一次,那么最好使用 10k 个用户运行模拟或保留 10 个用户,但将 forever 替换为 repeat(1000) 循环。

    【讨论】:

    • 尝试了重复循环而不是永远循环,.repeat(100){exec(GSLBRequest.getData)}.inject(customInject);,但仍然面临同样的问题。以 10k 用户运行模拟不是加载我的端点的合适方式。
    • 你需要在循环内部而不是外部调用feed。所以:.repeat(100){feed(rqstFeeder).exec(GSLBRequest.getData)}.inject(customInject)
    • 成功了。能够遍历所有的整个列表。你的建议很完美。 !
    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    相关资源
    最近更新 更多