引言
Gatling的实际行为就是模拟用户操作被测系统,那么如何控制用户访问系统的方式、行为,就是simulation所做的事情。被测系统一般分为两种模式,开放模式和关闭模式,本文将介绍如何根据系统模式设置。也可以在simulation进行一些全局判断,也就是assertion所做的事情。
文章目录
- 引言
- Open System
- Closed System
- Assertion
Open System
open system是指你可以控制用户访问系统的速度,而当前在系统的用户随时间的不同而不同。控制用户达到/访问系统的速度的方法有:
- nothingFor(duration): 给定时间内无用户访问。
- atOnceUsers(nbUsers): 多用户同一时刻访问系统。
- rampUsers(nbUsers) during(duration): 在给定时间内用户访问量线性上升;
- constantUsersPerSec(rate) during(duration):在给定时间内,以恒定速率(每秒用户数)增加用户,增加用户的时间间隔恒定;
- constantUsersPerSec(rate) during(duration) randomized: 在给定时间内,以恒定速率(每秒用户数)增加用户,增加用户的时间间隔随机;
- rampUsersPerSec(rate1) to (rate2) during(duration): 在给定时间内,用户注入速率(每秒用户数)从rate1上升到rate2,增加用户的时间间隔恒定;
- rampUsersPerSec(rate1) to(rate2) during(duration) randomized: 在给定时间内,用户注入速率(每秒用户数)从rate1上升到rate2,增加用户的时间间隔随机。
在我们的场景里,可以试一下constantUsersPerSec(rate) during(duration):
setUp(scn.inject(constantUsersPerSec(2)during(10))).protocols(httpProtocol)
即在10s内以2个/s的速率匀速增加用户访问量,运行之后,可以看到报告图如下:
Closed System
closed system是指你可以控制正在访问被测系统的用户数量。控制当前用户数的方法有:
- constantConcurrentUsers(nbUsers) during(duration): 在给定时间内,系统中的并发用户数恒定;
- rampConcurrentUsers(fromNbUsers) to(toNbUsers) during(duration): 在给定时间内,系统内的并发用户数从数字1增加到数字2。
我们可以试一下constantConcurrentUsers(nbUsers) during(duration):
setUp(scn.inject(constantConcurrentUsers(10)during(20))).protocols(httpProtocol)
报告结果如下图:
Assertion
在simulation setup里面还可以对整个测试的行为做一下判断,比如响应时间、请求成功率等,通过assertion来实现。assertion的写法主要分为以下四个步骤:
- 确定判断的范围,可以是:
(1)global:针对所有请求的所有统计信息;
(2)forAll: 针对每一个请求的所有统计信息;
(3)details(path):针对一个/一组请求的,path表示请求名或一组请求里的某一个请求名,需指定路径,用“/”分隔。 - 选择统计指标,可以是:
(1)responseTime: 响应时间;
(2)allRequests: 请求数量;
(3)failedRequests:失败请求数;
(4)successfulRequests: 成功请求数;
(5)requestsPerSec: 每秒请求速率。 - 选择度量
(1)min: 最小值;
(2)max: 最大值;
(3)mean: 平均值;
(4)stdDev: 标准偏差;
(5)percentile1、percentile2、percentile3、percentile4:在第1/2/3/4个百分位上断言,这里的第几个百分位在gatling.config文件里有配置;
(6)percentile(value: Double): 自己指定在某一百分比时断言;
(7)percent:请求成功/失败的百分比;
(8)count:请求成功/失败/其他的数量。 - 定义判断条件,方法有:
(1)lt(threshold): 判断选择的指标的值小于threshold;
(2)lte(threshold): 判断选择的指标的值小于等于threshold;
(3)gt(threshold): 判断选择的指标的值大于等于threshold;
(4)gte(threshold): 判断选择的指标的值大于等于threshold;
(5)between(thresholdMin, thresholdMax): 判断选择的指标值在thresholdMin和thresholdMax之间;
(6)between(thresholdMin, thresholdMax, inclusive = false): 与5一样,但不包含边界
(7)is(value): 判断选择的指标的值等于给定的值;
(8)in(sequence): 判断选择的指标的值是顺序排列的。
基于以上四个步骤,我们将其连起来,写几个判断:
- 所有的请求的最大响应时间小于120s
- 每一个请求的失败率小于5%
setUp(scn.inject(constantConcurrentUsers(10) during (20))).protocols(httpProtocol).assertions(global.responseTime.max.lt(120)).assertions(forAll.failedRequests.percent.lte(5))
以上就是simulation的配置,具体可参考源码:https://github.com/qycai/computerDatabase.git