您的位置:首页 > 其它

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

2015-11-25 18:51 696 查看

Intro

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

高性能。

生成HTML测试报告。

可以使用脚本录制和对开发者友好的DSL编写测试脚本。

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

使用方式

直接执行:下载官方bundle包,进入
bin
目录中执行脚本
gatling.sh
(Unix like) or
gatling.bat
(windows)。

使用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

project/plugins.sbt
中添加plugin:

addSbtPlugin("io.gatling" % "gatling-sbt" % "2.1.7")


在build.sbt中添加依赖:

libraryDependencies ++= Seq(

"io.gatling.highcharts" % "gatling-charts-highcharts" % "2.1.7" % "test",

"io.gatling" % "gatling-test-framework" % "2.1.7" % "test")


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脚本主要由三部分组成:

Define http protocol:

定义http的各项内容,设置测试的网址-baseURL;设置HTTP Header。

new scenario对象:

创建scenario对象。
exec
执行一个
request
get
方法,
pause
暂停5s。

设置scenario:

使用
setUp
装载多个scenario,并设置同时多少个用户并发访问,以及访问方式(在一个时间点内同时并发还是在一段时间内渐进并发)等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: