【5】性能测试平台从设计到实现-如何选择适合自己的压力模型原创
昨天的文章评论收到的小伙伴,想听压力模型的反馈,那么今天我们就来聊下压力模型~
在我们实际的性能测试任务场景构建中,最常面对的是两类场景,并发数和QPS。小编在早期使用JMeter压测时,这部分的功能是通过原生线程组/扩展线程组和定时器【Constant Throughput Timer】的方式来实现的,但因JMeter的架构设计【基于多线程的并发模型】原因,导致并发性能存在较大的瓶颈。所以,在最近几年,都是在使用Gatling引擎为主引擎,来构建的性能测试平台。
Gatling引擎通过Injection来提供压力模型设置,针对并发数【即封闭模型】和针对QPS【即开放模型】,并且这两个工作负载模型是互斥的,并不能在同一Injection中使用。这点在实际应用中要特别注意,选择压力模型的前提是要明确知道你所要压测的系统到底是属于封闭系统【最经典的是有线路接入限制的客服呼叫中心】还是开放系统【大部分系统都属于这类】。
然后我们来看在封闭系统和开放系统中 ,引擎给我们提供了哪些能力可供选择
1)开放模型
setUp(
scn.inject(
nothingFor(4), // 1
atOnceUsers(10), // 2
rampUsers(10).during(5), // 3
constantUsersPerSec(20).during(15), // 4
constantUsersPerSec(20).during(15).randomized, // 5
rampUsersPerSec(10).to(20).during(10.minutes), // 6
rampUsersPerSec(10).to(20).during(10.minutes).randomized, // 7
stressPeakUsers(1000).during(20) // 8
).protocols(httpProtocol)
)
2)封闭模型
setUp(
scn.inject(
constantConcurrentUsers(10).during(10), // 1
rampConcurrentUsers(10).to(20).during(10) // 2
)
)
每种加压方式,大家可以在底部的参考资料中,看到详细的介绍。在这里不做赘述,那么我们加压的时候更多的基于基础压力的一种组合来尽可能的模拟用户真实流量,但这种参数化的设置,并不直观,尤其是复杂的压力设置中,所以我们在性能测试平台中做了一个功能就是基于用户的设置,来绘制理想的流量模型,方便用户直观地查看设置是否符合预期,更便捷的完成压测,无图无真相,请看图:
自从这个功能上线,发现大家构造复杂流量模型的热情持续高涨,于是我们将这部分能力抽离出来,做成可复用的压力模型管理模块,方便大家复用和分享自己构造的压力模型,给自己和团队小伙伴使用~先卖个关子,这部分的功能,我们放到后面来讲~
参考资料:https://gatling.io/docs/gatling/reference/current/core/injection/