Gatling基于Scala开发的压测工具,它没有jmeter的UI配置界面,咱们要想制定测试计划必须经过编写脚本,可是你们不用担忧,首先脚本很简单经常使用的没几个,另外gatling封装的也很好咱们不须要去专门学习Scala语法,固然若是会的话会更好。html
Gatling脚本的编写主要包含下面三个步骤并发
http head配置工具
Scenario 执行细节oop
setUp 组装学习
咱们先拿百度进行第一个GET请求测试脚本的编写,类必须继承 Simulation测试
1.配置下head,只是简单的请求下百度首页,因此只定义下请求的base url,采用默认的http配置便可url
//设置请求的根路径 val httpConf = http.baseURL("https://www.baidu.com")
2.声明Scenario,指定咱们的请求动做spa
val scn = scenario("BaiduSimulation"). exec(http("baidu_home").get("/"))
scenario里的参数:scenario name
exec()里的参数就是咱们的执行动做,http("本次请求的名称").get("本次http get请求的地址")线程
上面的代码测试运行时只能跑一次,为了测试效果,咱们让它持续运行一段时间或者循环必定的次数,可使用下面两个loop方式scala
repeat(times,counterName)
times
:循环次数counterName
:计数器名称,可选参数,能够用来当当前循环下标值使用,从0开始
val scn = scenario("BaiduSimulation").repeat(100){ exec(http("baidu_home").get("/")) }
during(duration, counterName, exitASAP)
duration
:时长,默认单位秒,能够加单位milliseconds,表示毫秒counterName
:计数器名称,可选。不多使用exitASAP
:默认为true,简单的能够认为当这个为false的时候循环直接跳出,可在
循环中进行控制是否继续
/* 运行100秒 during 默认单位秒,若是要用微秒 during(100 millisecond) */ val scn = scenario("BaiduSimulation").during(100){ exec(http("baidu_home").get("/")) }
更多循环方案可参考http://gatling.io/docs/2.1.7/general/scenario.html#scenario-loops
3.设置并发数并组装
//设置线程数 setUp(scn.inject(atOnceUsers(10)).protocols(httpConf))
atOnceUsers
:立马启动的用户数,能够理解为并发数
通常实际运用中远远不止于10个并发,当并发数很高时咱们能够选择平滑启动可以使用
rampUsers(5000) over (10 seconds) //用10秒时间,启动5000个线程 setUp(scn.inject(rampUsers(500) over(10 seconds)).protocols(httpConf)
import io.gatling.core.Predef._ import io.gatling.http.Predef._ import scala.concurrent.duration._ class BaiduSimulation extends Simulation { //设置请求的根路径 val httpConf = http.baseURL("https://www.baidu.com") /* 运行100秒 during 默认单位秒,若是要用微秒 during(100 millisecond) */ val scn = scenario("BaiduSimulation").during(100){ exec(http("baidu_home").get("/")) } //设置线程数 // setUp(scn.inject(rampUsers(500) over(10 seconds)).protocols(httpConf)) setUp(scn.inject(atOnceUsers(10)).protocols(httpConf)) }
1.将编辑好的脚本拷贝至%Gatling_HOME%/user-files/simulations下
2.进入到 %Gatling_HOME%/bin并执行gatling.sh
3.依次输入0,baidu_test, baidu test
4.打开测试报告,包括位于%Gatling_Home%/results/baidu_test-*/index.html
概览800ms下响应的请求次数10,右边的饼状图显示成功请求10个,失败0个。注意在Global页面里的图都是总体的统计(一个测试计划可包含多个http请求),若是须要看某个请求的状况可点击到Details页面,并选取对应的请求。
上面表格baidu_home及是咱们定义的http的name。
Executions | Response Time |
---|---|
total:总请求次数 OK:成功数 KO:失败数 Req/s:每秒请求次数即吞吐量 |
Min:最短请求响应时间 Max:最长请求响应时间 Mean:平均请求响应时间 Std.Dev:方差偏移,暂不清楚有什么用 |
截图太占地方了,下面几个图就直接翻译了
Response Time Distribution
:响应时间分布
Response Time Percentiles over Time
: 百分比响应时间分布
Number of responses per second
: 每秒的响应数
Number of requests per second
: 每秒的请求数