1. 概述

上一篇教程中,我们已经了解了如何使用Gatling对自定义Web应用进行负载测试。本篇文章我们将利用Gatling压力测试工具来衡量这个网站的预发布环境性能。

2. 测试场景

首先,让我们设置主要的使用场景——接近于可能浏览网站的典型用户:

  1. 访问主页
  2. 从主页打开一篇文章
  3. 转到指南/REST
  4. 进入REST分类
  5. 查看完整存档
  6. 从存档中打开一篇文章

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进行了初步的简单测试。


« 上一篇: Java 中使用XPath
» 下一篇: Java 插件Lombok用法