Gatling-基于Scala,Akka&Netty的性能测试框架

Intro

Gatling是新一代的开源测试框架,基于Scala,Akka和Netty。具有三大特色:

  1. 高性能。
  2. 生成HTML测试报告。
  3. 可以使用脚本录制和对开发者友好的DSL编写测试脚本。

最新版本为:2.1.7, 需要at least JDK7u6。

使用方式

  1. 直接执行:下载官方bundle包,进入bin目录中执行脚本gatling.sh(Unix like) or gatling.bat(windows)。
  2. 使用Extensions(Maven, SBT, Jenkins等)。

文件目录
http://gatling.io/docs/2.1.7/general/bundle_structure.html
├── bin
│ gatling.bat
│ gatling.sh
│ recorder.bat
│ recorder.sh
├── conf
├── lib
│ └── zinc
├── results
├── target
│ └── test-classes
│ └── computerdatabase
└── user-files
├── bodies
├── data
└── simulations
└── computerdatabase

bin/:目录中的gatling.sh or gatling.bat为执行测试脚本;recorder.sh or recorder.bat是一个图形化的脚本录制工具。
user-files/simulations:用户的测试脚本文件存储在该目录中;该目录中已经存在一个Gatling测试脚本样例,我们可以根据该样例开始Gatling测试脚本的编写。
user-files/data:测试需要的数据(i.e. 用户名,密码等)。
results/:生成的HTML测试报告会存放在该目录下。

Reports
对于生成的报告的详细说明,见 http://gatling.io/docs/2.1.7/general/reports.html


直接执行测试脚本

官方Quickstart:http://gatling.io/docs/2.1.7/quickstart.html#quickstart
step-by-step,比较简单,这里不做详细介绍了。


SBT plugin

在实际工作中,一般都是在工程中编写测试。这里主要介绍在sbt工程中使用Gatling的方法。
http://gatling.io/docs/2.1.7/extensions/sbt_plugin.html

Setup

  1. project/plugins.sbt中添加plugin:
    addSbtPlugin("io.gatling" % "gatling-sbt" % "2.1.7")

  2. 在build.sbt中添加依赖:
    libraryDependencies ++= Seq(
    "io.gatling.highcharts" % "gatling-charts-highcharts" % "2.1.7" % "test",
    "io.gatling" % "gatling-test-framework" % "2.1.7" % "test")

  3. build.sbt添加enablePlugins(GatlingPlugin)

Usage

进入sbt

$ cd gatling-template
$ sbt
  • Run all simulations> test
  • Run a single simulation> testOnly computerdatabase.BasicSimulation
  • List all tasks> tasks
  • Start recorder> startRecorder

生成报告目录:target/gatling

‘Test’ vs ‘Integration Tests’(it)

Gatling提供了两套SBT自定义配置:Gatling & GatlingIt,分别在不同的目录中。这种方式的意图是可以针对不同情况的测试,选择不同的测试配置。

  • Gatling(单元测试):当我们的测试是低注入,只是测试方法的时候,就可以在src/test-Gatling配置的默认目录下写测试脚本-它们一般是可以很快完成的单元测试。
    simulations默认目录:src/test/scala, 使用scalaSource in Gatling设置。
    reports默认目录:target/gatling,使用target in Gatling设置。

  • GatlingIt(集成测试):然而,很多测试都是高注入,复杂的集成测试。我们要在src/it-GatlingIt配置的默认目录下写测试脚本-它们一般都是耗费资源和时间的集成测试。
    simulations默认目录:src/it/scala, 使用scalaSource in Gatling设置。
    reports默认目录:target/gatling-it,使用target in Gatling设置。

    Note
    当使用GatlingIt时,sbt命令前要加前缀it:,e.g. > test 变成 > it:test

重载JVM options

可以使用overrideDefaultJavaOptions重载默认JVM options:
javaOptions in Gatling := overrideDefaultJavaOptions("-Xms1024m", "-Xmx2048m")


编写测试脚本

Gatling提供了几个测试脚本的样本,我们介绍下一个简单的脚本。

package computerdatabase

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

class BasicSimulation extends Simulation {

  val httpConf = http
    .baseURL("http://computer-database.gatling.io") // 1
    .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 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0")

  val scn = scenario("BasicSimulation") // 2
    .exec(http("request_1")
    .get("/"))
    .pause(5)

  setUp( // 3
    scn.inject(atOnceUsers(1))
  ).protocols(httpConf)
}

一般gatling脚本主要由三部分组成:

  1. Define http protocol:
    定义http的各项内容,设置测试的网址-baseURL;设置HTTP Header。
  2. new scenario对象:
    创建scenario对象。exec执行一个requestget方法,pause暂停5s。
  3. 设置scenario:
    使用setUp装载多个scenario,并设置同时多少个用户并发访问,以及访问方式(在一个时间点内同时并发还是在一段时间内渐进并发)等。

你可能感兴趣的:(性能测试)