首页 > 解决方案 > Jmeter:在 CSV 行中执行计算并在测试中使用计算值

问题描述

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

在此处输入图像描述

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

例如:${Test}=${__BeanShell(${__CSVRead(Test.csv,1)}${__CSVRead(Test.csv,next)}-${__CSVRead(Test.csv,1)})}

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

标签: javacsvjmeterperformance-testing

解决方案


从 JMeter 3.1 开始,您应该使用 JSR223 测试元素和 Groovy 语言编写脚本,因此请考虑将您的代码更改为:

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'

脚本的好地方是JSR223 SamplersetUp Thread Group的某个地方,如果您不希望采样器出现在测试结果SampleResult.setIgnore()中,请在脚本的开头添加


推荐阅读