Gatling 测试
本主题描述如何在 Controller 场景中使用 Gatling 负载测试脚本。
在本主题中:
Gatling 测试概述
Gatling 是一款开源负载和性能测试工具,它使用 Scala 编程语言来创建测试脚本。Gatling 用于分析和评测 Web 服务器和 Web 应用程序的性能。
LoadRunner Professional 场景支持扩展名为 .scala 和 .jar 的 Gatling 脚本。您可以将一个或多个 Gatling 脚本与场景中的其他 LoadRunner Professional 协议脚本一起运行。
Gatling 脚本具有两个重要功能:
- 每个 Gatling 脚本文件都在脚本代码中包含了所有必需的运行设置。
- Gatling 脚本包含一系列 HTTP 请求和暂停。系统会将每个请求和请求组都报告为一个事务。
LoadRunner Professional 支持您通过 Controller 来控制正在运行的 Vuser 数量和加压配置,而忽略它们在 Gatling 脚本中的配置。您可以与配置其他协议类型的 Vuser 相同的方式来配置 Gatling Vuser。
您可以使用来自 Gatling 测试的数据点,以联机和脱机 (通过 Controller 和 Analysis) 方式查看评测结果。
Gatling 测试的必备设置
在使用 Gatling 脚本创建场景之前,请注意以下准则:
- 可以在 Windows 或 Linux 操作系统上的 Load Generator 上运行 Gatling 脚本。安装了 Docker 的 Windows 和 Linux 也支持 Gatling 脚本。
-
LoadRunner Professional 安装包括 Gatling 的嵌入式版本。无需其他安装或配置。(有关受支持的版本,请参阅支持列表。)
- 必须在 Load Generator 计算机上已安装 32 位或 64 位 JDK 8 (不支持 JDK 11)。
- 对于 Linux Load Generator,请确保已在计算机上安装 unzip 以执行 Gatling .jar 文件。
提示: 建议您使用专用的 Load Generator 计算机来运行 Gatling 测试脚本。如果在 Controller 的 localhost Load Generator 上运行测试,则测试可能会变得不稳定。
数据文件
Gatling 脚本可以引用数据文件,例如包含参数值的数据文件。这些文件可以采用多种格式,例如 csv、ssv、tsv、json 和 .xml。
如果 Gatling 脚本引用了数据文件,请确保:
- 它与 .scala 或 .jar 文件位于同一文件夹 (而不是子文件夹)。
- Gatling 脚本正确引用了该文件。
Controller 将找到这些文件,并将它们发送到 Load Generator 以执行。
Controller 场景中的 Gatling 脚本
在 Load Generator 计算机上,Gatling 脚本作为单独的进程触发。
注: Gatling 测试不支持 Network Virtualization。
要定义 Gatling 场景,请执行以下操作:
- 确保 Load Generator 计算机已设置为运行 Gatling 测试,如上所述。
- 在 Controller 主工具栏上,单击新建场景按钮
。
- 在“新建场景”对话框中,选择“添加脚本”。从“脚本类型”下拉列表中,选择“Gatling 脚本”。
- 单击“浏览”,然后选择 Gatling 脚本 (.scala 文件) 或 Gatling 存档 (.jar文件)。
- 在“新建场景”对话框中单击“确定”。“设计”选项卡中将打开包含 Gatling 脚本的场景。
- 设置要在脚本中运行的 Vuser 数。
-
根据需要配置脚本的运行时设置:
-
指定自定义 JRE 路径。
-
自定义 JVM 的行为。
-
如果您正在使用 .jar 脚本或场景包含多个模拟,请指定模拟类。
-
设置迭代节奏。
打开运行时设置 UI 并配置相关设置:
-
在 Gatling 设置部分中,指定详细信息,例如自定义 JRE 路径或“其他参数”部分中的字符串。例如,
-Xms512m
。 -
如果使用扩展名为 .jar 的脚本,或者该场景包含多个模拟,则必须指定模拟类。
在“类名称”字段中,指定要执行的类的全名。如果该字段保留为空,则脚本运行将失败。如果模拟中有多个 Gatling 场景,则 Controller 将仅运行第一个场景。
-
在“节奏”部分中,指定节奏详细信息。有关详细信息,请参阅 Virtual User Generator 帮助中心 (选择相关版本) 中有关迭代和运行逻辑的文档。
-
-
像指定其他 LoadRunner 协议那样指定计划。有关详细信息,请参阅为场景定义计划。将忽略 Gatling 脚本的模拟设置中与计划相关的所有定义 (例如 inject 和 maxDuration)。
- 在“运行”选项卡中,单击开始场景按钮以开始运行场景。
- 要在场景运行期间添加 Vuser,请单击“运行/停止 Vuser”,然后修改数量。
示例 Gatling 脚本
下面的示例说明了一个场景,其中有两个生成两个事务的请求:
注: 将忽略该脚本的模拟设置中与计划相关的所有定义 (例如 inject 和 maxDuration)。而是使用为场景定义计划中所述的 Controller 计划。
package com.mf.lr import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class LRDemoSimulation extends Simulation { val httpProtocol = http .baseURL("http://www.bing.com") // Here is the root for all relative URLs .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // Here are the common headers .doNotTrackHeader("1") .acceptLanguageHeader("en-US,en;q=0.5") .acceptEncodingHeader("gzip, deflate") .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0") val scn = scenario("Scenario Name") // A scenario is a chain of requests and pauses .exec(http("request_1") .get("/")) .pause(1) .exec(http("request_2") .get("/search?q=Gatling")) .pause(2) setUp(scn.inject(rampUsers(5) over (30 seconds)).protocols(httpProtocol)).maxDuration(2 minutes) }
查看 Gatling 测试结果
在 Gatling 脚本中,您可以将一系列 HTTP 请求分组标记为单个事务,还可以定义事务名称。如果不对请求进行分组,则每个 HTTP 请求都将报告为一个事务。
Gatling 脚本产生的结果显示在以下标准 Controller 图中:
图![]() |
有关详细信息,请参阅...![]() |
---|---|
正在运行的 Vuser | 运行时图概述 |
事务响应时间 | 事务监控器图概述 |
每秒通过的事务总数 | |
每秒通过的事务数 | |
每秒 HTTP 响应数 | Web 资源监控概述 |
每秒点击次数 | |
吞吐量 - 整个负载测试 |
Gatling 脚本的已知问题
以下是 Gatling 脚本的已知问题:
- SLA 事务名称未列出。
- 不支持 Gatling 3 语法,仅支持 2.17 版脚本。为了适应在其他版本中创建的脚本,您可能需要调整几个参数,例如关键字。有关详细信息,请参阅 Gatling 文档《迁移指南》。
- 当运行扩展名为 .scala 的脚本时,运行持续时间将包括编译时间 (大约 20-30 秒)。因此,Vuser 的实际运行时间短于指定的持续时间。
-
如果您在特定持续时间内运行 Gatling 脚本,则该场景可能会在最后一次迭代完成之前停止。
另请参阅: