Gatling是一款开源的基于Scala开发的高性能服务器性能测试工具:下载地址
Gatling有两个主线版本,一个是最新版本1.5.4;一个是Gatling 2,最新版本是2.0.0-M3a。Gatling 2使用了JDK7进行编译,使用的Scala版本是2.10,它对Gatling的API进行了一些重构和重新设计,目前还处于开发阶段。
Gatling的目录结构:
- bin目录下有2个脚本,gatling和recorder, gatling用来运行测试, recorder用来启动录制脚本的UI的(不推荐使用),
- conf目录是关于Gatling自身的一些配置。
- lib目录是Gatling自身依赖的库文件。
- results目录用来存放测试报告的。
- user-files目录是用来存放测试脚本的。
user-files下有basic/advanced目录中提供了几个性能测试脚本的示例。下面是一个我自己写的Gatling 2测试案例:
val httpProtocol = http
.baseURL("http://zhourongyu.me")
.acceptCharsetHeader("utf-8;q=0.7,*;q=0.7")
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4")
.disableFollowRedirect
val header = Map(
"Keep-Alive" -> "115",
"Content-Type" -> "application/json; charset=UTF-8")
在这个类中定义了一个httpConf,定义了请求头的一些基本信息
val scn = scenario("home page")
.exec( http("request_1")
.get("/")
.headers(header))
.pause(4, 5)
.exec( http("search ")
.post("/search")
.param("access_token", "cZtWF314n9cdmY5HVLhspO")
.param("title","gatling")
.check(status.is(200)))
定义了一个测试场景,用户先访问Github首页,检查http返回状态码是否为200,然后暂停一段时间后再执行一个查询操作,查询关键字是test,检查http返回状态码是否为200
setUp(scn.inject(ramp(100 users) over (10 seconds)))
.protocols(httpProtocol)
指定100个用户模拟该测试场景。100个用户以每秒10个递增,持续10秒。
注:
一个Gatling测试脚本就是一个scala的类,该类必须继承Simulation类。
Gatling提供了非常完善的DSL:API查询 || WIKI