性能工具之 Gatling 快速入门

举报
zuozewei 发表于 2021/11/13 11:44:42 2021/11/13
【摘要】 Gatling 压测工具开箱就能使用,就是脚本编写,对测试人员要有开发基础,同时我们可以做二次封装,这样普通的使用人员只要填写常用请求即可。

介绍

Gatling 是一款基于 Scala 开发的高性能服务器性能测试工具,它主要用于对服务器进行负载等测试,并分析和测量服务器的各种性能指标。

它拥有以下特点:

  • 支持 Akka Actors 和 Async IO,从而能达到很高的性能;
  • 支持实时生成Html动态轻量报表,从而使报表更易阅读和进行数据分析;
  • 支持DSL脚本,从而使测试脚本更易开发与维护;
  • 支持录制并生成测试脚本,从而可以方便的生成测试脚本;
  • 支持导入HAR(Http Archive)并生成测试脚本;
  • 支持 Maven,Eclipse,IntelliJ 等,以便于开发;
  • 支持Jenkins,以便于进行持续集成;
  • 支持插件,从而可以扩展其功能,比如可以扩展对其他协议的支持;
  • 开源免费,开箱即用。

下载

下载地址:https://Gatling.io/open-source/start-testing/

目录结构

安装结构如下:

在这里插入图片描述

  • bin :目录下有2个脚本,Gatling 和 recorder, Gatling 用来运行测试;
  • conf:Gatling自身的一些配置;
  • lib:Gatling自身依赖的库文件;
  • results:存放测试报告
  • target:你启动运行组件后,Gatling 会为你编译好所有的 .scala 脚本,而编译后的 class 文件就会在这里
  • user-files: 脚本存放位置 user-files/simulations ,默认下载好的包会有几个官方的示例测试 Demo

脚本

当运行 gating 脚本的时候,其会扫描 user-files 目录下的所有文件,列出其中所有的 Simulation(一个测试类,里面可以包含任意多个测试场景)。

选择其中一个 Simulation,然后填写 Simulation ID 和运行描述,脚本列表如下:

在这里插入图片描述

挑选 AdvancedSimulationStep01.scala 脚本查看如下:

RANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package computerdatabase.advanced

import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._

class AdvancedSimulationStep01 extends Simulation {

  // Let's split this big scenario into composable business processes, like one would do with PageObject pattern with Selenium
  // object are native Scala singletons
  object Search {
    val search = exec(
      http("Home") // let's give proper names, they are displayed in the reports, and used as keys
        .get("/")
    ).pause(1) // let's set the pauses to 1 sec for demo purpose
      .exec(
        http("Search")
          .get("/computers?f=macbook")
      )
      .pause(1)
      .exec(
        http("Select")
          .get("/computers/6")
      )
      .pause(1)
  }

  object Browse {

    val browse = exec(
      http("Home")
        .get("/")
    ).pause(2)
      .exec(
        http("Page 1")
          .get("/computers?p=1")
      )
      .pause(670.milliseconds)
      .exec(
        http("Page 2")
          .get("/computers?p=2")
      )
      .pause(629.milliseconds)
      .exec(
        http("Page 3")
          .get("/computers?p=3")
      )
      .pause(734.milliseconds)
      .exec(
        http("Page 4")
          .get("/computers?p=4")
      )
      .pause(5)
  }

  object Edit {

    val edit = exec(
      http("Form")
        .get("/computers/new")
    ).pause(1)
      .exec(
        http("Post")
          .post("/computers")
          .formParam("name", "Beautiful Computer")
          .formParam("introduced", "2012-05-30")
          .formParam("discontinued", "")
          .formParam("company", "37")
      )
  }

  val httpProtocol = http
    .baseUrl("http://computer-database.gatling.io")
    .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
    .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")

  // Now, we can write the scenario as a composition
  val scn = scenario("Scenario Name").exec(Search.search, Browse.browse, Edit.edit)

  setUp(scn.inject(atOnceUsers(1)).protocols(httpProtocol))
}

快速执行

进入 bin 目录执行:

./gatling.sh

结果如下:

$ bin % ./gatling.sh  #Gatling 会遍历user-files/simulations,列出所有的Simulation
GATLING_HOME is set to /Users/liwen/Downloads/gatling-charts-highcharts-bundle-3.5.1
Choose a simulation number:
     [0] computerdatabase.BasicSimulation
     [1] computerdatabase.advanced.AdvancedSimulationStep01
     [2] computerdatabase.advanced.AdvancedSimulationStep02
     [3] computerdatabase.advanced.AdvancedSimulationStep03
     [4] computerdatabase.advanced.AdvancedSimulationStep04
     [5] computerdatabase.advanced.AdvancedSimulationStep05
1 # 这个是我选择运行的测试用例ID - 代表选择AdvancedSimulationStep01执行,
Select run description (optional)
runtest # 填入测试用例的描述,可以直接回车跳过
Simulation computerdatabase.advanced.AdvancedSimulationStep01 started...

================================================================================
2021-04-23 21:48:31                                           5s elapsed
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=6      KO=0     )
> Home                                                     (OK=2      KO=0     )
> Home Redirect 1                                          (OK=2      KO=0     )
> Search                                                   (OK=1      KO=0     )
> Select                                                   (OK=1      KO=0     )

---- Scenario Name -------------------------------------------------------------
[--------------------------------------------------------------------------]  0%
          waiting: 0      / active: 1      / done: 0
================================================================================


================================================================================
2021-04-23 21:48:36                                          10s elapsed
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=9      KO=0     )
> Home                                                     (OK=2      KO=0     )
> Home Redirect 1                                          (OK=2      KO=0     )
> Search                                                   (OK=1      KO=0     )
> Select                                                   (OK=1      KO=0     )
> Page 1                                                   (OK=1      KO=0     )
> Page 2                                                   (OK=1      KO=0     )
> Page 3                                                   (OK=1      KO=0     )

---- Scenario Name -------------------------------------------------------------
[--------------------------------------------------------------------------]  0%
          waiting: 0      / active: 1      / done: 0
================================================================================


================================================================================
2021-04-23 21:48:41                                          15s elapsed
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=10     KO=0     )
> Home                                                     (OK=2      KO=0     )
> Home Redirect 1                                          (OK=2      KO=0     )
> Search                                                   (OK=1      KO=0     )
> Select                                                   (OK=1      KO=0     )
> Page 1                                                   (OK=1      KO=0     )
> Page 2                                                   (OK=1      KO=0     )
> Page 3                                                   (OK=1      KO=0     )
> Page 4                                                   (OK=1      KO=0     )

---- Scenario Name -------------------------------------------------------------
[--------------------------------------------------------------------------]  0%
          waiting: 0      / active: 1      / done: 0
================================================================================


================================================================================
2021-04-23 21:48:43                                          16s elapsed
---- Requests ------------------------------------------------------------------
> Global                                                   (OK=13     KO=0     )
> Home                                                     (OK=2      KO=0     )
> Home Redirect 1                                          (OK=2      KO=0     )
> Search                                                   (OK=1      KO=0     )
> Select                                                   (OK=1      KO=0     )
> Page 1                                                   (OK=1      KO=0     )
> Page 2                                                   (OK=1      KO=0     )
> Page 3                                                   (OK=1      KO=0     )
> Page 4                                                   (OK=1      KO=0     )
> Form                                                     (OK=1      KO=0     )
> Post                                                     (OK=1      KO=0     )
> Post Redirect 1                                          (OK=1      KO=0     )

---- Scenario Name -------------------------------------------------------------
[##########################################################################]100%
          waiting: 0      / active: 0      / done: 1
================================================================================

Simulation computerdatabase.advanced.AdvancedSimulationStep01 completed in 16 seconds
Parsing log file(s)...
Parsing log file(s) done
Generating reports...

================================================================================
---- Global Information --------------------------------------------------------
> request count                                         13 (OK=13     KO=0     )
> min response time                                    265 (OK=265    KO=-     )
> max response time                                    547 (OK=547    KO=-     )
> mean response time                                   289 (OK=289    KO=-     )
> std deviation                                         75 (OK=75     KO=-     )
> response time 50th percentile                        267 (OK=267    KO=-     )
> response time 75th percentile                        268 (OK=268    KO=-     )
> response time 95th percentile                        380 (OK=380    KO=-     )
> response time 99th percentile                        514 (OK=514    KO=-     )
> mean requests/sec                                  0.765 (OK=0.765  KO=-     )
---- Response Time Distribution ------------------------------------------------
> t < 800 ms                                            13 (100%)
> 800 ms < t < 1200 ms                                   0 (  0%)
> t > 1200 ms                                            0 (  0%)
> failed                                                 0 (  0%)
================================================================================
# result目录找到报告的html文件
Reports generated in 0s.
Please open the following file: /Users/liwen/Downloads/gatling-charts-highcharts-bundle-3.5.1/results/advancedsimulationstep01/index.html

打开指定路径报告如下:

在这里插入图片描述

总结

Gatling 压测工具开箱就能使用,就是脚本编写,对测试人员要有开发基础,同时我们可以做二次封装,这样普通的使用人员只要填写常用请求即可。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。