目录
HTTP Protocol
了解连接、重定向、缓存、资源推断和 DNS 解析,HTTP 是 Gatling 的主要协议目标,所以这是我们投入最多精力的地方。Gatling HTTP 允许您加载测试 Web 应用程序、Web 服务或网站。 它支持 HTTP 和 HTTPS,具有常见浏览器的几乎所有现有功能,例如缓存、cookie、重定向等。但是,Gatling 不是浏览器:它不会运行 Javascript,不会应用 CSS 样式并触发 CSS 背景图像下载,不会对 UI 事件做出反应,等等。Gatling 在 HTTP 协议级别工作。
Bootstrapping
使用 http 对象以创建 HTTP 协议。与 Gatling 中的每个协议一样,HTTP 协议可以针对场景进行配置。 这要归功于以下声明:
val httpProtocol = http.baseUrl("https://gatling.io")
val scn = scenario("Scenario") // etc...
setUp(scn.inject(atOnceUsers(1)).protocols(httpProtocol))
HTTP引擎
预热
Java/NIO 引擎启动会在第一个要执行的请求上引入开销。 为了补偿这种影响,Gatling 会自动向 Gatling - Professional Load Testing Tool 执行请求。
// 将预热 URL 更改为 https://www.google.com
http.warmUp("https://www.google.com")
// 预热禁用
http.disableWarmUp
maxConnectionsPerHost
为了模拟真实的 Web 浏览器,Gatling 可以在通过 HTTP/1.1 在同一主机上获取资源时为每个虚拟用户运行多个并发连接。 默认情况下,Gatling 将每个虚拟用户的每个远程主机的并发连接数限制为 6,这对于现代浏览器来说是有意义的。 您可以使用maxConnectionsPerHost(max: Int) 更改此数字。
http.maxConnectionsPerHost(10)
shareConnections
默认行为是每个虚拟用户都有自己的连接池和自己的 SSLContext。 当您想要模拟每个虚拟用户模拟 Web 浏览器的 Internet 流量时,此行为可以满足您的需求。相反,如果您想模拟实际客户端具有长期连接池的服务器到服务器流量,您希望虚拟用户共享一个全局连接池。
http.shareConnections
enableHttp2
可以使用 .enableHttp2 选项启用 HTTP/2 实验性支持。请注意,您需要您的注入器在 Java 9+ 上运行,或者确保在 Gatling 配置中 gatling.http.ahc.useOpenSsl 没有被设置为 false。
http.enableHttp2
启用 HTTP/2 后,Gatling 将尝试通过 ALPN 协议使用 HTTP/2 连接到您的remote。如果您的遥控器支持 HTTP/2,Gatling 将使用该协议,否则回退到 HTTP/1。在您的请求中间没有要添加的特定代码。
下次你用同一个用户使用那个remote时,如果 Gatling 知道你的remote不支持 HTTP/2,它不会再试一次,因此不会使用 ALPN。
HTTP/2 的主要目的之一是支持多路复用。这意味着在单个连接上,您可以发送多个请求,而无需等待响应,并以任何顺序接收这些响应。这意味着,使用 HTTP/2,一旦浏览器和 Gatling 知道远程使用 HTTP/2,它们就不会为给定的虚拟用户打开到同一个远程的额外连接(假设您没有启用 shareConnections)。 Gatling 第一次遇到远程时,如果有多个请求(例如在资源语句中),连接将像在 HTTP/1 模式下一样打开。如果远程使用 HTTP/1,则将在需要时使用这些连接。如果是使用 HTTP/2,会保持一个连接,其他的会达到空闲超时并被关闭。
您可以配置哪些遥控器支持或不支持 HTTP/2。这意味着如果您将远程设置为 true(它支持 HTTP/2),则在模拟中第一次遇到远程时不会创建额外的连接。如果您将远程设置为 false(它不支持 HTTP/2),则不会使用 ALPN,并且会创建额外的连接。
此选项对于模拟已经访问过您的网站并且其浏览器已经缓存了您的网站正在使用 HTTP/2 或 HTTP/1 的事实的用户很有用。
http
.enableHttp2
.http2PriorKnowledge(
Map(
"www.google.com" -> true,
"gatling.io" -> false
)
)
如果你在先验知识中配置了一个remote并将其设置为true,但是ALPN以仅支持HTTP/1的remote结尾,那么请求就会崩溃。仅当您确定远程配置时才使用此选项。