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 场景,请执行以下操作:

  1. 确保 Load Generator 计算机已设置为运行 Gatling 测试,如上所述。
  2. 在 Controller 主工具栏上,单击新建场景按钮
  3. 在“新建场景”对话框中,选择“添加脚本”。从“脚本类型”下拉列表中,选择“Gatling 脚本”
  4. 单击“浏览”,然后选择 Gatling 脚本 (.scala 文件) 或 Gatling 存档 (.jar文件)。
  5. 在“新建场景”对话框中单击“确定”。“设计”选项卡中将打开包含 Gatling 脚本的场景。
  6. 设置要在脚本中运行的 Vuser 数。
  7. 根据需要配置脚本的运行时设置:

    • 指定自定义 JRE 路径。

    • 自定义 JVM 的行为。

    • 如果您正在使用 .jar 脚本或场景包含多个模拟,请指定模拟类。

    • 设置迭代节奏。

    打开运行时设置 UI 并配置相关设置:

    1. Gatling 设置部分中,指定详细信息,例如自定义 JRE 路径或“其他参数”部分中的字符串。例如,-Xms512m

    2. 如果使用扩展名为 .jar 的脚本,或者该场景包含多个模拟,则必须指定模拟类。

      在“类名称”字段中,指定要执行的类的全名。如果该字段保留为空,则脚本运行将失败。如果模拟中有多个 Gatling 场景,则 Controller 将仅运行第一个场景。

    3. 在“节奏”部分中,指定节奏详细信息。有关详细信息,请参阅 Virtual User Generator 帮助中心 (选择相关版本) 中有关迭代和运行逻辑的文档。

  8. 像指定其他 LoadRunner 协议那样指定计划。有关详细信息,请参阅为场景定义计划。将忽略 Gatling 脚本的模拟设置中与计划相关的所有定义 (例如 inject 和 maxDuration)。

  9. 在“运行”选项卡中,单击开始场景按钮以开始运行场景。
  10. 要在场景运行期间添加 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 脚本,则该场景可能会在最后一次迭代完成之前停止。

返回顶部

另请参阅: