如何迭代/循环使用JMeter设置的“用户定义变量”?

如何迭代/循环使用JMeter设置的“用户定义变量”?,jmeter,load-testing,Jmeter,Load Testing,在-COUNTER-CSV数据集配置时,是否有可能对用户定义的变量集进行迭代或循环 我想为用户定义变量集中包含的每个变量触发一个JDBC请求Select语句。它可以与CSV文件一起使用,但我不知道如何循环使用变量集。这可能吗?我有各种各样的场景,我想循环使用一个用户定义的变量集。你不能只是在用户定义的变量列表中迭代。从安全角度来看,你不应该被允许这样做 你应该坚持使用csv文件 参考资料: 为了能够使用迭代,只需遵循以下简单的命名约定: var_1=someValue var_2=其他值 var

在-COUNTER-CSV数据集配置时,是否有可能对用户定义的变量集进行迭代或循环


我想为用户定义变量集中包含的每个变量触发一个JDBC请求Select语句。它可以与CSV文件一起使用,但我不知道如何循环使用变量集。这可能吗?我有各种各样的场景,我想循环使用一个用户定义的变量集。

你不能只是在用户定义的变量列表中迭代。从安全角度来看,你不应该被允许这样做

你应该坚持使用csv文件

参考资料:


为了能够使用迭代,只需遵循以下简单的命名约定:

var_1=someValue var_2=其他值 var_3=someMoreValue 等 但是,如果要保留原始变量名,可以创建一组额外的JMeter变量,ForEach控制器可以使用以下步骤使用这些变量:

假设您有以下用户定义的变量:

您希望在ForEach控制器中使用它们的值

在脚本中的某个地方添加JSR223测试元素采样器、前置/后置处理器等,并将以下代码放入脚本区域

import org.apache.jmeter.threads.JMeterVariables;

int counter = 1;

JMeterVariables tempVars = new JMeterVariables()

vars.entrySet().each { entry -> 
    def name = entry.getKey()
    if (!name.equals("JMeterThread.last_sample_ok") && !name.equals("JMeterThread.pack") && !name.equals("START.HMS") && !name.equals("START.MS") &&
        !name.equals("START.YMD") && !name.equals("TESTSTART.MS")) {
        tempVars.put("tempVar_" + counter, entry.getValue())
        counter++;
    }
}

vars.putAll(tempVars);
脚本完成后,应该还有3个JMeter变量

一旦拥有它们,您就可以使用配置如下的ForEach控制器:

因此,您将能够使用${current}或在JDBC请求的输出变量名中输入的任何内容


有关在JMeter测试中使用Groovy的更多信息,请参阅本文

我可以知道使用CSV数据集配置的问题吗?我不认为有任何方法可以迭代所有UDV,我不想使用CSV,因为有多个原因:-我担心过多的CSV读取会对测试性能产生负面影响-信息没有集中在测试计划中,相反,我总是必须打开CSV文件来查找一些东西-谢谢你的回答。好的,我需要用CSV实现它。因此,您认为使用UDV比使用CSV数据集更快是正确的,因为必须读取CSV,并且读取的信息必须存储为JMeter变量,其中UDV是直接定义的JMeter变量?我理解您的观点,但是,如果文件位于同一台计算机上,那么增加的延迟不会使性能低于2%。我认为这是一个可接受的损失。在CSV文件中查询/值更容易更新。我同意,这是一个可以接受的损失。为了解决这个问题,我可以从数据库中读取所有CSV文件和数据,如问题中所述,在我的准备线程组中,我还可以在实际测试线程组之前恢复db备份等。或者创建大量UDV数据不是一个好主意吗?您可以选择每种方式。如果您的行数不到10k,则从文件中读取可以正常工作,但有时很难更新。