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函数,如下图所示

 

 

 

posted @ 2021-06-17 16:27  小蕊-zr  阅读(258)  评论(0编辑  收藏  举报