1

Gatling基于Scala开发的压测工具,它没有jmeter的UI配置界面,我们要想制定测试计划必须通过编写脚本,但是大家不用担心,首先脚本很简单常用的没几个,另外gatling封装的也很好我们不需要去专门学习Scala语法,当然如果会的话会更好。

脚本的编写

Gatling脚本的编写主要包含下面三个步骤

  • http head配置

  • Scenario 执行细节

  • setUp 组装

我们先拿百度进行第一个GET请求测试脚本的编写,类必须继承 Simulation

1.配置下head,只是简单的请求下百度首页,所以只定义下请求的base url,采用默认的http配置即可

//设置请求的根路径
val httpConf = http.baseURL("https://www.baidu.com")

2.声明Scenario,指定我们的请求动作

val scn = scenario("BaiduSimulation").
    exec(http("baidu_home").get("/"))

scenario里的参数:scenario name
exec()里的参数就是我们的执行动作,http("本次请求的名称").get("本次http get请求的地址")

上面的代码测试运行时只能跑一次,为了测试效果,我们让它持续运行一段时间或者循环一定的次数,可以使用下面两个loop方式

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下

clipboard.png
2.进入到 %Gatling_HOME%/bin并执行gatling.sh

clipboard.png
3.依次输入0,baidu_test, baidu test

clipboard.png
4.打开测试报告,包括位于%Gatling_Home%/results/baidu_test-*/index.html

解读测试报告

clipboard.png
概览800ms下响应的请求次数10,右边的饼状图显示成功请求10个,失败0个。注意在Global页面里的图都是整体的统计(一个测试计划可包含多个http请求),如果需要看某个请求的情况可点击到Details页面,并选取对应的请求。

clipboard.png
上面表格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: 每秒的请求数


青芒
205 声望60 粉丝

java骚年


引用和评论

0 条评论