JMeter读取旧版csv
JMeter reads the old version of csv
我正在尝试测试一些 APIs 但首先我需要为我在测试中使用的每个客户获取会话密钥。我有一个包含客户登录信息的 CSV 文件,并在每个线程中读取它。
我的 JMeter 文件中有以下表格。
- CSV 数据集配置 - 用户登录信息
- 设置用户名、密码 - 每次迭代一个
- 设置线程组
- BeanShell Sampler 删除
sessionKeys.csv
File file = new File("C:/user/sessionKeys.csv");
if (file.exists() && file.isFile()) {
file.delete();
}
- 登录线程 -
ThreadCount = threadCount, Loop = 1
- 登录请求
- BeanShell PostPrecessor 创建文件并将会话密钥附加到
sessionKeys.csv
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();
}
- CSV 数据集配置 - 会话密钥
- API 调用线程 -
ThreadCount = threadCount, Loop = loop
- 获取数据请求
而且我注意到,即使文件实际上被删除、创建并填充了新的 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
Configuration elements
Pre-Processors
Timers
Sampler
Post-Processors (unless SampleResult is null)
Assertions (unless SampleResult is null)
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 因此考虑迁移是有意义的。
我正在尝试测试一些 APIs 但首先我需要为我在测试中使用的每个客户获取会话密钥。我有一个包含客户登录信息的 CSV 文件,并在每个线程中读取它。
我的 JMeter 文件中有以下表格。
- CSV 数据集配置 - 用户登录信息
- 设置用户名、密码 - 每次迭代一个
- 设置线程组
- BeanShell Sampler 删除
sessionKeys.csv
- BeanShell Sampler 删除
File file = new File("C:/user/sessionKeys.csv");
if (file.exists() && file.isFile()) {
file.delete();
}
- 登录线程 -
ThreadCount = threadCount, Loop = 1
- 登录请求
- BeanShell PostPrecessor 创建文件并将会话密钥附加到
sessionKeys.csv
- BeanShell PostPrecessor 创建文件并将会话密钥附加到
- 登录请求
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();
}
- CSV 数据集配置 - 会话密钥
- API 调用线程 -
ThreadCount = threadCount, Loop = loop
- 获取数据请求
而且我注意到,即使文件实际上被删除、创建并填充了新的 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
Configuration elements
Pre-Processors
Timers
Sampler
Post-Processors (unless SampleResult is null)
Assertions (unless SampleResult is null)
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 因此考虑迁移是有意义的。