Jmeter:在 CSV 行中执行计算并在测试中使用计算值
Jmeter : Perform calculation in CSV rows and use calculated values in test
我一直在尝试创建 Jmeter 测试以使用 CSV 在更实际的时间上执行。
我有一个 CSV,其中包含一行计时。我想 运行 测试基于在不同线程上以重复方式重复的 2 个连续计时之间的差异。
我的 CSV 如下所示。我想计算像 Time = Time2-Time1, Time= Time3-Time2 等时间。将所有这些时间保存在另一个 excel.
我正在尝试 运行 BeanShell 脚本并关注了几篇文章,但没有成功。
例如:${Test}=${__BeanShell(${__CSVRead(Test.csv,1)}${__CSVRead(Test.csv,next)}-${__CSVRead(Test.csv,1)})}
这适用于单个值,但不确定如何为 CSV 的所有值自动执行此操作以及如何将其保存在特定行中。
任何帮助将非常非常感谢。
Since JMeter 3.1 you should be using JSR223 Test Elements and Groovy language 用于脚本,因此请考虑将您的代码更改为:
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 Sampler somewhere in setUp Thread Group,如果你不希望采样器出现在测试结果中,请在脚本的开头添加SampleResult.setIgnore()
我所做的是这样的:
- 创建循环控制器。
- 使用 CSVread 函数读取两行并使用 _Jexl2 存储差异。
- 运行 循环控制器直到 csv 的 EOF。
- 在此控制器中创建一个计数器并将此计数器用于数组 ${variable${Index}}。
- 使用 jexl
将先前计算的差值存储在另一个数组变量中
- 运行 beanshell 脚本并将此数组放入 csv 中。
我知道这个解决方案真的很长,但它奏效了:)
我一直在尝试创建 Jmeter 测试以使用 CSV 在更实际的时间上执行。 我有一个 CSV,其中包含一行计时。我想 运行 测试基于在不同线程上以重复方式重复的 2 个连续计时之间的差异。 我的 CSV 如下所示。我想计算像 Time = Time2-Time1, Time= Time3-Time2 等时间。将所有这些时间保存在另一个 excel.
我正在尝试 运行 BeanShell 脚本并关注了几篇文章,但没有成功。
例如:${Test}=${__BeanShell(${__CSVRead(Test.csv,1)}${__CSVRead(Test.csv,next)}-${__CSVRead(Test.csv,1)})}
这适用于单个值,但不确定如何为 CSV 的所有值自动执行此操作以及如何将其保存在特定行中。 任何帮助将非常非常感谢。
Since JMeter 3.1 you should be using JSR223 Test Elements and Groovy language 用于脚本,因此请考虑将您的代码更改为:
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 Sampler somewhere in setUp Thread Group,如果你不希望采样器出现在测试结果中,请在脚本的开头添加SampleResult.setIgnore()
我所做的是这样的:
- 创建循环控制器。
- 使用 CSVread 函数读取两行并使用 _Jexl2 存储差异。
- 运行 循环控制器直到 csv 的 EOF。
- 在此控制器中创建一个计数器并将此计数器用于数组 ${variable${Index}}。
- 使用 jexl 将先前计算的差值存储在另一个数组变量中
- 运行 beanshell 脚本并将此数组放入 csv 中。 我知道这个解决方案真的很长,但它奏效了:)