1. 程式人生 > >JMeter開發外掛之一(JMeter開發Java Request Sampler測試mongodb)

JMeter開發外掛之一(JMeter開發Java Request Sampler測試mongodb)

前言

目前,在整個網際網路上很少找到關於使用JMeter測試mongodb的文章,因此通過學習並參考一些文章後,再經過實踐,將分享給大家在JMeter的Java Request中如何測試mongodb,當然希望大家可以舉一反三的思維,測試不同的資料庫(Mysql,Oracle和Sql Server),而不僅僅限制於測試mongodb。希望對測試人員有所幫助,如果文章

中有描述錯誤,請大家指出,謝謝。

學習參考文件地址:http://blog.csdn.net/xreztento/article/details/52473418

簡介

在Jmeter提供了一種純java的編碼方式來構建Sampler的元件,但構建java sampler的前提條件必須要有java的程式設計基礎。通過繼承AbstractJavaSamplerClient抽象類後重寫setupTest,runTest和teardownTest的方法可以構建成為JAVA Sampler的元件。
案例設計以及實現建立思路
1.編寫一個訪問mongodb的類,並提供一個查詢資料的方法。訪問mongodb的類稱為MongodbClient,查詢方法稱為query,該方法的返回資料型別為MongoCursor。

2.編寫一個TestMongodbSamplerClient通過繼承AbstractJavaSamplerClient抽象類後重寫setupTest,runTest和teardownTest的方法,在runTest方法中實現呼叫query的查詢方法,並將返回的設定在result.setResponseData()方法中,以便可以在檢視結果樹(View Result Tree)中看到響應的資料。

開發環境

1.編寫MongodbClient類的程式碼必須將mongo-java-driver-3.3.0.jar檔案匯入到專案工程中。可到mongodb的官方進行下載,下載地址:http://mongodb.github.io/mongo-java-driver/,該jar檔案除了在專案工程中引用外,也需要拷貝一份在JMeter的lib中。

2.編寫TestMongodbSamplerClient類需要在專案工程下匯入以下jar檔案,而這些檔案可在JMeter的lib目錄中找到:
ApacheJMeter_componets.jar
ApacheJMeter_core.jar
ApacheJMeter_java.jar
Jorphan.jar
Logkit-2.0.jar

3.將這些jar檔案放入到lib目錄下,並進行引用。



編寫MongodbClient類

MongodbClient根據資料庫的URL地址和資料埠號連線後,通過指定資料庫名稱獲得操作資料庫的物件,通過設定集合名稱返回操作集合的物件,對集合進行查詢操作。
MongodbClient程式碼如下:
package com.mongodb.client;

import org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

public class MongodbClient<Document, findIterable> {
	public MongoClient mongoClient = null;
	public MongoDatabase database = null;
	public MongoCollection<org.bson.Document> collection = null;
	public FindIterable<Document> findIterable = null;
	public MongoCursor<Document> mongoCursor = null;

	public void ConnectionMongoClient(String host, int port, String databaseName) {
		try {
			mongoClient = new MongoClient(host, port);
			database = mongoClient.getDatabase(databaseName);
			System.out.println("Connection Successfully !");

		} catch (Exception e) {
			System.out.println("Mongodb Connection Exception:");
			e.printStackTrace();
		}
	}

	public MongoCursor query(String collectionName, String queryStr) {
		collection =  database.getCollection(collectionName);
		findIterable =  (FindIterable<Document>) collection.find();
		mongoCursor = findIterable.iterator();
		System.out.print("Query Successfully !");
		String str = "";
		return mongoCursor;
		
	}
	
	public void closeConnection() {
		if (mongoClient != null) {
			mongoClient.close();
		}
	}
	
}

編寫TestMongodbSamplerClient類

TestMongodbSamplerClient類是必須通過繼承AbstractJavaSamplerClient抽象類後,重寫方法去實現的。而setupTest、runTest、teardownTest方法是完成整個測試宣告週期,其中setupTest與teardownTest在整個執行緒執行中只執行一次用於初始化和結束。
package test.mongodb.sampler;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.bson.Document;

import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongodbClient;

public class TestMongodbSamplerClient extends AbstractJavaSamplerClient {

	public static String host = null;
	public static int port = 0;
	public String collection = "";
	public MongodbClient mc = null;
	public MongoCursor<Document> mongoCursor = null;
	/* 獲取頁面填寫的引數 */

	@Override
	public void setupTest(JavaSamplerContext context) {
			
	}

	@Override
	public SampleResult runTest(JavaSamplerContext arg0) {
		// TODO Auto-generated method stub
		SampleResult result = new SampleResult();
		result.setSampleLabel("MongodbSampler" + Thread.currentThread().getId());
		result.sampleStart();
		mc = new MongodbClient();
		mc.ConnectionMongoClient("10.190.130.73", 27017, "apiDB");
		mongoCursor = mc.query("HttpRequestSampler", "");
		while(mongoCursor.hasNext()) {
			collection = collection + mongoCursor.next().toString() + "\n";
			System.out.println("collection" + collection);
		}
		if (collection != "" || !collection.equals("")) {
			result.setResponseData(collection.getBytes());
		}else {
			result.setResponseData(("the return data is null !").getBytes());
		}
		mc.closeConnection();
		result.setSuccessful(true);
		result.sampleEnd();
		return result;
	}

	@Override
	public void teardownTest(JavaSamplerContext context) {
		
	}

}

在TestMongodbSamplerClient類中實現的是無引數引數請求,也就是說在JAVARequest中沒有設定任何引數。接下來近三個重寫的方法作用可進行說明:

public void setupTest(JavaSamplerContextcontext),啟動整個執行緒過程中,該方法只執行一次,在該方法中,我們可以做一些初始化事件的準備或者獲

取在JAVA Request中設定的引數的值。獲取引數的值的方法如下:

   @Override

   public void setupTest(JavaSamplerContext context) {

      host = context.getParameter("host");

      port = context.getIntParameter("port");

      collection = context.getParameter("collection");

   }

使用context.getParameter("host")就是獲取host的直,如果設定

host=10.190.130.70,那麼host就是10.190.130.70.通過這樣的引數設定方法,可更加靈活地設定mongodb的引數,隨時可修改成不同的資料庫地址,

資料庫名稱和埠號。PublicSampleResult runTest(JavaSamplerContext arg0),該方法會根據設定的執行緒數來執行,呼叫mongodb的操作方法就在

該方法中實現操作,是這個類的核心方法,以下是runTest的程式碼模版:

@Override

   public SampleResult runTest(JavaSamplerContextarg0) {

      // TODOAuto-generated method stub

      SampleResult result = new SampleResult();

      result.setSampleLabel("MongodbSampler" + Thread.currentThread().getId());

      result.sampleStart();

      操作mongodb的核心程式碼區域。

      result.setSuccessful(true);

      result.sampleEnd();

      return result;

   }

在方法中必須要new一個SampleResult的例項物件,有該物件可以設定View Result tree的響應資料,最後需要返回物件。

result.setSampleLabel(),該方法設定View Result Tree中顯示的請求名稱和Aggregate Report中的Label名稱。

result.sampleStart(),該方法設定執行的開始時間.

result.setResponseData(),該方法設定響應的資料,在View Result Tree中可看到響應的資料。

result.setSuccessful(),該方法設定執行是否成功。

result.sampleEnd(),該方法設定執行結束時間。

當然result物件中原因不止目前介紹的幾個操作方法,還有很多的操作,如果還需要其他的設定或者瞭解更多資訊,可以對檢視SampleResult類的原始碼。

public voidteardownTest(JavaSamplerContext context)在該方法中在整個生命週期中,只執行一次,可在該方法中,編寫一些十分資源的一些操作程式碼。

匯出jar包


選擇中建立的專案,右鍵開啟Export,在Export視窗中,選擇JAR file,將專案匯出成為jar檔案。


設定輸出jar檔案的路徑。

拷貝匯出的jar檔案到JMeter的lib/ext目錄下


將TestMongodbSampler.jar拷貝到JMeter的lib/ext目錄下後,必須要重新啟動JMeter工具才生效。

執行TestMongodbSampler外掛


啟動JMeter後分別建立執行緒組,Java Request元件,檢視結果樹以及聚合報告。


建立執行緒組


建立Java Request元件請求,並且選中test.mongodb.sampler.TestMongodbSamplerClient,由於沒有編寫獲取引數的程式碼,所以在Send Parameters With the Request

中不用設定引數。


執行成功後,檢視View Result Tree中的響應資料






執行成功後檢視聚合報告中的資料。

以上就是整個編寫Sampler元件到執行的整個過程,每一個步驟都是經過實踐的。當然如果在描述的地方有錯誤,可留言指出錯誤,後續會繼續學習編寫外掛的方法,將分享更多的技術給大家。



相關推薦

JMeter開發外掛之一JMeter開發Java Request Sampler測試mongodb

前言 目前,在整個網際網路上很少找到關於使用JMeter測試mongodb的文章,因此通過學習並參考一些文章後,再經過實踐,將分享給大家在JMeter的Java Request中如何測試mongodb,當然希望大家可以舉一反三的思維,測試不同的資料庫(Mysql,Oracl

git 團隊開發常用操作適用於 gogs、gitlab、github

git bash 開發 -m sgi pull .cn 定義 check 右鍵 git 團隊開發常用操作流程(適用於 gogs、gitlab、github) NO1 項目構建者 (1)在遠程倉庫創建倉庫 (2)將夥伴添加到倉庫合作者中(無先後要求) (2)cd 到項目將要

在64位的ubuntu 14.04 上開展32位Qt 程式開發環境配置pro檔案中增加 QMAKE_CXXFLAGS += -m32 命令

為了能中一個系統上開發64或32位C++程式,費了些周折,現在終於能夠開始幹過了。在此記錄此時針對Q5.4版本的32位開發環境配置過程。 1. 下載Qt 5.4 的32位版本,進行安裝,安裝過程中會發現一些32位的庫沒有安裝,根據提示的錯誤逐個安裝上即可。 2. 開啟一個SampleCode 中的cube

【Keras】使用Keras開發的流程IMDB資料集電影評論二分類

Keras簡介 \quad\quad Keras是一個Python深度學習框架,是一個模型級的庫,為開發深度學習模型

壓測JMeter---3、JMeter的元件---》3.3取樣器---》3.3.3 Java Request Sampler

3.3.3 Java Request Sampler       用以傳送Java請求,測試Java程式,需要基於JMeter測試框架編寫測試用例。 編寫測試用例步驟如下:       1 . 新建一個普通的Java工程       2 . 新增JMeter的

ARM裸板程式的開發和編譯以點亮LED燈為例

製作好交叉編譯工具鏈後,怎麼確定是否有效呢,當然是編譯一個程式燒寫到板上跑一下了。這裡我們以點亮LED燈為例描述如何使用我們製作的交叉編譯工具鏈編譯裸板程式。 首先,需要了解下Nor flash,Nand flash,片內記憶體,片外記憶體,地址空間這幾個概念。其中,Nor

JMeter“監視器結果”配置監視器結果無資料的解決方法

轉自:http://blog.csdn.net/catoop/article/details/8055947 從JMeter的幫助文件可以看出它僅支援TOMCAT5以上版本,詳情見:http://jakarta.apache.org/jmeter/usermanual/bu

windows7安裝ios開發環境總結VMware9.0+VMware補丁+dmg映象+Xcode

我的電腦配置CPU: 英特爾-酷睿i3處理器 記憶體:4GB 硬碟:1TB 系統:win7 32位 安裝步驟:1 . 安裝虛擬機器VMware Workstation 9.0 2.安裝虛擬機器補丁。 預設情況下,VMware虛擬機器沒有Mac系統選項。需要安裝補丁之後,

OMAP開發資源推薦可以幫你少走不少彎路

1. TI官方資源  TI中文主頁: http://focus.ti.com.cn/cn/tihome/docs/homepage.tsp  或者 http://www.ti.com  從“處理器”連結可以連結到每個晶片的資料主頁,比如:  http://focus.ti.c

Android開發總結之一,搭建開發環境

Android的開發現在是如火如荼,逞現在不是很忙了,學習了下,這裡記錄下了在windows在如何搭建Android開發環境,對自己是個記錄,對新入門的兄弟姐妹們可以參考一下! (1)安裝JDK,省略。(2)下載Android SDK並配置。 可以到http://www.an

Web前端開發大系概覽 前端開發技術棧

前言 網際網路建立50多年了,網站開發技術日新月異,但web前端始終離不開瀏覽器,最終還是HTML+JavaScript+CSS這3個核心,圍繞這3個核心而開發出來大量技術框架/解決方案。 我從2000年初開始做網站開發,使用的技術不斷迭代,一些消失了,更多的出現了。 爆棧三部曲 問題

iOS開發本地快取資料離線快取、讀取、釋放

1、設定全域性的Cache     在AppDelegate.h中新增一個全域性變數 @interface AppDelegate : UIResponder    {       ASIDownloadCache *myCache;   }   @property (strong, nonat

開發工具使用Android Studio、SQLite Expert 、TortoiseSVN

8、AS載入的Module無法執行 在project 下的setting.gradle檔案中include 即可 7、AS載入專案出錯 Android studio Cannot load module 解決:close project ,

Eclipse+超快的模擬器Genymotion開發Android應用第一步:安裝及配置Genymotion

一、安裝及配置Genymotion (1)由於Eclipse中自帶的SDK模擬器,啟動之慢,不說了 現在給大家介紹一種比較快的模擬器Genymotion (2)首先去Genymotion的官網註冊一個賬號,這個賬號是有用的 請記著你的賬號和密碼(我用的是QQ好註冊的)

微信公眾號開發——網頁授權 頁面分享 、獲取使用者基本資訊

第一步:要用到的介面文件如下 第二步:使用網頁服務,公眾號需要如下配置 1.設定 授權回撥頁面域名 2.設定 JS介面安全域名設定(點選公眾號左邊選單 公眾號設定 進入設定頁面 點選 功能設定) 上程式碼 BLL呼叫程式先貼

一個遊戲是如何被設計和開發出來的怎樣開發一款遊戲

本專欄是著重於討論“開發一款遊戲需要怎樣的能力”,以及“如何學習開發遊戲所需的所有技能”。在開始討論我們的兩個主題之前,我認為非常有必要讓初學者瞭解一下:一個遊戲是如何被設計和開發完成的。 下面簡單列舉了四個能力,分別是:程式、設計、美術、音樂。但是礙於篇幅限

eclipse+sdk+adk安卓開發環境部署全程詳解,適合小白

寫給第一次想在自己Windows上建立eclipse的Android開發環境的朋友們,為了確保大家能順利完成開發環境的搭建,希望對準備進入Android開發的朋友有幫助。 我們知道eclipse+sdk+adk有很多版本的選擇,為了方便剛接觸的朋友 首先我介紹本人的套裝:

工廠模式think in java中的設計模式

org 我們 import lac otf 返回值 類型 int ava 工廠模式:工廠模式是利用工廠類的工廠方法創建對象的一種設計模式,目的是創建對象,但是很多時候創建對象我們會考慮很多其他因素~~~~比如限定輸入,限定返回值是否某個,比如在創建的過程中進行一些判斷,通過

叠代器模式think in java中的設計模式

一個 div 封裝 imp 叠代器 方法 println rri 數字 叠代器模式:用來叠代一個容器集合數組的一種模式。可能大家很多時候是用for循環進行叠代的,但是實際上for循環內部不能使用remove方法,但是叠代器可以,這是因為叠代器內部進行了該方法的邏輯處理。同樣

模板方法模式think in java中的設計模式

方法 bst pac code pri ack 單點 size clas 模板方法模式:模板方法模式顧名思義就是一種構造模塊化的設計模式。將一次行為分為多種行為,靈活的調用不同模塊進行工作。比如在飯店吃飯,分為:點菜,吃飯,買單等行為無論什麽飯店大致都是這三種行為。因此我們