Java Jmeter:在CSV行中执行计算,并在测试中使用计算值

Java Jmeter:在CSV行中执行计算,并在测试中使用计算值,java,csv,jmeter,performance-testing,Java,Csv,Jmeter,Performance Testing,我一直在尝试创建Jmeter测试,以便使用CSV在更真实的计时上执行。 我有一个CSV,其中包含一行时间。我想基于不同线程上重复的2个连续计时之间的差异来运行测试。 我的CSV如下所示。我想计算时间=Time2-Time1,Time=Time3-Time2等计时。将所有这些计时保存在另一个excel中 我试图运行BeanShell脚本,并遵循了几篇文章,但没有成功 例如:${Test}=${{{uuu BeanShell(${uuu CSVRead(Test.csv,1)}${{uu CSVR

我一直在尝试创建Jmeter测试,以便使用CSV在更真实的计时上执行。 我有一个CSV,其中包含一行时间。我想基于不同线程上重复的2个连续计时之间的差异来运行测试。 我的CSV如下所示。我想计算时间=Time2-Time1,Time=Time3-Time2等计时。将所有这些计时保存在另一个excel中

我试图运行BeanShell脚本,并遵循了几篇文章,但没有成功

例如:${Test}=${{{uuu BeanShell(${uuu CSVRead(Test.csv,1)}${{uu CSVRead(Test.csv,next)}-${{uu CSVRead(Test.csv,1)}

这适用于单个值,但不确定如何为CSV的所有值自动执行此操作,以及如何将其保存在特定行中。 任何帮助都是非常可观的。对于脚本,

,请考虑将代码更改为:

def lines = new File('old.csv').readLines()

lines.eachWithIndex { line, index ->
    new File('new.csv') << line
    if (index < lines.size() - 1) {
        def currentTime = line.split(',')[1] as long
        def nextTime = lines.get(index + 1).split(',')[1] as long
        def delta = nextTime - currentTime
        new File('new.csv') << ',' << delta << System.getProperty('line.separator')
    }

}

new File('new.csv') << ',' << '0'
def lines=新文件('old.csv')。readLines()
lines.eachWithIndex{line,index->

新建文件('new.csv')我所做的是:

  • 创建循环控制器
  • 使用CSVread函数读取两行数据,并使用_Jexl2存储差异
  • 运行循环控制器,直到csv的EOF
  • 在此控制器中创建一个计数器,并将此计数器用于数组${variable${Index}
  • 使用jexl将先前计算的差异存储在另一个变量中,并使用数组
  • 运行beanshell脚本并在csv中抛出此数组。 我知道这是一个很长的解决方案,但它奏效了:)

@Dimitri感谢您的解决方案,但我通过使用Jmeter的内置函数找到了另一种方法。不幸的是,我没有阅读您的解决方案(但非常高兴您的帮助):)