为什么第一个 Gatling 请求比较慢?

Why first Gatling request is slower?

我有一个 Gatling 场景,我在其中调用 Gatling 演示应用端点。我注意到第一个请求需要更长的时间来响应。 例如:

public class OneEndpointSimulation extends Simulation {

HttpProtocolBuilder httpProtocol = http
        .baseUrl("http://computer-database.gatling.io")
        .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
        .doNotTrackHeader("1")
        .acceptLanguageHeader("en-US,en;q=0.5")
        .acceptEncodingHeader("gzip, deflate")
        .userAgentHeader("Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0");

ScenarioBuilder scn = scenario("BasicSimulation")
        .repeat(10)
        .on(
                exec(http("request_1")
                        .get("/computers")));

{
    setUp(scn.injectOpen(atOnceUsers(1))
    ).protocols(httpProtocol);
}
    
}

Screen of Gatling report

这里是 simulation.log 文件结果:

RUN activitydatabase.OneEndpointSimulation  oneendpointsimulation   1647472671275       3.7.5
USER    BasicSimulation START   1647472672290
REQUEST     request_1   1647472672322   1647472672578   OK   
REQUEST     request_1   1647472672614   1647472672740   OK   
REQUEST     request_1   1647472672742   1647472672867   OK   
REQUEST     request_1   1647472672868   1647472672992   OK   
REQUEST     request_1   1647472672994   1647472673121   OK   
REQUEST     request_1   1647472673123   1647472673244   OK   
REQUEST     request_1   1647472673246   1647472673368   OK   
REQUEST     request_1   1647472673371   1647472673492   OK   
REQUEST     request_1   1647472673494   1647472673616   OK   
REQUEST     request_1   1647472673618   1647472673741   OK   
USER    BasicSimulation END 1647472673748

有什么方法可以加快第一个请求的速度吗?

你误会了,这是意料之中的事。

由于测试的设计方式,第一个请求需要更多时间,因为它有更多工作要做:

  • 执行 DNS 解析
  • 打开 HTTP 连接

此单个虚拟用户的下一个请求将跳过此额外工作,因为:

  • DNS 解析将在缓存中
  • 他们将重用相同的 keep-alive HTTP 连接