在JMeter测试计划中如何控制业务比例

在性能测试中,模拟论坛业务的开新帖与回复帖子2:3比例是一个挑战。本文介绍了两种方法:1) 使用多线程组控制线程数,近似实现比例;2) 利用IF控制器和__counter函数动态计算比例,更精确地控制业务执行。虽然随着迭代增加精度下降,但提供了实用的控制思路。

性能测试混合场景中,我们需要组合多个业务操作到场景中来。
比如有一个论坛的业务分布如下:
开新帖与回复帖子的比例为2:3,
那么我们在JMeter测试计划中如何控制其比例呢?

下面我们介绍两种方式:
1.多线程组方式

2.逻辑控制器控制

多线程组方式:

我们知道JMeter是用线程组来模拟虚拟用户的,JMeter还可以支持一个计划中多个线程组。
利用这个特性我们可以把开新帖业务放在一个线程组中,回帖业务放在另外一个线程组中。
为了制造出业务量的比例关系,我们通过控制线程数来达到效果。如下图:


ReplayTopic为回帖线程组,添加90个线程;
SendTopic为开新帖线程组,添加60个线程,刚好是3:2

当然,这只能是近似的,如果这两个事务的响应时间不一样,最终完成的业务数比例也会不一样。
当前线程数是在假定两个业务的响应时间一样的情况下,所以这完全是理想状况。
可以看出,这种方式控制并不完美。

下面我们用第2种方式:

控制器控制

下图是一个IF控制器,IF控制器可以使用表达式来做为条件,这样我们可以获取迭代次数来决定
是回帖还是开帖,比如一共3次迭代,第1次与第3次迭代时开新帖,1,2,3次迭代都会进行回帖



接下来我们就要获取迭代次数,JMeter函数助手提供了一个__counter函数,可以用来获取当前的
迭代次数。

好,我们思路有了,迭代次数也能获取到,那如何保持3:2的比例呢?这就是一个数学问题了。
直接上代码:

### ### JMeter 中吞吐量控制器的配置方法 吞吐量控制器(Throughput Controller)在 JMeter 中用于模拟特定业务场景控制采样器的执行比例或次数。通过该控制器,可以在混合场景中按照比例分配不同业务的执行频率。例如,在一个线程组中有 100 个并发用户,其中 80 个执行 A 业务,20 个执行 B 业务,可以通过吞吐量控制器实现这一比例分配。 #### 配置吞吐量控制器的模式 吞吐量控制器提供两种主要控制模式: 1. **百分比执行(Percent Executions)**:控制器根据设定的百分比决定其作用域内采样器的执行次数。例如,若设置为 20%,则该控制器下的采样器将执行总并发次数的 20%。如果线程组设置为 10 个并发,则该控制器下的采样器执行 2 次。 2. **总执行(Total Executions)**:允许直接指定控制器下采样器的总执行次数。例如,线程组设置为 10 个并发,吞吐量设置为 2,则该控制器下的采样器总共执行 2 次。 此外,吞吐量控制器还支持“Per User”选项。当勾选此选项时,并发数量等于线程组中每个用户的并发数。例如,若线程组设置为 10 个并发用户,吞吐量设置为 3,则每个用户执行 3 次。 #### 示例配置 以下是一个典型的 JMeter 测试计划配置,模拟一个线程组中有 10 个并发用户,其中 8 个执行 A 业务,2 个执行 B 业务: ```xml <TestPlan> <ThreadGroup> <!-- 设置线程数为 10 --> <ThroughputController type="Percent Executions" throughput="80"> <!-- A 业务请求 --> <HTTPSamplerProxy> <ElementProp name="HTTPsampler.Arguments" elementType="Arguments"> <collectionProp name="Arguments.arguments"/> </ElementProp> <stringProp name="HTTPSampler.domain">example.com</stringProp> <stringProp name="HTTPSampler.port">80</stringProp> <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.path">/a-business</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> </HTTPSamplerProxy> </ThroughputController> <ThroughputController type="Percent Executions" throughput="20"> <!-- B 业务请求 --> <HTTPSamplerProxy> <ElementProp name="HTTPsampler.Arguments" elementType="Arguments"> <collectionProp name="Arguments.arguments"/> </ElementProp> <stringProp name="HTTPSampler.domain">example.com</stringProp> <stringProp name="HTTPSampler.port">80</stringProp> <stringProp name="HTTPSampler.protocol">http</stringProp> <stringProp name="HTTPSampler.path">/b-business</stringProp> <stringProp name="HTTPSampler.method">GET</stringProp> </HTTPSamplerProxy> </ThroughputController> </ThreadGroup> </TestPlan> ``` 在上述配置中,线程组设置为 10 个并发用户,第一个吞吐量控制器设置为 80% 执行比例,因此 A 业务由 8 个并发用户执行。第二个吞吐量控制器设置为 20%,因此 B 业务由 2 个并发用户执行。 #### 组合使用不同模式 可以结合使用百分比执行和总执行模式。例如,业务 A 使用“Percent Executions”模式并勾选“Per User”,而业务 B 使用“Total Executions”模式并设置吞吐量为 3。这种配置方式可以灵活地控制不同业务的执行频率,确保测试场景的多样性。 ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值