首页 > 解决方案 > 在 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 预处理器的不同问题中的许多建议,我想寻求一些指导来解决这个问题以进一步发展。

标签: csvjmeterperformance-testing

解决方案


  1. 将设置线程组添加到您的测试计划
  2. JSR223 采样器添加到设置线程组
  3. 将以下代码放入“脚本”区域:

    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 文件

  4. 在主线程组中配置CSV 数据集配置以使用步骤 3 中的“new.csv”文件


推荐阅读