jmeter循环导出csv文件
需求:取所有台账表的最大最小值
1、设备分类表中tzbm字段中按设备类型存放了所有表
分析思路:
1、 循环获取台账表名
2、 获取到的台账表取最大最小值
3、 导出台账表名、最大值、最小值
方法1:
Jdbc请求-获取服务名
select t.table_schema,t.table_name from information_schema.tables t where t.table_name in (SELECT tzbm FROM us_sys.t_dw_bzzx_sbfl where tzbm is not null)
这个请求声明出两个变量:table_schemas和table_names
For控制器:
由于table_names是一个list所以for循坏这个列表;
输入:table_names
输出:table_name
如图所示,for控制器节点下有一个查询设备编码最大最小值的一个sampler,也就是这个请求执行的次数跟table_names List里的元素的个数是相等的;
Jdbc请求-查询设备编码最大最小值请求:
select CONCAT(CONCAT('${table_schema}','.'),'${table_name}'),MAX(sbmc),MIN(sbmc) from ${table_schemas_1}.${table_name}
现在做几个测试:
第一种:我们直接用jdbc声明出的变量执行请求:
结果失败;
第二种:我们使用for控制器产出的变量执行请求:
table_schemas还是结果失败,table_names可以了(因为for控制器将table_names输出成了table_name);由此可见jdbc的请求当一列存在多个数据时是不能直接用的;
第三种情况:
我们jdbc请求中:
直接取table_schemas里面的一个值;
结果成功:
由此可见jdbc请求声明出来的变量必须要再key后加后缀进行使用,不能直接get其变量名;
FileWriter fstream =new FileWriter("C:/Users/zr/Desktop/xiaorui.csv",true);
BufferedWriter out =new BufferedWriter(fstream);
out.write(("${BM_1}")+","+("${MAX_1}")+","+("${MIN_1}")+"\n"); //获取变量的方式应当是 "${key}",而不是$"{key}",${key}的效果等效于vars.get(key);
//out.write(","); //换列
//out.write(System.getProperty("line.separator"));//换行
out.close();
fstream.close();
第二种方法:循环控制器
仅对和前面不同的地方做说明:这里取的是查询出来的总数量做为循环数量
增加了计数器
一个里面多个变量的情况,需要引用_V函数,如下图所示