Gatling教程

https://segmentfault.com/search?q=Gatling%E6%95%99%E7%A8%8B%E7%B3%BB%E5%88%97

https://segmentfault.com/a/1190000008254640

 

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

  • http head配置
  • Scenario 执行细节
  • setUp 组装

 

 

API开发文档

https://gatling.io/docs/current/cheat-sheet/

 

 

类必须继承 Simulation

class BasicSimulation extends Simulation {}

 

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

Gatling HTTP允许您加载测试Web应用程序,Web服务或网站。它支持HTTP和HTTPS几乎所有常见浏览器的现有功能,如缓存,cookie,重定向等。

但是,Gatling 不是一个浏览器:它不会运行Javascript,不会应用CSS样式并触发CSS后台图像下载,也不会对UI事件做出反应等.Gatling在HTTP协议级别工作。

 

为了模仿真实的Web浏览器,Gatling可以在同一主机上获取资源时为每个虚拟用户运行多个并发连接。

默认情况下,Gatling将每个虚拟用户的每个远程主机的并发连接数限制为6,但您可以使用更改此数字。

maxConnectionsPerHost(max: Int)

 

Java / NIO引擎启动会在第一个要执行的请求上引入开销。为了弥补这种影响,Gatling会自动向http://gatling.io发出请求。

要禁用此功能,只需添加.disableWarmUp到HTTP协议配置定义即可。要更改热身网址,只需添加即可.warmUp("newUrl")。

 

val httpConf = http

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

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

.doNotTrackHeader("1") //为所有请求设置DNT标头

.acceptLanguageHeader("en-US,en;q=0.5") //为所有请求设置Accept-Language标头

.acceptEncodingHeader("gzip, deflate") //为所有请求设置Accept-Encoding标头

.userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20100101 Firefox/16.0") //为所有请求设置User-Agent标头

 

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

scenario里的参数:scenario name

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

只能跑一次

val scn = scenario("BaiduSimulation").exec(http("baidu_home").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("/"))

}

 

3.设置并发数并组装

//设置线程数 立马启动的用户数,可以理解为并发数

setUp(scn.inject(atOnceUsers(10)).protocols(httpConf))

 

一般实际运用中远远不止于10个并发,当并发数很高时我们可以选择平滑启动可使用

rampUsers(5000) over (10 seconds) //用10秒时间,启动5000个线程 setUp(scn.inject(rampUsers(500) over(10 seconds)).protocols(httpConf)

 

 

// 1、nothingFor(4 seconds)

// 在指定的时间段(4 seconds)内什么都不干

// 2、atOnceUsers(10)

// 一次模拟的用户数量(10)。

// 3、rampUsers(10) over(5 seconds)

// 在指定的时间段(5 seconds)内逐渐增加用户数到指定的数量(10)。

// 4、constantUsersPerSec(10) during(20 seconds)

// 以固定的速度模拟用户,指定每秒模拟的用户数(10),指定模拟测试时间长度(20 seconds)。

// 5、constantUsersPerSec(10) during(20 seconds) randomized

// 以固定的速度模拟用户,指定每秒模拟的用户数(10),指定模拟时间段(20 seconds)。用户数将在随机被随机模拟(毫秒级别)。

// 6、rampUsersPerSec(10) to (20) during(20 seconds)

// 在指定的时间(20 seconds)内,使每秒模拟的用户从数量1(10)逐渐增加到数量2(20),速度匀速。

// 7、rampUsersPerSec(10) to (20) during(20 seconds) randomized

// 在指定的时间(20 seconds)内,使每秒模拟的用户从数量1(10)增加到数量2(20),速度随机。

// 8、splitUsers(10) into(rampUsers(10) over(10 seconds)) separatedBy(10 seconds)

// 反复执行所定义的模拟步骤(rampUsers(100) over(10 seconds)),每次暂停指定的时间(10 seconds),直到总数达到指定的数量(10)

// 9、splitUsers(100) into(rampUsers(10) over(10 seconds)) separatedBy(atOnceUsers(30))

// 反复依次执行所定义的模拟步骤1(rampUsers(10) over(10 seconds))和模拟步骤2(atOnceUsers(30)),直到总数达到指定的数量(100)左右

// 10、heavisideUsers(100) over(10 seconds)

// 在指定的时间(10 seconds)内使用类似单位阶跃函数的方法逐渐增加模拟并发的用户,直到总数达到指定的数量(100).简单说就是每秒并发用户数递增。

 

返回结果

// Executions Response Time

// total:总请求次数 Min:最短请求响应时间

// OK:成功数 Max:最长请求响应时间

// KO:失败数 Mean:平均请求响应时间

// Req/s:每秒请求次数即吞吐量 Std.Dev:方差偏移,服务器性能越稳定,方差越小

 

// Response Time Distribution:响应时间分布

// Response Time Percentiles over Time: 百分比响应时间分布

// Number of responses per second: 每秒的响应数

// Number of requests per second: 每秒的请求数

 

 

纵轴为活跃用户数,横轴为执行响应测试的时间。

 

这是所有的请求在时间上的一个分布的直方图,其中纵轴为请求个数的 百分比,横轴为具体的时间单位为毫秒

 

 

 

 

整个测试周期内,每个时间段响应时间的占比情况

其中左边的纵轴为响应时间,右边的纵轴(处于1的黄线)显示的是 活跃的用户数,横轴为时间。

其中每个颜色分别代表在每个时间段 内,响应时间所占的百分比,比如在10:42:51时间中最小的相应时间为 409毫秒,

25%的请求都在409ms完成,50%的请求都在409ms内完 成,75%的请求都在409ms内完成,80%的请求都在409ms内完成,

最大的请求响应时间为409ms。在这个时间点上并发的user 为1。

 

每秒请求数

这个图表反应了时间点上的发送的请求数目,左边的纵轴为请求的数 目,右边的纵轴为活跃的用户数。

 

 

每秒响应数

这个图表反应了时间点上的服务器响应数,左边的纵轴为响应的数目,右边的 纵轴为活跃的用户数。

 

 

 

 

 

 

 

 

你可能感兴趣的:(Gatling教程)