Jmeter使用循环控制器实现参数化
循环控制器加csv实现参数化
1.添加循环控制器
我这里的循环次数是动态的,在循环控制器前添加beanshell获取文件行数后存为变量
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
String path = System.getProperty("user.dir");
log.info("路径:" + path);
String filePath =path+".\\测试Jmeter参数化.csv";
log.info("filePat=================h:" + filePath);
int fileLine;
try {
FileReader fileReader = new FileReader(new File(filePath));
LineNumberReader numberReader = new LineNumberReader(fileReader);
numberReader.skip(Long.MAX_VALUE);
fileLine = numberReader.getLineNumber();
numberReader.close();
} catch (Exception e){
throw new RuntimeException("获取文件行数异常:" + e);
}
String fileLineStr = String.valueOf(fileLine-1);
// 将文件行数放入系统变量中
log.info("文件行数:" + fileLineStr);
vars.put("fileLine", fileLineStr);
2.添加CSV 数据文件设置
文件名:可使用绝对路径或相对路径,绝对路径可直接浏览后选择。
变量名称:变量数量需要与csv文件一致
3.循环控制器中的请求可直接使用
循环控制器加beanshell实现参数化
因为不想用csv文件单独管理参数,而且我这边用到的参数也不太多,不想多一个csv文件,就像把变量直接写在beanshell中使用
1.添加循环控制器
2.添加计数器
3.添加beanshell
String[][] parameters = {
{"menu1", "code1"},
{"menu2", "code2"},
{"menu3", "code3"}
};
//// 获取计数器值
int counterValue = Integer.parseInt(vars.get("Counter"));
//// 输出计数器值
log.info("Current iteration: " + counterValue);
String menuName = parameters[counterValue][0];
String menuCode = parameters[counterValue][1];
vars.put("counterValue",String.valueOf(counterValue));
vars.put("menuName_" + counterValue, menuName);
vars.put("menuCode_" +counterValue, menuCode);
log.info("第"+counterValue+"次循环时,menuCode =" +menuCode);
counterValue++;
vars.put("Counter", Integer.toString(counterValue));
4.请求中使用变量