Jmeter插件開發實現對mongo數據庫的操作

背景:使用JMeter做接口自動化,用例執行前需要清除一些數據,操作完後校驗mongo數據。因爲Jmeter3沒有對Mongo數據庫的支持,所以自己開發java請求實現對mongo的操作。

1.eclipse新建java工程,依賴jar包如下


2.寫一個類實現連接mongo數據庫,返回要操作的collection對象

public DBCollection ConnectionMongoClient(String host, int port, String dbname,String collection) {  
                	Mongo connection = new Mongo(host,port);
	    		DB db = connection.getDB(dbname);
	    		DBCollection coll = db.getCollection(collection);
	        return coll;  
			
	    }  

3.參看官網API,java請求需要繼承AbstractJavaSamplerClient抽象類,下面以mongo的查詢操作爲例的實現


sampler核心代碼


more details see 點擊打開鏈接

getDefaultParameters:設置請求中的參數以及默認值

public Arguments getDefaultParameters(){
		Arguments params=new Arguments();
		params.addArgument("ip","127.0.0.1");
		params.addArgument("port","27017");
		params.addArgument("dbname","dummy");
		params.addArgument("collection","users");
		params.addArgument("queryjsonString","");
		return params;
	}

setupTest:參數初始化

public void setupTest(JavaSamplerContext context){
	System.out.println("執行setup");
	ip= context.getParameter("ip");
	port=context.getIntParameter("port");
	dbname= context.getParameter("dbname");
	collection= context.getParameter("collection");
	queryjsonString=context.getParameter("queryjsonString");
	
	}

runTest:操作核心代碼:設置請求的名稱,執行Mongo的查詢,設置查看結果樹的響應數據

@Override
	public SampleResult runTest(JavaSamplerContext context) {
		System.out.println("執行runTest...");
	
		SampleResult sampleresult = new SampleResult();  
		sampleresult.sampleStart();
		//設置sampler請求的名稱
		sampleresult.setSampleLabel("MongodbSampler" + Thread.currentThread().getId()); 
		
		//連接mongo
		DBCollection coll=new TestMongoConection().ConnectionMongoClient(ip, port, dbname, collection);
		DBObject query=new BasicDBObject();
		if (queryjsonString!=""&&queryjsonString!=null){
	       query=(DBObject) com.mongodb.util.JSON.parse(queryjsonString);
		}
      
       //日誌打印查詢條件,查看查詢條件是否傳值錯誤
        getLogger().debug(query.toString());
      
        DBCursor cursor = coll.find(query);
        while (cursor.hasNext()){
        	DBObject dbobj=cursor.next();
        	responseData =responseData+dbobj.toString()+ "\n";
        }
        if ( responseData!= "" || !responseData.equals("")) {  
        	//設置響應數據爲查詢結果
            sampleresult.setResponseData(responseData.getBytes());  
        }else {  
            sampleresult.setResponseData(("the return data is null !").getBytes());  
        } 
 
        sampleresult.setSuccessful(true);
        sampleresult.sampleEnd();
		return sampleresult;  
		
	}

刪除等操作,僅需修改對mongo操作的相應代碼

 WriteResult wr=coll.remove(query);
        int deleteDocNum=wr.getN();
        if (deleteDocNum>0){
        	responseData=deleteDocNum+" documents deleted successfully";
        }else{
        	responseData="no document deleted";
        }

4.界面操作

4.1 請求:


4.2 查看結果,設置的請求名稱和響應數據。可對響應數據進行斷言,確定用例結果


4.3 將一些關鍵信息打印入日誌,方便調試問題



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章