Jmeter beanshell断言:一次请求中的某个参数对应多个值,写入数据表时对应多行记录

背景:

使用Jmeter 发送的http post请求中的某个参数有多个值(如请求示例中的deviceno,在实际中通常对应多选的业务场景,deviceno是从CSV文件中参数化读取的):

请求示例:

{
"id":"",
"diningname":"风华苑餐厅",
"deviceno":"04201812001351,04201812001252,04201910000229,04201912000646",
"type":2,
"officezone":"10"
}

请求成功后,查询数据表,发现deviceno的每个值都对应一条记录:

使用Jmeter JDBC request查询deviceno:

结果如下:

 

 

 

 

 

 问题:

如何校验写入数据库中的deviceno是否正确

 

方法:

在JDBC request下增加Beanshell Assertion,将jdbc request响应拼接成字符串、参数化读取deviceno转换为字符串,从而进行字符串比较,具体代码如下:

import java.util.*;

//获取jdbc request响应结果行数
var Num = Integer.parseInt(vars.get("dbDeviceno_#"));

StringBuffer buff = new StringBuffer("");

for(int i=1;i<=Num;i++){
String dbdeviceno = "dbDeviceno_" + i;
buff.append(vars.get(dbdeviceno).toString());
buff.append(",");
}

String deviceNo = vars.get("deviceno");
log.info("+++++++++++++++++++deviceNo+++++++++++++++++++++");
log.info(deviceNo);

//test1为jdbc request返回结果组成的字符串
String test1 = buff.deleteCharAt(buff.length()-1).toString();

//test2为参数化读取deviceno转换为字符串格式
String test2 = vars.get("deviceno").toString();

//判断是否相等

if(test1.equals(test2)== true ){
    Failure=false;
    FailureMessage ="PASS:deviceno与期望值一致";
  } else{
    Failure=true;
    FailureMessage ="Failure:deviceno与期望值不一致";
    }

posted @ 2020-01-20 16:50  zhangxiaona  阅读(1915)  评论(0编辑  收藏  举报