性能测试神器Gatling

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