在加特林场景之外进行 Http 调用

Gau*_*tam 4 scala load-testing gatling

我的用例是进行 http 调用,从响应中的 Location 标头获取重定向 url,并使用此 url 执行负载测试。该 url 是动态生成的,因此是最初的第一个 http 调用。请注意,测试第一个 http 调用不是我的测试的一部分。实现这一目标的最佳方法是什么?加特林中是否有类似于 @BeforeMethod 的等效项?加特林本身可以用来进行独立的http调用还是我需要使用基本的scala来实现这一点?到目前为止我有这个:

val httpConfig = http
  .inferHtmlResources()
  .acceptHeader("*/*")
  .acceptEncodingHeader("gzip, deflate")
  .acceptLanguageHeader("en-US,en;q=0.5")
  .header("Authorization", "Negotiate " + token)
  .doNotTrackHeader("1")
  .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:51.0) Gecko/20100101 Firefox/51.0")

val scn = scenario("My Tests").exec(http("Health check")
  .get("https://example-server.com")
  .check(status.is(200)))

setUp(
  scn.inject(atOnceUsers(10))
).protocols(httpConfig)
Run Code Online (Sandbox Code Playgroud)

我对加特林和scala的理解是有限的。因此就有了这个基本问题。

Ric*_*ich 5

您可以在Simulation.

这将由加特林运行时在启动场景之前运行。

IE

class MyTestWithDynamicTarget extends Simulation {

  val targetUrl = loadTarget()

  val scn = scenario("My Tests")
    .exec(http("Health check")
      .get(targetUrl)
      .check(status.is(200)))

  setUp(
    scn.inject(atOnceUsers(10))
  ).protocols(httpConfig)

  /**
   * Fetch the current location of the service under test, which is returned
   * in the "Location" header of an HTTP request
   */
  def loadTarget() = {
    ??? // see e.g. /sf/ask/186130031/
  }
}

Run Code Online (Sandbox Code Playgroud)

(场景 API 确实提供了“之前”和“之后”挂钩(请参阅此处的文档),但没有简单的方法可以将这些挂钩中的信息传递到场景配置中,正如您需要在此处执行的那样。)