使用Gatling进行性能测试(四)模拟设置(Simulation Setup)

引言

Gatling的实际行为就是模拟用户操作被测系统,那么如何控制用户访问系统的方式、行为,就是simulation所做的事情。被测系统一般分为两种模式,开放模式和关闭模式,本文将介绍如何根据系统模式设置。也可以在simulation进行一些全局判断,也就是assertion所做的事情。

Open System

open system是指你可以控制用户访问系统的速度,而当前在系统的用户随时间的不同而不同。控制用户达到/访问系统的速度的方法有:

  1. nothingFor(duration): 给定时间内无用户访问。
  2. atOnceUsers(nbUsers): 多用户同一时刻访问系统。
  3. rampUsers(nbUsers) during(duration): 在给定时间内用户访问量线性上升;
  4. constantUsersPerSec(rate) during(duration):在给定时间内,以恒定速率(每秒用户数)增加用户,增加用户的时间间隔恒定;
  5. constantUsersPerSec(rate) during(duration) randomized: 在给定时间内,以恒定速率(每秒用户数)增加用户,增加用户的时间间隔随机;
  6. rampUsersPerSec(rate1) to (rate2) during(duration): 在给定时间内,用户注入速率(每秒用户数)从rate1上升到rate2,增加用户的时间间隔恒定;
  7. 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是指你可以控制正在访问被测系统的用户数量。控制当前用户数的方法有:

  1. constantConcurrentUsers(nbUsers) during(duration): 在给定时间内,系统中的并发用户数恒定;
  2. 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. 确定判断的范围,可以是:
    (1)global:针对所有请求的所有统计信息;
    (2)forAll: 针对每一个请求的所有统计信息;
    (3)details(path):针对一个/一组请求的,path表示请求名或一组请求里的某一个请求名,需指定路径,用“/”分隔。
  2. 选择统计指标,可以是:
    (1)responseTime: 响应时间;
    (2)allRequests: 请求数量;
    (3)failedRequests:失败请求数;
    (4)successfulRequests: 成功请求数;
    (5)requestsPerSec: 每秒请求速率。
  3. 选择度量
    (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:请求成功/失败/其他的数量。
  4. 定义判断条件,方法有:
    (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): 判断选择的指标的值是顺序排列的。

基于以上四个步骤,我们将其连起来,写几个判断:

  1. 所有的请求的最大响应时间小于120s
  2. 每一个请求的失败率小于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

扫描二维码关注公众号,回复: 11252013 查看本文章

猜你喜欢

转载自blog.csdn.net/qunyaoaiziji/article/details/105854680