Gatling 负载测试和 运行 场景
Gatling load testing and running scenarios
我希望创建三个场景:
- 第一个场景会运行一堆GET请求30s
- 第二个和第三个场景将运行并行并等待第一个场景完成。
我希望第一个场景中的请求从报告中排除。
我已经大致了解了我想要实现的目标,但没有看到预期的结果:
val myFeeder = csv("somefile.csv")
val scenario1 = scenario("Get stuff")
.feed(myFeeder)
.during(30 seconds) {
exec(
http("getStuff(${csv_colName})").get("/someEndpoint/${csv_colName}")
)
}
val scenario2 = ...
val scenario3 = ...
setUp(
scenario1.inject(
constantUsersPerSec(20) during (30 seconds)
).protocols(firstProtocaol),
scenario2.inject(
nothingFor(30 seconds), //wait 30s
...
).protocols(secondProt)
scenario3.inject(
nothingFor(30 seconds), //wait 30s
...
).protocols(thirdProt)
)
在整个测试过程中,我看到第一个场景是 运行。过了30岁还不停?
对于第一个场景,我想循环浏览 CSV 文件并对每一行执行一个请求。大概每秒 5-10 个请求,我该如何实现?
我也希望它在 30 秒后停止,然后 运行 其他两个并行。因此,上面最后两个场景中的nothingFor
。
另外,如何从报告中排除,是否可能?
由于您的注入配置文件和 "Get Stuff" 场景之间的设置组合,您可能无法获得预期结果。
constantUsersPerSec(20) during (30 seconds)
将在场景 "Get Stuff" 中每秒启动 20 个用户,持续 30 秒。所以即使在第 30 秒,也会有 20 个用户开始 "Get Stuff"。注入配置文件只控制用户何时开始,而不是他们活跃的时间。因此,当用户执行 "Get Stuff" 场景时,由于 .during 循环,他们会在 30 秒内重复发出 'get' 请求。
因此,至少,您将让用户执行 "Get Stuff" 60 秒 - 以及其他场景的执行。根据您调用 getStuff 的执行时间,它可能会更长。
为避免这种情况,您可以计算出您希望 "Get Stuff" 场景持续多长时间 运行,在注入配置文件中设置它并且在场景中没有循环。或者,您可以将 'nothingFor' 值设置为 >60s。
要从报告中排除 Get Stuff 调用,您可以向协议定义添加静默(假设它不与您的其他请求共享)。更多详情请见 https://gatling.io/docs/3.2/http/http_protocol/#silencing
我希望创建三个场景:
- 第一个场景会运行一堆GET请求30s
- 第二个和第三个场景将运行并行并等待第一个场景完成。
我希望第一个场景中的请求从报告中排除。
我已经大致了解了我想要实现的目标,但没有看到预期的结果:
val myFeeder = csv("somefile.csv")
val scenario1 = scenario("Get stuff")
.feed(myFeeder)
.during(30 seconds) {
exec(
http("getStuff(${csv_colName})").get("/someEndpoint/${csv_colName}")
)
}
val scenario2 = ...
val scenario3 = ...
setUp(
scenario1.inject(
constantUsersPerSec(20) during (30 seconds)
).protocols(firstProtocaol),
scenario2.inject(
nothingFor(30 seconds), //wait 30s
...
).protocols(secondProt)
scenario3.inject(
nothingFor(30 seconds), //wait 30s
...
).protocols(thirdProt)
)
在整个测试过程中,我看到第一个场景是 运行。过了30岁还不停?
对于第一个场景,我想循环浏览 CSV 文件并对每一行执行一个请求。大概每秒 5-10 个请求,我该如何实现?
我也希望它在 30 秒后停止,然后 运行 其他两个并行。因此,上面最后两个场景中的nothingFor
。
另外,如何从报告中排除,是否可能?
由于您的注入配置文件和 "Get Stuff" 场景之间的设置组合,您可能无法获得预期结果。
constantUsersPerSec(20) during (30 seconds)
将在场景 "Get Stuff" 中每秒启动 20 个用户,持续 30 秒。所以即使在第 30 秒,也会有 20 个用户开始 "Get Stuff"。注入配置文件只控制用户何时开始,而不是他们活跃的时间。因此,当用户执行 "Get Stuff" 场景时,由于 .during 循环,他们会在 30 秒内重复发出 'get' 请求。
因此,至少,您将让用户执行 "Get Stuff" 60 秒 - 以及其他场景的执行。根据您调用 getStuff 的执行时间,它可能会更长。
为避免这种情况,您可以计算出您希望 "Get Stuff" 场景持续多长时间 运行,在注入配置文件中设置它并且在场景中没有循环。或者,您可以将 'nothingFor' 值设置为 >60s。
要从报告中排除 Get Stuff 调用,您可以向协议定义添加静默(假设它不与您的其他请求共享)。更多详情请见 https://gatling.io/docs/3.2/http/http_protocol/#silencing