1. 概述
在上一篇教程中,我们已经了解了如何使用Gatling对自定义Web应用进行负载测试。本篇文章我们将利用Gatling压力测试工具来衡量这个网站的预发布环境性能。
2. 测试场景
首先,让我们设置主要的使用场景——接近于可能浏览网站的典型用户:
- 访问主页
- 从主页打开一篇文章
- 转到指南/REST
- 进入REST分类
- 查看完整存档
- 从存档中打开一篇文章
3. 录制场景
现在,我们将使用Gatling记录器录制场景,如下所示:
$GATLING_HOME/bin/recorder.sh
对于Windows用户:
%GATLING_HOME%\bin\recorder.bat
注意:GATLING_HOME
是你的Gatling安装目录。
Gatling记录器有两种模式:HTTP代理和HAR转换器。我们在上一篇教程中详细讨论了HTTP代理模式,现在让我们看看HAR转换器选项。
3.1. HAR转换器
HAR是HTTP Archive的缩写,它基本上记录了完整的浏览会话信息。我们可以从浏览器获取HAR文件,然后使用Gatling记录器将其转换为模拟测试。
我们将借助Chrome开发者工具创建HAR文件:
- 菜单 -> 更多工具 -> 开发者工具
- 转到“网络”标签页
- 确保勾选“保留日志”
- 在浏览完网站后,右键点击你想要导出的请求
- 然后选择“复制所有为HAR”
- 将它们粘贴到一个文件中,然后从Gatling记录器导入
调整好Gatling记录器后,点击开始。
请注意,输出文件夹默认为GATLING_HOME/user-files-simulations
。
4. 模拟测试
生成的模拟测试文件同样用Scala编写,通常是可以的,但不太易读,所以我们做一些调整以使其更清晰。这是我们的最终模拟测试:
class RestSimulation extends Simulation {
val httpProtocol = http.baseURL("http://staging.baeldung.com")
val scn = scenario("RestSimulation")
.exec(http("home").get("/"))
.pause(23)
.exec(http("article_1").get("/spring-rest-api-metrics"))
.pause(39)
.exec(http("rest_series").get("/rest-with-spring-series"))
.pause(60)
.exec(http("rest_category").get("/category/rest/"))
.pause(26)
.exec(http("archive").get("/full_archive"))
.pause(70)
.exec(http("article_2").get("/spring-data-rest-intro"))
setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol)
}
重要的是,完整的模拟测试文件会大得多;这里为了简化,我们没有包含静态资源。
5. 执行负载测试
现在,我们可以运行模拟测试:
$GATLING_HOME/bin/gatling.sh
对于Windows用户:
%GATLING_HOME%\bin\gatling.bat
Gatling工具会扫描GATLING_HOME/user-files-simulations
,列出所有找到的模拟测试供我们选择。
运行模拟测试后,结果如下:
单个用户:
> request count 304 (OK=304 KO=0)
> min response time 75 (OK=75 KO=-)
> max response time 13745 (OK=13745 KO=-)
> mean response time 1102 (OK=1102 KO=-)
> std deviation 1728 (OK=1728 KO=-)
> response time 50th percentile 660 (OK=660 KO=-)
> response time 75th percentile 1006 (OK=1006 KO=-)
> mean requests/sec 0.53 (OK=0.53 KO=-)
---- Response Time Distribution ------------------------------------
> t < 800 ms 183 ( 60%)
> 800 ms < t < 1200 ms 54 ( 18%)
> t > 1200 ms 67 ( 22%)
> failed 0 ( 0%)
5个并发用户:
> request count 1520 (OK=1520 KO=0)
> min response time 70 (OK=70 KO=-)
> max response time 30289 (OK=30289 KO=-)
> mean response time 1248 (OK=1248 KO=-)
> std deviation 2079 (OK=2079 KO=-)
> response time 50th percentile 504 (OK=504 KO=-)
> response time 75th percentile 1440 (OK=1440 KO=-)
> mean requests/sec 2.411 (OK=2.411 KO=-)
---- Response Time Distribution ------------------------------------
> t < 800 ms 943 ( 62%)
> 800 ms < t < 1200 ms 138 ( 9%)
> t > 1200 ms 439 ( 29%)
> failed 0 ( 0%)
10个并发用户:
> request count 3058 (OK=3018 KO=40)
> min response time 0 (OK=69 KO=0)
> max response time 44916 (OK=44916 KO=30094)
> mean response time 2193 (OK=2063 KO=11996)
> std deviation 4185 (OK=3953 KO=7888)
> response time 50th percentile 506 (OK=494 KO=13670)
> response time 75th percentile 2035 (OK=1976 KO=15835)
> mean requests/sec 3.208 (OK=3.166 KO=0.042)
---- Response Time Distribution ----------------------------------------
> t < 800 ms 1752 ( 57%)
> 800 ms < t < 1200 ms 220 ( 7%)
> t > 1200 ms 1046 ( 34%)
> failed 40 ( 1%)
需要注意的是,在10个并发用户测试时,有些请求失败,因为预发布环境无法处理这种负载。
6. 总结
在这篇简短的文章中,我们探索了Gatling中HAR录制测试场景的方法,并对baeldung.com进行了初步的简单测试。