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目录结构

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

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

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

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

录制完成,保存
编辑脚本
脚本存放位置:

打开脚本,删除不需要的
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 {
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")
val scn = scenario("Scenario Name") .exec(http("request_1") .get("/") ) 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
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")
.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")
.exec(http("request_1")
.get("/"))
.pause(5)
setUp(
scn.inject(atOnceUsers(1))
).protocols(httpConf)
}
|
场景执行
启动gatling.bat
看到一个simulation 示例的菜单 :
Choose a simulation number:
[0] computerdatabase.BasicSimulation
当 simulation 执行完成时,控制台会显示一个HTML报表的链接。

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