【安全测试】性能测试进阶(Part4-并发测试的方法2)

上篇文章中,我们介绍了并发测试的方法1:用新建来测试并发

今天继续介绍方法2:用并发的方式来测试并发,边建立边拆除。

相关阅读:

【安全测试】性能测试进阶(Part1-基本概念)

【安全测试】性能测试进阶(Part2-新建测试的方法)

【安全测试】性能测试进阶(Part3-并发测试的方法1)

首先我们来回顾一下并发测试的四种方法

并发测试的方法

并发有4种测试方法。主要的差异点就是在并发测试的时候,是否会有连接的拆除。简单总结如下:

  • 方法1:用新建来测试并发——只有在拆除阶段的时候,会有连接的拆除。
  • 方法2:用并发的方式来测试并发,边建立边拆除——在达到期望的并发值后,开始有连接的拆除和新建。
  • 方法3:用并发的方式来测试并发,从一开始就边建立边拆除——在达到期望并发值的过程中,就有连接的拆除和建立。
  • 方法4:用并发的方式来测试并发,只建立不拆除——测试至始至终都不拆除

并发测试方法2:用并发的方式来测试并发,边拆边建立

测试场景(该方法适合于测试最好值)

  • 场景1:验证系统是否可以达到指定数值的的并发值。
  • 场景2:在不知道系统并发的情况下,测试系统最大的并发值。

在这种测试模型下,会不断的拆除会话和拆除会话,但是在每一秒来看,系统依然可以保持到一个设置的并发值。因此,在这种情况下,仪表上显示的,累积的并发值(attempted值)会远远超过我们设置的并发值。此时对DUT来说,会测试到会话表的新建和拆除。

要点

如何配置load?Load的单位选择conections或者simusers<由于新建=并发/时间,所以load里爬坡阶段的斜率,就等于此时的新建。为了避免并发测试受到新建测试的影响,所以此时斜率应该小于系统的新建值(建议在换句话说,要先测新建,再测并发)

测试用例3:验证系统是否可以达到100w的并发

假设系统的新建为3000,需要验证系统的并发是否可以达到100w。Load的设置如下图所示:

特别注意,系统此时的新建值要低于系统的最大新建值(一定要“低于”,如果“等于”,也会在T2这段时间,也就是边建边拆的时候,出现失败,详细的说明可以参考下面的测试结果分析部分)

假设此时系统的新建为 3000 connections/sec

T1 = 100w/3000 = 333.3(写334)

T2 希望的并发可以保持的时间(假设为120s)

本例设置T3 = T1

在aciton中,设置think time = T1,即 334s

特别说明:

设置think time = T1,效果是使得系统在达到希望测试的并发目标的时候(100w),没有连接拆除。达到并发后,在T2这个时间段里,是有连接的拆除和新建的

扩展说明:如果此时,设置think time = T1+T2,这时和本文描述的第一种测试方法,即“用新建的方式来测试并发”,效果是一样的。

测试结果分析:

扩展说明

从方法1和方法2的结果对比中,已经可以看出,不同的性能测试方法,对系统的压力的差异了。这点在性能测试设计中,和外测中需要特别注意。

例如本例的例子。假设系统的新建能力就只有3000,那么在测试的过程中,特别在T2这一阶段就很容易出现大量失败。

测试用例4:测试系统可以达到多大的并发

测试系统可以达到的最大并发,和用例1的差异就是在最大负载的差异。

第一轮测试

一般会测试两轮。第一轮的测试目的是找到一个性能的“预定值”:
先测试新建

根据系统的内存(可以知道一个流表占用的内存大小,也可以知道用于流表的内存块有多大),预估并发的最大值。

创建一个新的load。此时需要使用到stair阶段:

总高度H= H1+H2 =预估系统最大的并发值 x ( 1 + 20%) 其中20%也是为经验值。

H1= H x 80%

H2 = H x 40%

爬坡时间 T1 = H1 / 新建值 (这个新建值需要低于最大新建值,为了不让新建影响并发,建议低于1/10)
每个阶梯(h1)的爬坡斜率和H1部分的爬坡斜率一致.
设置think time = T1的时间

运行这个配置,注意观察出现失败的点(此时可以重点关注http transactions per second)。然后将出现失败前的点,作为系统的最大并发值。

第二轮测试

以第一轮测试得到的最大并发值,进行测试,确认系统能够稳定在该值。此时的测试方法和并发测试用例1的测试方法一致,不再赘述。

发表评论