在实际性能测试中,我们经常会遇到对多支交易进行混合压测的情况,此时为了在测试环境中模拟生产中交易量分布,我们会根据生产上各交易的交易量占比来配置压测时各交易的用户数,一般情况会采用以下两种方法。
设置多个线程组
将不同的交易放到单独的线程组下,根据生产上各交易量占比按比例设置不同线程组的并发用户数量。
例如有A、B、C三支交易需要进行混合压测,生产上ABC三支交易交易量占比为1:2:3,则在同一个测试计划下设置三个线程组,分别添加一个取样器,三个线程组设置并发用户数为1、2、3(并发用户数按照交易占比进行设置,实际用户数大小参考业务实际情况),如下图所示。
这种方法适合服务器对以上三支交易的请求处理能力相当的情况,即各交易响应时间接近的情况,这样才能保证最后压测结果各交易请求数量占比接近1:2:3。
若服务器对以上三支交易的请求处理能力不同,有的处理快有的处理慢,即响应时间有的长有的短,差别较大时,采用以上方法时,压测的结果就会与我们预期结果有差别。
设置一个线程组,使用Random函数实现
设置一个线程组,将不同的交易均放在该线程组下,使用生成随机数Random函数与If控制器来保证各交易请求数量占比与预期占比一致。
例如有两支交易AB,两支交易生产交易量占比为2:8,首先添加一个线程组,该线程组下添加配置元件-Random Variable,用来生成随机数,然后设置随机变量的名称以及最大和最小值,如下图所示。
之后再在该线程组下添加逻辑控制器-如果(If)控制器1,并填写条件表达式,如刚刚我们所说交易AB交易量占比为2:8,此时我们条件表达式可写为randomnum<=2,然后在该逻辑控制器下添加取样器A,用于发送请求A。
同理再在该线程组下添加逻辑控制器-如果(If)控制器2,填写条件表达式randomnum>2,然后在该逻辑控制器下添加取样器B,用于发送请求B,这样当生成的随机数小于等于2时,执行取样器A,当生成的随机数大于2时,执行取样器B,如下图所示。
由于生成随机数函数能保证随机数小于等于2与大于2的占比为2:8,也就能保证压测结果中取样器A和取样器B的请求数量占比接近2:8。
这种方法不受各交易响应时间长短的影响,无论各交易响应时间接近还是相差较大,都能使最终压测结果中各交易的请求数量占比接近我们之前预期结果。
我们在做混合场景压测时可根据所测场景来选择以上方法之一进行测试。
作者:刘戈