csv - 在 Jmeter 中,我们如何使用 JSR223 预处理器解析 CSV 并过滤特定列值以将其作为变量传递给采样器
问题描述
我是 JMeter 的新手,并尽我所能在 JMeter 中学习各种东西,特别是关于 CSV 数据处理,因为我正在工作的应用程序需要大量参数化数据,我只是无法根据要求创建 100 个 CSV 文件,而是使用单个 CSV 并根据特定条件过滤值。
但是,我发现为这个特定的操作编写代码非常困难。
姓名|身份|日期
"001, A"|"3409ADD9"|05-01-2020
"002, B"|"BA47D76A"|05-01-2020
"003, C"|"2BC92A2D"|05-02-2020
“004,D”|“AB9AEEBE”|2020 年 5 月 23 日
“005,E”|“09FF417D”|2020 年 5 月 29 日
注意:这里我使用 | 解析为我的数据将包含作为名称的一部分,如图所示。
如您所见,数据按日期值分组。我想使用这个 CSV 文件来传递基于 currentDate 的 Identity 和 Name 值。
例如,当前日期为 2020 年 5 月 1 日,我只想传递日期为 2020 年 5 月 1 日的那些记录,并将其作为变量传递给循环中的采样器。一旦我们到达文件的末尾(我的意思是没有关联日期 May-01-2020 的值,我想再次开始循环)并从第一次重复直到我在运行时控制器中提到的时间。
我经历了不同的问题并试图找到解决方案,因为我无法在 Groovy 中为自己编写一个解决方案,因此寻求帮助。
根据关于使用带有 Groovy 而不是 bean shell 的 JSR223 预处理器的不同问题中的许多建议,我想寻求一些指导来解决这个问题以进一步发展。
解决方案
- 将设置线程组添加到您的测试计划
- 将JSR223 采样器添加到设置线程组
将以下代码放入“脚本”区域:
SampleResult.setIgnore() def original = new File('/path/to/original.csv').readLines() def current = original.findAll() { line -> line.contains(new Date().format('MM-dd-yyyy')) } def newFile = new File('/path/to/new.csv') newFile.withWriter { out -> out.println(original.get(0)) current.each { line -> out.println(line) } }
上面的代码将过滤原始 CSV 文件并仅将那些包含当前日期的行写入新的 CSV 文件
在主线程组中配置CSV 数据集配置以使用步骤 3 中的“new.csv”文件
推荐阅读
- android - 工具栏在不同设备 Android Studio 中的工作方式不同
- java - 使用eclipse photon和maven的java 10执行环境
- java - 尝试使用 Apache poi 制作简单的 PDF 文档
- rxjs - 在 rxjs 中结合 expand 和其他操作符
- python - 寻找一种更好的方法来为字典、全局整数生成键?
- graphics - Blender 如何解释 Collada 文件 (.dae) 以进行装配?
- c# - 如何从剃刀页面处理程序呈现视图?
- html - favicon.ico 在 IE 11 上不可见
- c# - 创建目录并允许写访问 C# .NET Core
- c# - Wcf 将整数值设置为默认值