我正在尝试测试一些api,但首先我需要获得我在测试中使用的每个客户的会话密钥。我有一个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 postprecesser创建文件并附加会话密钥到
sessionKeys.csv
- BeanShell postprecesser创建文件并附加会话密钥到
- 登录请求
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
<<ul> - GetData请求/gh>
我注意到,即使文件实际上被删除,创建并填充了新的sessionKeys,首先几个请求使用旧的sessionKeys在文件被删除之前。
我试过添加常量计时器或改变JMeter文件的结构,但没有任何作用。
查看JMeter测试元素执行顺序
配置元素
预处理器
计时器
取样器
后置处理器(除非SampleResult为null)
断言(除非SampleResult为null)
监听器(除非SampleResult为null)
CSV数据集配置是一个配置元素,因此它在Beanshell采样器之前执行了很长时间,这完美地解释了你所面临的行为。
如果你需要对CSV文件进行一些预处理你需要在setUp Thread Group
中进行还要注意,从JMeter 3.1开始,您应该使用JSR223测试元素和Groovy语言编写脚本,因此考虑迁移是有意义的。
看起来您的测试计划中的CSV Config元素存在于线程组之外,因此在文件被删除和重新创建之前将首先被调用。
在您的情况下,将会话键存储为JMeter属性可能更简单,以便可以在所有线程组中访问它。您可以使用Groovy(如props.put("${sessionKey}", sessionKey)
)或通过JMeter函数(如${__setProperty("sessionKey",${sessionKey})}
)来存储它。
可以使用属性函数(如${__P(sessionKey,)}
)再次访问该属性。