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("頁面搜索結果與數據庫結果完全一致!!!");
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM