背景:
使用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与期望值不一致";
}