Jmeter使用循环控制器实现参数化

发布时间 2023-06-01 15:48:59作者: Shimmer~~

循环控制器加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.请求中使用变量