jmeter 多行数据比对(无序);

页面(设置了排序)返回一个JSON串,数据库查询相关数据(未排序);

1 Jmeter——beanshell提取响应中的title值;

1.1复制fastjson-1.2.68.jar 到Jmeter的lib目录下;

1.2Test Plan中添加json包的路径;

 1.3 beanshell中导入json包;

1.4 beanshell中获取响应结果作为字符串;

String rs=prev.getResponseDataAsString();

1.5 通过JSONArray解析字符串;

JSONArray pgtitles=JSONArray.parseArray(rs);

1.6 通过长度,遍历JSONArray中的每个title;

for(int i=0;i<pgtitles.size();i++){
    String pgtitle=pgtitles.getJSONObject(i).getString("title");
}  

 

 Jmeter——JDBC请求——结果变量名称:如果指定,这将创建一个包含行映射列表的Object变量。每个映射都包含列名称作为键,并包含列数据作为值;参考:https://jmeter.apache.org/usermanual/component_reference.html#JDBC_Request

columnValue = vars.getObject(“resultObject”).get(0).get(“列名”);
如上图,想要获取JDBC请求结果的每条title;
结果总条数${titles_#}
for(int i=0;i<${titles_#};i++){
  String dbtitle=vars.getObject("resultt").get(i).get("title");
}  
页面响应数据与数据库查询数据进行比对,顺序不定;将title的值作为key存入HashMap中,该key对应的value为该title的数量;
思路:逐一遍历页面结果的title的值,若是该title的值不存在集合HashMap中,则存入title的值,1;
                   若是该title的值存在集合HahMap中,则查该title对应的value,并存入该title的值,value为num+1;
   逐一遍历数据库结果的title的值,若是该title的值不存在集合HashMap中,则断言失败;
                    若是该title的值存在集合HashMap中,则查该title对应的value,并存入该title的值,value为num-1;
   逐一遍历集合HashMap中所有key的value值,若不为0,则断言失败;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
String rs=prev.getResponseDataAsString();
JSONArray ptitle=JSONArray.parseArray(rs);
HashMap titleSet=new HashMap();//注意这里不要写泛型;不支持
boolean flag=false;
if(${searchcount}==${titles_#}){//页面查询条数与数据库查询条数一致;
	//for(int i=0;i<${searchcount};i++){//将页面结果名称写入Map集合;
	for(int i=0;i<ptitle.size();i++){//将页面结果名称写入Map集合;
		String pgtitle=ptitle.getJSONObject(i).getString("title");	
		if(titleSet.get(pgtitle)!=null){//存在该pgtitle,则数量+1
			int num=titleSet.get(pgtitle);
			titleSet.put(pgtitle,++num);
		}else{
			titleSet.put(pgtitle,1);
		}		
	}
	for(int i=0;i<${searchcount};i++){//数据库名称存在map集合中,则数量-1;
		String dbtitle=vars.getObject("resultt").get(i).get("title");		
		if(titleSet.get(dbtitle)==null){
			flag=true;
			Failure=true;
			FailureMessage="页面搜索结果内容与数据库结果内容不一致;";
			break;
		}			
		int num=titleSet.get(dbtitle);
		titleSet.put(dbtitle,--num);	
	}
	for(int i=0;i<${searchcount};i++){//map集合所有键的值=0,则页面与数据库搜索处理的产品名称完全一致
		String pgtitle=ptitle.getJSONObject(i).getString("title");	
		if(titleSet.get(pgtitle)!=0){
			flag=true;
			Failure=true;
			FailureMessage="页面搜索结果内容与数据库结果内容部分产品名称条数不一致;";
			break;
		}
		/*
		Set<String> keys=titleSet.keySet();//Set集合报错
		Iterator<String> it=keys.iterator();
		while(it.hasNext()){
			String k=it.next();
			if(titleSet.get(k)!=0){
				flag=true;
				Failure=true;
				FailureMessage="页面搜索结果内容与数据库结果内容部分产品名称条数不一致;";
				break;
			}
		}
		*/
	}
	
}else{//页面查询条数与数据库查询条数不一致;
	flag=true;
	Failure=true;
	FailureMessage="页面搜索结果与数据库结果条数不一致(<=400条);";
}
if(!flag){
	Failure=false;
	System.out.println("页面搜索结果与数据库结果完全一致!!!");
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值