目录
了解有关虚拟用户、场景、模拟、会话、馈线、检查、断言、报告的更多信息
特定领域语言 (DSL)
Gatling 提供了一种语言来定义您的负载测试,称为 DSL。
该 DSL 的组件仅仅是对预期效果的定义。 在您自己的代码中调用它们时,它们不会产生所需的效果。 只有当与其他组件链接以便最终将它们传递给 setUp 时,Gatling 引擎才能解释它们并产生所需的效果。
下面的示例不执行 5 个 HTTP 请求。 它创建了 5 个没有任何影响的 HTTP 请求定义。
for (i <- 1 to 5) {
http("Access Github").get("https://github.com")
}
不变性
大多数 Gatling API,例如 DSL 组件和会话,都是不可变的。 这意味着您无法更新现有实例,而只能生成能更改所需项的新实例。
val request1 = http("Access Github").get("https://github.com")
// request1 保持不变
val request2 = request1.header("accept-encoding", "gzip")
虚拟用户
一些负载测试工具,例如 ab 或 wrk 在 url bashing 方面非常有效,但无法处理请求之间的逻辑。Gatling 等高级负载测试工具可以处理虚拟用户,每个用户都有自己的数据,并且可能采用不同的浏览路径。
其他一些工具将这些虚拟用户实现为线程。 Gatling 将它们实现为消息,它可以更好地扩展并且可以轻松处理数千个并发用户。
场景
为了代表用户的行为,测试人员必须定义场景,这些场景将作为脚本编写给 Gatling。
这些场景可能是使用分析工具对正在运行的应用程序进行测量的结果,或者是预期用户对新应用程序的行为。 无论如何,这些场景的创建是负载测试有意义的结果的关键。
一个场景代表一个典型的用户行为。 这是虚拟用户将遵循的工作流程。
例如,一个标准的电子商务应用场景可以是:
1.访问主页
2.选择浏览类别
3.在此类别中进行搜索
4.打开产品描述
5.回去
6.打开另一个产品描述
7.购买产品
8.登录
9.查看
10.支付
11.登出
场景表示为与 DSL(域特定语言)结合使用的脚本。 这允许快速编写场景并轻松维护现有场景。下面是一个简单的场景示例:
scenario("Standard User")
.exec(http("Access Github").get("https://github.com"))
.pause(2, 3)
.exec(http("Search for 'gatling'").get("https://github.com/search?q=gatling"))
.pause(2)
我们很容易猜到,这种情况:
- 被命名为“标准用户”
- 包含 2 个 HTTP 请求
- 包含 2 个停顿
暂停用于模拟用户思考时间。 当一个真正的用户点击一个链接时,页面必须被加载到他们的浏览器中,他们很可能会阅读它,然后决定下一步做什么。
当用户单击按钮或链接时,HTTP 请求实际上会发送到被测应用程序。 每个 HTTP Request 都很容易掌握(不包括页面资源):
1.访问 GitHub 是指向 https://github.com 的 GET 请求
2.搜索“gatling”是指向 https://github.com/search?q=gatling 的 GET 请求
有关更多信息,请查看场景参考部分。
模拟(simulation)
模拟是对负载测试的描述。 它描述了(可能是几个)用户群将如何运行:他们将执行哪个场景以及如何注入新的虚拟用户。
下面是一个模拟定义的例子:
val stdUser = scenario("Standard User") // etc..
val admUser = scenario("Admin User") // etc..
val advUser = scenario("Advanced User") // etc..
setUp(
stdUser.inject(atOnceUsers(2000)),
admUser.inject(nothingFor(60), rampUsers(5).during(400)),
advUser.inject(rampUsers(500).during(200))
)
有关更多信息,请查看模拟设置参考部分。
Session(会话)
每个虚拟用户都由一个 Session 支持。 这些会话是沿着场景工作流程传递的实际消息。 Session 基本上是一个状态占位符,测试人员可以在其中注入或捕获和存储数据。
有关更多信息,请查看会话参考部分。
喂食器(Feeders)
当被测试的应用程序提供了身份验证的可能性时,测试应该考虑到这一点,并使用数据来测试登录、注销、仅允许某些用户执行的操作等。
Gatling 不提供生成此测试数据的工具。
Feeder 是一种方便的 API,供测试人员将来自外部源的数据注入到虚拟用户的会话中。
有关更多信息,请查看Feeders参考部分。
Checks(检查)
Gatling 能够使用 Checks 分析此响应。
检查是一个响应处理器,它捕获其中的某些部分并验证它是否满足某些给定条件。 例如,当发送一个 HTTP 请求时,你可能会期待一个 HTTP 重定向; 通过检查,您可以验证响应的状态实际上是 30x 代码。
检查还可以用于捕获一些元素并将它们存储到 Session 中,以便以后可以重用它们,例如构建下一个请求。
有关更多信息,请查看检查参考部分。
断言
断言用于定义 Gatling 统计数据的验收标准(例如 99% 响应时间),这将使 Gatling 失败并返回整个测试的错误状态代码。
有关更多信息,请查看断言参考部分。
报告
默认情况下,在模拟结束时会自动生成报告。 它们由 HTML 文件组成。 因此,它们是便携式的,可以在任何带有网络浏览器的设备上查看。
有关更多信息,请查看报告参考部分。
持续时间(duration)
在 Gatling 中,持续时间参数的默认单位是秒。