Jmeter 将响应数据值保存到变量并用 CSV 文件中的另一个值覆盖它

Jmeter save response data values to a variables and overwrite it with another values from CSV file

是否可以在 Jmeter 中获取变量(例如 ${variable_1} 我在正则表达式的帮助下从 HTTP 请求的响应主体收到的值,读取一些 .csv 文件并找到以与 ${variable_1} 完全相同的值开头的行(假设所有行都有不同的值),然后读取该行中的下一个单元格(几乎 .csv 文件仅包含 2 列)以及那里的任何值, 将其覆盖为 ${variable_1}?有人告诉我这可以在 BeanShell 的帮助下实现,但我不太熟悉其中的脚本。非常感谢任何建议。

给你:

import org.apache.commons.io.FileUtils;
import java.nio.charset.StandardCharsets;

log.info("Previous value of variable_1 = " + vars.get("variable_1"));

List csvLines = FileUtils.readLines(new File("test.csv"), StandardCharsets.UTF_8);

for (String csvLine : csvLines) {
    if (csvLine.startsWith(vars.get("variable_1"))) {
        vars.put("variable_1", csvLine.split(",")[1]);
        break;
    }
}

log.info("New value of variable_1 = " + vars.get("variable_1"));

演示:

有关在 JMeter 测试中使用脚本的更多详细信息,请参阅 How to Use BeanShell: JMeter's Favorite Built-in Component 文章。

另外请注意,Beanshell 有一些严重的性能缺陷,并且与使用 Java 7+ 语法(泛型、labmdas、多捕获等)编写的代码不兼容。如果您使用 setUp 线程组中某处的一个线程更改变量 - 这很好,但如果线程数很高 and/or CSV 文件很大 - 最好考虑 JSR223 Sampler and Groovy language