1. 程式人生 > >效能測試Jmeter壓測ZooKeeper-自定義java請求

效能測試Jmeter壓測ZooKeeper-自定義java請求

   要想通過自定義java請求來壓測ZooKeeper,那麼我們就需要做兩件事情,第一我們需要知道java如何操作ZooKeeper,第二就是怎麼能將我們寫的jar包讓jmeter識別,首先我們先來幹第一件事。

一、java操作ZooKeeper

以下的程式碼是網上百度找到的,經過了一點點修改(對於測試其它的可以找其它的測試程式碼)

package com.comtop.ZookApi;

import java.util.concurrent.CountDownLatch;

import org.apache.zookeeper.CreateMode;
import
org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.Watcher.Event.EventType; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; /** * Zookeeper base學習筆記 */ public class
ZookeeperBase { /** zookeeper地址 */ static final String CONNECT_ADDR = "10.10.3.136:32372"; /** session超時時間 */ static final int SESSION_OUTTIME = 2000;// ms /** 訊號量,阻塞程式執行,用於等待zookeeper連線成功,傳送成功訊號 */ static final CountDownLatch connectedSemaphore = new CountDownLatch(1); public static
void main(String[] args) throws Exception { ZooKeeper zk = new ZooKeeper(CONNECT_ADDR, SESSION_OUTTIME, new Watcher() { public void process(WatchedEvent event) { // 獲取事件的狀態 KeeperState keeperState = event.getState(); EventType eventType = event.getType(); // 如果是建立連線 if (KeeperState.SyncConnected == keeperState) { if (EventType.None == eventType) { // 如果建立連線成功,則傳送訊號量,讓後續阻塞程式向下執行 System.out.println("zk 建立連線"); connectedSemaphore.countDown(); } } } }); // 進行阻塞 connectedSemaphore.await(); System.out.println(".."); // 建立父節點 // zk.create("/testRoot", "testRoot".getBytes(), Ids.OPEN_ACL_UNSAFE, // CreateMode.PERSISTENT); // 建立子節點 // zk.create("/testRoot/children", "children data".getBytes(), // Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); // 獲取節點洗資訊 // byte[] data = zk.getData("/testRoot/children", false, null); // System.out.println(new String(data)); // System.out.println(zk.getChildren("/testRoot", false)); // 修改節點的值 // zk.setData("/testRoot/children", "modify data root".getBytes(), -1); // byte[] data = zk.getData("/testRoot/children", false, null); // System.out.println(new String(data)); // 如果存在節點則刪除節點 if (null != zk.exists("/testRoot/children", false)) { // 刪除節點 zk.delete("/testRoot/children", -1); System.out.println(zk.exists("/testRoot/children", false)); } zk.close(); } }

 

二、自定義java請求

一、環境準備         1、新建一個java工程         2、匯入jar包:ApacheJMeter_core.jar     ApacheJMeter_java.jar    (該包在本地C:\apache-jmeter-3.0\lib\ext下,當然路徑取決於本地環境)                 這兩個jar是使用jmeter最基礎的jar,能夠讓你的程式碼在jmeter中執行起來,如果在寫程式碼的過程中需要其他的jar,自行匯入。   二、寫程式碼前該知道的         1、如果想要讓你的程式碼在jmeter中執行起來,在建立類的時候需要去繼承AbstractJavaSamplerClient抽象類或者是實現JavaSamplerClient介面             AbstractJavaSamplerClient抽象類是JavaSamplerClient介面的子類,當你不需要複寫所有的需要複寫的方法時,那麼你只需要去繼承AbstractJavaSamplerClient抽象類即可。               如果你選擇了實現JavaSamplerClient介面,那麼你需要複寫的方法有:                          public SampleResult runTest(JavaSamplerContext context) {}                          public void setupTest(JavaSamplerContext context) {}                          public void teardownTest(JavaSamplerContext context) {}                          public Arguments getDefaultParameters() {}             這4個方法就必須要複寫,但是如果選擇繼承AbstractJavaSamplerClient這個抽象類,那麼只需要複寫你需要的方法即可。           2、方法說明:                     public Arguments getDefaultParameters() {}                             這個方法由Jmeter在進行新增javaRequest時第一個執行,它決定了你要在GUI中預設顯示出哪些屬性。                     public void setupTest(JavaSamplerContext context) {}                             這個方法相當於loadrunner中的init,我們可以用它來進行一些初始化的動作。                     public SampleResult runTest(JavaSamplerContext context) {}                             這個方法相當於loadrunner中的action,我們的核心測試程式碼就在這裡了。                     public void teardownTest(JavaSamplerContext context) {}                             這個方法相當於loadrunner中的end,收尾的工作可以由它來做。           3、除了以上2點,我們一般還需要去實現Serializable,序列化標記介面,這樣可以讓我們的類去實現序列化。