1. 程式人生 > >Jmeter外掛——Java實現thrift客戶端

Jmeter外掛——Java實現thrift客戶端

環境:mac os
一 Jmeter安裝

下載Jmeter最新版本,地址 http://jmeter.apache.org/download_jmeter.cgi 

解壓之後就可以直接用了。

啟動Jmeter: 

wangwenqians-MacBook-Pro:bin wangwenqian$ pwd
/Users/wangwenqian/Tools/apache-jmeter-2.13/bin
wangwenqians-MacBook-Pro:bin wangwenqian$ ./jmeter.sh

二 Thrift安裝

下載thrift-0.9.3, libevent-2.0.22-stable, boost_1_59_0, bison-3.0.4.

安裝boost_1_59_0.

$tar xzvf boost_1_59_0.tar.gz
$cd boost_1_59_0
$./bootstrap.sh -prefix=PATH_TO_BOOSTsudo $./b2 threading=multi address-model=64 variant=release stage install

安裝libevent-2.0.22-stable

$tar xzvf libevent-2.0.22-stable.tar.gz
$./configure --prefix=/usr/local/ --disable-static
$make
$sudo make install

安裝thrift-0.9.3

$cd thrift-0.9.3
$./configure --prefix=/usr/local/ --disable-static --with-boost=/usr/local/ --with-libevent=/usr/local/
$make
$sudo make install

注意,在安裝thrift的過程中,可能會提示bison版本低,可以下載新版的bison,安裝一下就好了。
$tar -xvf bison-3.0.4.tar
$./configure --prefix=/usr/
$make
$sudo make install

以上,thrift全部安裝完成,路徑/usr/local/bin/thrift.

三 Thrift例項——java

新建一個thrift檔案,檔名為add.thrift。

namespace java com.test.samples.thrift.server
typedef i32 int
service AdditionService{
	int add(1:int n1, 2:int n2),
}

執行: /usr/local/bin/thrift --gen java add.thrift

執行完成後,生成gen-java目錄。新建一個java工程,將生成的java檔案全部copy到java工程裡面。

下面在工程中實現server端程式碼。

package com.test.samples.thrift.server;

import org.apache.thrift.transport.TServerSocket;  
import org.apache.thrift.transport.TServerTransport;  
import org.apache.thrift.server.TServer;  
import org.apache.thrift.server.TServer.Args;  
import org.apache.thrift.server.TSimpleServer;  
   
public class MyServer {  
   
 public static void StartsimpleServer(AdditionService.Processor<AdditionServiceHandler> processor) {  
  try {  
   TServerTransport serverTransport = new TServerSocket(9090);  
   TServer server = new TSimpleServer(  
     new Args(serverTransport).processor(processor));  
   
   System.out.println("Starting the simple server...");  
   server.serve();  
  } catch (Exception e) {  
   e.printStackTrace();  
  }  
 }  
    
 public static void main(String[] args) {  
  StartsimpleServer(new AdditionService.Processor<AdditionServiceHandler>(new AdditionServiceHandler()));  
 }  
   
}
右鍵run這個server類,可以看到
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Starting the simple server...

四 Jmeter外掛完成thrift客戶端

新建java工程,add external libraries: 

JMeter中的jar包 avalon-framework-4.1.4.jar, jorphan.jar, logkit-2.0.jar, ApachekJMeter_core.jar, ApacjeJMeter_java.jar

Thrift中的jar包 libthrift-0.9.3.jar, slf4j-api-1.7.12.jar

另外,把thrift的兩個jar包放到apache-jmeter-2.13/lib/ext下。

將生成的AdditionService.java拷貝到java工程中。新建AdditionClient.java.

package jmeter.sampler;

import org.apache.thrift.TException;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocol;
import org.apache.thrift.transport.TSocket;
import org.apache.thrift.transport.TTransport;
import org.apache.thrift.transport.TTransportException;

public class AdditionClient {

	public static void send() {

		System.out.println("enter...");
		try {
			TTransport transport;

			transport = new TSocket("localhost", 9090);
			transport.open();

			TProtocol protocol = new TBinaryProtocol(transport);
			AdditionService.Client client = new AdditionService.Client(protocol);

			System.out.println(client.add(100, 200));

			transport.close();
			System.out.println("exit...");
		} catch (TTransportException e) {
			e.printStackTrace();
		} catch (TException x) {
			x.printStackTrace();
		}
	}

}

新建sampler類MyJavaSampler.java
package jmeter.sampler;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;


public class MyJavaSampler extends AbstractJavaSamplerClient{

	@Override
	public SampleResult runTest(JavaSamplerContext arg0) {
		// TODO Auto-generated method stub
		SampleResult result = new SampleResult();
		result.sampleStart();
		System.out.println("enter....");
		System.out.println("[runTest]");
		AdditionClient.send();
		result.setSuccessful(true);
		result.sampleEnd();
		return null;
	}

	@Override
	public Arguments getDefaultParameters() {
		// TODO Auto-generated method stub
		System.out.println("Get Parameter name![getDefaultParameters]");
		return super.getDefaultParameters();
	}

	@Override
	public void setupTest(JavaSamplerContext context) {
		// TODO Auto-generated method stub
		System.out.println("[setupTest]");
		super.setupTest(context);
	}

	@Override
	public void teardownTest(JavaSamplerContext context) {
		// TODO Auto-generated method stub
		System.out.println("[teardownTest]");
		super.teardownTest(context);
	}

}

以上,程式碼完成。

Export出jar包,放到apache-jmeter-2.13/lib/ext。 重新啟動Jmeter。新建Thread Group, 在Thread Group下,Thread Group -> Add -> Sampler -> Java Request,在Classname下選在新做的plugin的類名。

大功告成了,保證server處於啟動狀態,點選Jmeter上面的run,可以在控制檯看到輸出結果。