[Jmeter]给设备批量添加国标编码+(坑)当数字前面出现0的时候很容易出错,会被误认为8进制

一、需求:假设有10w的设备,每个设备都需要20位编码,分为三部分组成:前10位+中间3位+后7位;要求:

1、10w个编码前10位可以一致,但允许用户自定义;

2、中间三位同上;

3、后7位任意数字;

4、但是这10W个编码不能重复,必须唯一。

二、利用Jmeter实现

2.1 用户自定义参数元件:三个参数:前10位;中间3位;需要生成的编码数量;

2.2 配置数据库连接,同时记得导入数据库连接依赖包

 

 2.3 从数据库中取出所有的设备id

 

 2.4 使用beanshell,拼接前13位,顺带获取设备个数

cameraidscount = vars.getObject("cameraidObj").size(); //获取数据长度
vars.put("cameraidsnum",cameraidscount.toString()); //查看数据长度
log.info(cameraidscount.toString());   //测试

var precoding = vars.get("precoding");   //前10位
var mediumcoding = vars.get("mediumcoding");//中间三位
vars.put("preGBNUM",precoding+mediumcoding);    //拼接生成前13位国标编码
//log.info(vars.get("preGBNUM"));   //测试

 2.5 用一个循环控制器,循环次数以取出的设备个数为准(如果并不想给数据库里所有设备赋予国标编码,循环次数可以是用户参数里面设置的testnum,自定义想要生成的编码数)

2.6 循环里用个计数器,用来创建后7位编码

2.7 然后用beanshell将前13位和后7位拼接起来,从设备id列表里取出第x个id

//var cameraids = vars.getObject("cameraidObj");

var numx = "${counter}";  //获取循环第x次
//log.info(numx.toString());   //测试


vars.put("GBNUM",vars.get("preGBNUM")+vars.get("counter").toString());    //拼接生成第X个国标编码
//log.info(vars.get("GBNUM"));   //测试


var camera = vars.getObject("cameraidObj").get(Integer.parseInt(numx)); //取出第X个{camera_id:id}
//log.info(numx.toString());   //测试
vars.put("cameraid",camera.get("camera_id").toString());//从{camera_id:id}中取出id
//log.info(camera.get("camera_id"));   //测试

注意:这里有个地方容易出错,当数字前面出现0的时候很容易出错,会被误认为8进制,所以不能写成var numx = ${counter};01—07时都是正常的,但是在”08”,”09”就会返回0,所以要变成字符串传值

2.8 将当前拼接好的20位编码通过数据库请求写入到当前获取到的设备id

 2.9 剩下的就是用debugsample、查看结果树、聚合报告调试了

原文地址:https://www.cnblogs.com/cyanlee/p/12403390.html