背景:使用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 將一些關鍵信息打印入日誌,方便調試問題