功能说明:当脚本内存在多线程内的接口均需要登录接口的Token时,可使用跨线程组调用方式使得每个线程组内的接口调用到登录接口内的token,方式如下
KaTeX parse error: Expected group after '_' at position 2: {_̲_setProperty(to…{token},)}
${__P(token,)}
存在的问题:
使用该功能后,若进行多线程并发,则全部线程使用的token均为setup线程组内最后一次执行所获取的token
解决方案:
1.在setup线程组内增加beanshell处理器,将获取到的Token写入到csv文件内
String p1 = System.getProperty(“user.dir”);
String p2 = System.getProperty(“file.separator”);
String p3 = “user_token.csv”;
String path = p1 + p2 + p3;
FileWriter fileWriter = new FileWriter(new File(path), true);
BufferedWriter writer = new BufferedWriter(fileWriter);
writer.append(vars.get(“token”)+“\n”);
writer.close();
fileWriter.close();
System.out.println(“写入完成:” + path);
代码说明: user.dir=当前工作空间,若在jmeter内运行则会生成到jmeter的bin目录下
生成一个名为user_token的csv文件
2.并在其他线程组内增加csv数据设置,用以读取csv文件内的Token
3.增加setdown线程组,该线程组内增加beanshell处理器,写入删除csv文件的代码(如果不删CSV文件,则下次运行该脚本会无法获取到正确Token)
String p11 = System.getProperty(“user.dir”);
String p22 = System.getProperty(“file.separator”);
String p33 = “user_token.csv”;
String path1 = p11 + p22 + p33;
System.out.println(“准备删除文件:” + path1);
File file = new File(path1);
if (!file.exists()) {
System.out.println(“删除文件失败:” + path1 + “不存在!”);
} else {
file.delete();
System.out.println(“删除成功” + path1);
}
System.out.println(“执行完成”);
代码说明:检测当前工作目录下是否存在user_token文件,若存在则进行删除
system.out.println为调试代码,意为在控制台输出调试日志,方便查看代码是否已经完成运行