高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

Gatling 入门

目录
  1. 1. Gatling简介
  2. 2. Gatling下载
  3. 3. scala环境准备
  4. 4. Gatling目录结构
    1. 4.1. Recorder.bat 和 gatling.bat
  5. 5. 录制脚本
    1. 5.1. 启动Recorder
    2. 5.2. 浏览器设置
    3. 5.3. 开始录制脚本
    4. 5.4. 编辑脚本
    5. 5.5. 官网demo
  6. 6. 场景执行

Gatling作为一款开源的性能测试工具,慢慢走入人们视野,很多公司使用Jenkins+gatling做自动化性能测试,
它拥有强大的API支持和完善的HTML报表,使用起来比较容易。


Gatling简介

Gatling的Scala基础封装是基于Akka编程的,它是非阻塞异步编程模型,可以高效执行并有极高的容错率。

专用web测试。
像LR那样录制脚本,不用从零开始。
脚本使用scala语言,易懂,易修改,控制灵活。
基于JVM,随拷随用。(对比LoadRunner的客户端安装以及JMeter需要XWindow组件,这个方便很多),操作接近apache的ab。
原生支持NIO,并发性能很好,即使性能较差的电脑也能发起很大的负载压力。
基于HTML的报表,简单易读。

更详细的介绍,与jmeter的比较


Gatling下载

下载地址
目前最新的是2.2.2版本(jdk1.8),老版本请下载:
jdk6对应1.5版本,jdk7以上对应2.0版本。
我本地下载的1.5.4版本


scala环境准备

gatling脚本使用的scala,需要学习的api不多,如果对java比较了解的话,学习起来很简单。
scala环境准备


Gatling目录结构

Alt text

Recorder.bat 和 gatling.bat

Recorder.bat和gatling.bat一个用来录脚本,一个用来执行脚本。它们也提供了linux版本.sh。
Recorder是个桥接在浏览器和web服务器之间的代理,如果浏览器通过它访问网络时,它能记下浏览器的访问轨迹。
Reocrder提供了UI界面,让配置和执行变得简单。 同时,Recoder也是一个scala代码的生成器,它能把访问轨迹记录成scala代码。

Gatling.bat是一个包含了编译,执行scala代码的脚本,它提供了一些参数供使用者指定执行的细节(比如JVM_OPTS),
运行它可以选择需要执行的scala代码,创建非阻塞的线程模型执行压力测试。


录制脚本

使用Recorder.bat录制脚本,过LR或者badboy的不会陌生

启动Recorder

Alt text

启动recorder,HTTP和HTTPS默认是8000和8001端口,查看下本地这两个端口有没有被占用,占用的话可以换成别的端口。
当点击最下面的start后,8000和8001端口开始监听了,抓取在8000和8001端口交互的包。
Alt text

浏览器设置

配置浏览器代理,让它走我们设置的端口 (最好找个专用的浏览器,不用每次改来改去),我这里使用的Firefox
Alt text

开始录制脚本

点击start,打开浏览器,开始录制,recorder上面会有各请求的记录
Alt text

录制完成,保存

编辑脚本

脚本存放位置:
Alt text

打开脚本,删除不需要的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import com.excilys.ebi.gatling.core.Predef._
import com.excilys.ebi.gatling.http.Predef._
import com.excilys.ebi.gatling.jdbc.Predef._
import com.excilys.ebi.gatling.http.Headers.Names._
import akka.util.duration._
import bootstrap._
import assertions._

class RecordedSimulation extends Simulation {

//httpConf做访问协议
val httpConf = httpConfig
.baseURL("http://192.168.43.203:99")
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
.connection("keep-alive")
.userAgentHeader("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0")



//scn描述访问地址和暂停时间
val scn = scenario("Scenario Name")
.exec(http("request_1")
.get("/")

)
//scn.users描述并发个数,执行访问
setUp(scn.users(1).protocolConfig(httpConf))
}

官网demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package computerdatabase // 1 包名

import io.gatling.core.Predef._ // 2必须导入的

import io.gatling.http.Predef._

import scala.concurrent.duration._

class BasicSimulation extends Simulation { // 3 类声明,必须继承Simulation

val httpConf = http // 4 所有Http请求普遍配置

.baseURL("http://computer-database.gatling.io") // 5 base URL

.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") // 6 请求头

.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") // 7 定义场景

.exec(http("request_1") // 8 http请求名称 request_1,这个名称最后会显示在报告中

.get("/")) // 9 get请求方法

.pause(5) // 10 暂停/思考时间 5s

setUp( // 11 建立场景

scn.inject(atOnceUsers(1)) // 12 声明注入一个用户

).protocols(httpConf) // 13 之前声明的Http请求配置

}

场景执行

启动gatling.bat
看到一个simulation 示例的菜单 :
Choose a simulation number:
[0] computerdatabase.BasicSimulation
当 simulation 执行完成时,控制台会显示一个HTML报表的链接。
Alt text

到reslut目录下面,查看HTML报错
Alt text