Gatling:HTTP Protocol

Gatling的HTTP协议详细介绍了如何配置HTTP引擎,包括连接管理、请求生成和响应处理。支持HTTP和HTTPS,模拟真实浏览器的功能,如缓存、cookie和重定向。Bootstrapping涉及http对象的创建,HTTP引擎提供预热、连接池管理等。响应处理部分包含重定向处理和检查机制,允许自定义响应处理和资源获取策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

HTTP Protocol

Bootstrapping

HTTP引擎

预热

maxConnectionsPerHost

shareConnections

enableHttp2

JDK 阻塞解析器(默认)

asyncNameResolution(DNS 解析器)

hostNameAliases(host使用别名)

virtualHost(虚拟主机)

localAddress(本地地址)

perUserKeyManagerFactory

请求生成

baseUrl

baseUrls

disableAutoReferer

disableCaching

disableUrlEncoding

silentUri

header

sign(签名)

basicAuth 和 digestAuth

响应处理

disableFollowRedirect

redirectNamingStrategy

transformResponse

check

inferHtmlResources

nameInferredHtmlResources

Proxy


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 推送。

        启用 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结尾,那么请求就会崩溃。仅当您确定远程配置时才使用此选项。

### 使用 Gatling 进行 Web 应用性能测试 #### 安装与设置 为了使用 Gatling 执行性能测试,需先安装 Java 和 SBT (Scala Build Tool),因为 Gatling 是基于 Scala 的工具。下载并解压 Gatling 后,在命令行中进入 Gatling 文件夹。 #### 编写测试脚本 编写有效的 Gatling 测试脚本对于获取可靠的性能数据至关重要。下面是一个简单的例子,展示了如何创建一个 HTTP 请求来进行基本的 GET 调用: ```scala import io.gatling.core.Predef._ import io.gatling.http.Predef._ val httpProtocol = http .baseUrl("http://example.com") // 设置基础 URL val scn = scenario("BasicSimulation") .exec(http("request_1") .get("/")) setUp( scn.inject(atOnceUsers(10)) // 发送请求的数量 ).protocols(httpProtocol) ``` 此代码定义了一个名为 `BasicSimulation` 的场景,它会向指定的基础URL发送GET请求,并一次性注入十个虚拟用户来模拟并发访问[^2]。 #### 配置负载模式 除了简单的一次性加载外,还可以配置更复杂的负载模型,比如逐步增加用户的数量以观察系统的响应时间变化情况。这有助于识别系统瓶颈以及评估其扩展能力。 ```scala // 渐增用户数目的示例 scn.inject(rampUsersPerSec(1) to (100) during (30 seconds)) ``` 上述代码表示在三十秒内逐渐将每秒钟的新连接数目从1提升到100个。 #### 分析报告生成 完成测试之后,Gatling 自动生成详细的HTML格式报表,其中包含了诸如成功率、平均响应时间和吞吐量等关键指标的信息。这些统计资料可以帮助团队更好地理解和优化应用程序的表现[^4]。 #### 实践建议 - **预热期**:确保每次正式测试前都有足够的预热阶段让服务稳定下来再记录有效样本。 - **多样化工作流**:尽可能多地模仿真实的用户体验路径,包括登录/登出流程、浏览商品列表页至下单确认页面等一系列连续动作。 - **参数化输入**:利用文件或数据库作为外部源提供动态的数据集给仿真客户端提交表单或其他交互式操作时使用。 - **监控资源利用率**:同时部署配套的日志分析平台或者APM(Application Performance Management)解决方案监测服务器端CPU内存磁盘IO网络带宽等方面的消耗状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值