csv - 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
其他值已正确处理,因此转到下一行。
解决方案
根据用户定义的变量文档:
请注意,测试计划中的所有 UDV 元素(无论它们位于何处)都在开始时进行处理。
因此,您的__CSVRead() 函数仅在测试启动期间进行评估,并且仅评估一次
解决方案是将函数移动到JSR223 PreProcessor的“参数”部分,您将能够像Parameters
在 Groovy 脚本中一样访问函数输出,例如:
String name = Parameters
演示:
这样每次调用 JSR223 PreProcessor 时都会执行 __CSVRead() 函数。查看Apache Groovy - Why and How You Should Use It一文,了解有关 JMeter 中 Groovy 脚本的更多信息
推荐阅读
- css - 背景图片不显示
- php - 获取错误外键违规
- html - 为什么图像和 h3 标签在不同尺寸的屏幕上没有按顺序出现?
- node.js - 运行`create-react-app`和`npm runeject`后,我无法运行`npm start`
- swift - 为什么 type 属性在 copyOnWrite 期间没有得到更新
- python - Python - 使用定向链接连接节点
- angular - 带有 Angular 的 HMR 作为带有 platform-webworker 的 web worker 运行
- angular - ng-serve Typescrypt 使用符号链接模块编译问题
- java - 如何将 SpringBoot 项目连接到 SonarQube
- android - 二维码 - 如何?