JMeter用户定义的变量不会更改其值

时间:2018-12-07 14:39:42

标签: csv groovy jmeter jsr223

我有一个测试计划,其中包含一个线程组,其中一个HttpRequest采样器,JRS223PreProcessor和一个csv数据集配置。我需要在运行时从csv中读取第2列的当前值,并在我的JSR223 PreProcessor中使用它。为此,我在测试计划上定义了一个变量:

名称$ {__ CSVRead(C:/Users/marial/Desktop/csvs/csv_hotelCodeReq.txt,2)

在JSR223预处理器中,我这样处理:

String name= new String(vars.get("name"));

我希望此值在读取的每一行都发生变化,但是没有,它总是采用遇到的第一个值。有人知道为什么吗?

更具体地说,如果我有csv文件:

1,2,firstName1:lastName1

3,2,firstName2:lastName2

,循环计数= 2,users = 1比name的值大:

loop1:firstName1:lastName1

loop2:firstName1:lastName1

其他值已正确处理,因此转到下一行。

1 个答案:

答案 0 :(得分:0)

根据User Defined Variables文档:

  

请注意,测试计划中的所有UDV元素-无论它们在何处-都会在开始时进行处理。

因此,您的__CSVRead() function仅在测试启动期间被评估,并且仅被评估一次

解决方案是将函数移至JSR223 PreProcessor的“参数”部分,您将能够在Groovy脚本中以Parameters的形式访问函数输出:

String name = Parameters

演示:

enter image description here

这样,每次调用JSR223 PreProcessor时都将执行__CSVRead()函数。查阅Apache Groovy - Why and How You Should Use It文章,以了解有关JMeter中Groovy脚本的更多信息