JMeter读取旧版csv

JMeter reads the old version of csv

我正在尝试测试一些 APIs 但首先我需要为我在测试中使用的每个客户获取会话密钥。我有一个包含客户登录信息的 CSV 文件,并在每个线程中读取它。

我的 JMeter 文件中有以下表格。

File file = new File("C:/user/sessionKeys.csv");
if (file.exists() && file.isFile()) {
    file.delete();
}
if("${sessionKey}" != "not_found")
{
    File file = new File("C:/user/sessionKeys.csv");

    FileWriter fWriter = new FileWriter(file, true);
    BufferedWriter buff = new BufferedWriter(fWriter);
    
    
    buff.write("${sessionKey}\n");
    
    buff.close();
    fWriter.close();
}

而且我注意到,即使文件实际上被删除、创建并填充了新的 sessionKeys,在文件被删除之前,首先有一些请求使用文件中的旧 sessionKeys。

我试过添加常量计时器或更改 JMeter 文件的结构,但没有任何效果。

您的测试计划中的 CSV Config 元素似乎存在于线程组之外,因此将在删除和重新创建文件之前首先调用。

在您的情况下,将会话密钥存储为 JMeter 属性 可能更简单,这样它就可以在所有线程组中访问。您可以使用 Groovy(例如 props.put("${sessionKey}", sessionKey))或通过 JMeter functions(例如 ${__setProperty("sessionKey",${sessionKey})})来存储它。

然后可以使用 property function 再次访问 属性,例如 ${__P(sessionKey,)}

看看JMeter Test Elements Execution Order

  1. Configuration elements

  2. Pre-Processors

  3. Timers

  4. Sampler

  5. Post-Processors (unless SampleResult is null)

  6. Assertions (unless SampleResult is null)

  7. Listeners (unless SampleResult is null)

CSV 数据集配置是一个配置元素,因此它在 Beanshell 采样器之前执行很久,这完美地解释了您所面临的行为。

因此,如果您需要对 CSV 文件进行一些 pre-processing 操作,则需要在 setUp Thread Group

中进行

另请注意 starting from JMeter 3.1 you're supposed to be using JSR223 Test Elements and Groovy language for scripting 因此考虑迁移是有意义的。