性能工具之 Gatling 快速入门

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

一、介绍

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

它拥有以下特点:

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

二、 下载

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

三、目录结构

安装结构如下:
image.png

  • 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 和运行描述,脚本列表如下:
image.png

挑选 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

打开指定路径报告如下:

image.png

六、总结

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

目录
相关文章
|
2月前
|
编解码 NoSQL 测试技术
性能工具之Jmeter HLS 插件(入门篇)
【2月更文挑战第28天】JMeter Redis 数据集 vs CSV 数据集性能对比
86 1
性能工具之Jmeter HLS 插件(入门篇)
|
20天前
|
Ubuntu 物联网 Linux
性能工具之emqtt_bench快速上手
【4月更文挑战第8天】MQTT 协议是目前最适合物联网场景数据平台搭建的通信协议。基于此,BenchMark 联网场景中的 MQTT 消息采集与传递,以及如何构建一个百万级,甚至千万级 MQTT 消息平台,可以为物联网业务的企业用户提供平台架构设计参考。
33 2
性能工具之emqtt_bench快速上手
|
29天前
|
监控 测试技术 Python
性能工具之 Locust 简单入门
【4月更文挑战第1天】Locust是一个易于使用,分布式,用户负载测试工具。它用于负载测试web站点(或其他系统)并计算一个系统可以处理多少并发用户。
26 1
性能工具之 Locust 简单入门
|
2月前
|
Java Scala Maven
性能工具之 Gatling 开发环境搭建
编写 Gatling 脚本需要搭建脚本开发环境,下面演示使用 IDEA 开发环境搭建脚本开发环境。
26 2
性能工具之 Gatling 开发环境搭建
|
8月前
|
JSON 测试技术 API
深聊性能测试,从入门到放弃之:Locust性能自动化(五)API汇总整理(下)
深聊性能测试,从入门到放弃之:Locust性能自动化(五)API汇总整理(下)
96 0
|
5月前
|
Java Shell 分布式数据库
Pinpoint【部署 01】JDK\HBase\Pinpoint Collector+Web 最新版 2.3.3 安装配置运行验证及脚本文件分享(避坑指南捷径指北)20230228
Pinpoint【部署 01】JDK\HBase\Pinpoint Collector+Web 最新版 2.3.3 安装配置运行验证及脚本文件分享(避坑指南捷径指北)20230228
78 0
|
9月前
|
开发框架 JSON 资源调度
Locust压测框架入门
Locust压测框架入门
98 0
|
测试技术 API
深聊性能测试,从入门到放弃之:Locust性能自动化(五)API汇总整理(上)
深聊性能测试,从入门到放弃之:Locust性能自动化(五)API汇总整理(上)
155 0
深聊性能测试,从入门到放弃之:Locust性能自动化(五)API汇总整理(上)
|
开发框架 JSON 测试技术
性能专题:Locust工具实战之“蝗虫”降世
性能专题:Locust工具实战之“蝗虫”降世
363 0
性能专题:Locust工具实战之“蝗虫”降世
|
测试技术 编译器 Python
性能专题:Locust工具实战之创建性能测试
性能专题:Locust工具实战之创建性能测试
180 0
性能专题:Locust工具实战之创建性能测试