性能测试做过的同学都会遇到一些特殊的场景压测需求,此时就会用到 jmeter 的特殊的组件,如定时器,逻辑控制器,或是用新的方法,下面介绍工作中用到的 3 个用到频率很高的性能需求。
更好的阅读体验,也可以在如下网页学习,大家可以关注<大话性能>,会持续不断分享工作中的测试技能干货。
http://dwz.cn/rRlXWenL
测试需求:待测系统满足一定 TPS 要求。
如何利用 JMeter 模拟稳定的 TPS 压力呢?
具体方法为:
右键取样器,选择 “定时器”->“Constant Throughput Timer”,如下图
其中,“Target throughput” 是设置的固定 TPS 值,单位是:个/分钟,若是你的被测系统的 tps 处理能力远高于固定的 tps 值,该组件可以动态的控制住发送请求的速度,来达到控制 tps 的目的。
测试需求: 秒杀场景,瞬间并发。
通常来说,JMeter 的线程数即为并发的压力数,实际上 JMeter 在运行时,每个线程是独立的,虽然有 100 个线程,但这些线程并不是同时向服务器发送请求,JMeter 要模拟 100 个用户在同一时间点向服务器发送请求,才是真正的并发压力。
具体方法为:
右键取样器,选择 “定时器”->“Synchronizing Timer”,如下图:
Synchronizing Timer 中设置的压力数小于等于线程组中的并发数;
以前最偷懒的方法是建立多个线程组,然后利用不同线程组的线程数目比例来控制吞吐量比例,但是该方法有个问题,真实的发送的请求数目取决于请求的处理速度,而不是配置的线程数,所以控制的比例不会很准确。
后来发现一个利用 if 控制器并结合公倍数原则方法来控制吞吐量比例。
例,假设总共 30 并发的请求,持续 10min,有 1/3 请求的访问了 a 路径,另外的 2/3 的请求访问了 b 路径;而访问 a 路径后有 1/5 进行了访问 c 路径,4/5 进行了访问 d 路径。
此时就需要使用 If 控制器,利用公倍数的原则,上面的 if 表达式分别为:
a: ${counter(false,)}%15 <=5 && ${counter(false,)}%15 >0
b: ${counter(false,)}%15 >5 || ${counter(false,)}%15 ==0
c: ${__counter(false,)}%15==1
d: ${counter(false,)}%15>1 && ${counter(false,)}%15<=5
这样结合 jmeter 自带的 counter 函数就可以比较准确的控制请求数目来达到控制吞吐量的比例,比通过添加多个不同线程组利用线程数比例去控制来的准确。
** http mirror server 快速调试 **
有时候我们需要查看发送的请求内容是否正确,我们利用利用在工作台中添加一个 httpmirror server 的组件,快速的验证,该组件会自动回复你发送的内容,十分方便调试,提升工作效率。
大家可持续关注大话性能公众号,不断学习测试实战技能和高薪岗位内推。