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,可以在控制檯看到輸出結果。