JMeter中的吞吐量控制器

JMeter中的吞吐量控制器,jmeter,Jmeter,在我的测试计划中,我有24个吞吐量控制器,它们有不同的执行百分比,最小执行百分比为1%。10个不同的吞吐量控制器的执行率为1%。每个吞吐量控制器下都有许多事务控制器。当我运行一个测试1小时时,在某些最小百分比吞吐量控制器下定义的采样器甚至不会执行一次。我已经确保所有24个吞吐量控制器的总数增加到100%。如何确保在所有吞吐量控制器上定义的所有采样器至少执行一次 对于吞吐量最少的控制器,我将其更改为“Total Executions”为1。然而,在这些总执行下定义的采样器总是在测试开始后首先执行,

在我的测试计划中,我有24个吞吐量控制器,它们有不同的执行百分比,最小执行百分比为1%。10个不同的吞吐量控制器的执行率为1%。每个吞吐量控制器下都有许多事务控制器。当我运行一个测试1小时时,在某些最小百分比吞吐量控制器下定义的采样器甚至不会执行一次。我已经确保所有24个吞吐量控制器的总数增加到100%。如何确保在所有吞吐量控制器上定义的所有采样器至少执行一次


对于吞吐量最少的控制器,我将其更改为“Total Executions”为1。然而,在这些总执行下定义的采样器总是在测试开始后首先执行,这不是我所需要的。

决定何时在控制器下运行样本的整个逻辑如下所示(从:

/**
*决定是否在此迭代中返回任何采样器。
*/
私有布尔决定(整数执行,整数迭代){
if(getStyle()==按编号){
返回执行
其中,
执行
作为控制器下的采样器确实运行的次数传递,而
迭代
作为测试总迭代次数传递。如您所见,不依赖于其他控制器,它不会检查各个控制器的总百分比

这就解释了

  • 为什么如果您将“总执行数”指定为1,它将在第一次迭代时执行,而不再执行:在第一次迭代时,执行数=0,您将其设置为1,因此控制器下的采样器将运行。在所有后续迭代中,
    执行数=1
    ,因此不会运行任何内容

  • 当您以一定的百分比配置控制器时,会出现什么情况。例如,配置为以1%运行的控制器至少需要51次迭代才能运行一次:
    (100*0+50)/(50+1)<1
    。如果您的测试运行的迭代次数较少,则以1%运行的吞吐量控制器将永远不会运行

  • 如何确保每个控制器至少运行一次(从上一点派生):确保迭代次数足够

  • 还要确保控制器中的每个用户设置正确,并且符合您的期望:

    如果未选中,则所有用户的计算都是全局的。为吞吐量指定的数量将是执行的总数。如果选中“每个用户”,则执行的总数将是用户数量乘以为吞吐量指定的数量


    决定何时在控制器下运行样本的整个逻辑如下所示(从:

    /**
    *决定是否在此迭代中返回任何采样器。
    */
    私有布尔决定(整数执行,整数迭代){
    if(getStyle()==按编号){
    返回执行
    其中,
    执行
    作为控制器下的采样器确实运行的次数传递,而
    迭代
    作为测试总迭代次数传递。如您所见,不依赖于其他控制器,它不会检查各个控制器的总百分比

    这就解释了

  • 为什么如果您将“总执行数”指定为1,它将在第一次迭代时执行,而不再执行:在第一次迭代时,执行数=0,您将其设置为1,因此控制器下的采样器将运行。在所有后续迭代中,
    执行数=1
    ,因此不会运行任何内容

  • 当您以一定的百分比配置控制器时,会出现什么情况。例如,配置为以1%运行的控制器至少需要51次迭代才能运行一次:
    (100*0+50)/(50+1)<1
    。如果您的测试运行的迭代次数较少,则以1%运行的吞吐量控制器将永远不会运行

  • 如何确保每个控制器至少运行一次(从上一点派生):确保迭代次数足够

  • 还要确保控制器中的每个用户设置正确,并且符合您的期望:

    如果未选中,则所有用户的计算都是全局的。为吞吐量指定的数量将是执行的总数。如果选中“每个用户”,则执行的总数将是用户数量乘以为吞吐量指定的数量


    吞吐量控制器不保证它的孩子将被执行,如果你需要确保每一个采样器将至少执行一次,你需要考虑移动,而是通过

    定义你的吞吐量逻辑。

    更多细节。

    吞吐量控制器不保证它的孩子将被执行,如果你需要确保每一个取样器至少一次执行你需要考虑移动,而是通过

    定义你的吞吐量逻辑。
    有关更多详细信息,请参阅。

    感谢Dmitri的建议。在我的测试计划中,我有24个不同的用户场景,用于100个用户负载,许多场景共享相同的执行百分比。我已经看过switch controller,认为无法为许多用户场景实现。可能,我不知道如何实现它。Thanks Dmitri的建议。在我的测试计划中,我有24个不同的用户场景,用于100个用户负载,许多场景共享相同的执行百分比。我已经看过switch controller,认为它不可能用于许多用户场景。可能,我不知道如何实现它。
    /**
     * Decide whether to return any samplers on this iteration.
     */
    private boolean decide(int executions, int iterations) {
        if (getStyle() == BYNUMBER) {
            return executions < getMaxThroughputAsInt();
        }
        return (100.0 * executions + 50.0) / (iterations + 1) < getPercentThroughputAsFloat();
    }