为什么第一个 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 连接
我有一个 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 连接