4

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

1 回答 1

4

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

您还需要将进纸器模式设置为循环或随机 fe。:

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

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

于 2018-09-07T23:57:59.217 回答