首页 > 解决方案 > JMeter-用户定义的变量不改变其值

问题描述

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

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

在 JSR223 PreProcessor 中,我是这样处理的:

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

我希望这个值在读取的每一行上都会改变,但事实并非如此,它总是采用遇到的第一个值。有谁知道为什么?

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

1,2,名字1:姓氏1

3,2,名字2:姓氏2

并且循环计数= 2,用户= 1,而不是名称的值是:

循环1:名字1:姓氏1

循环2:名字1:姓氏1

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

标签: csvgroovyjmeterjsr223

解决方案


根据用户定义的变量文档:

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

因此,您的__CSVRead() 函数仅在测试启动期间进行评估,并且仅评估一次

解决方案是将函数移动到JSR223 PreProcessor的“参数”部分,您将能够像Parameters在 Groovy 脚本中一样访问函数输出,例如:

String name = Parameters

演示:

在此处输入图像描述

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


推荐阅读