一直想总结一下使用Jmeter做性能测试过程中遇到的坑。今天难得清闲,胡乱写一些自己心得吧。
准备工作:
- jmeter 是基于java实现的,所以需要安装jdk, java安装完成,默认会自动配置环境变量。cmd,运行java –version,判断是否安装成功。
- 下载相应版本jmeter, 因为jmeter通常伴随Badboy使用。所以注意下载合适版本。
- 进入bin目录运行jmeter.bat启动jmeter. jmeter 运行过程中不要关闭这个命令框。
目的:
实现对redis数据库并发访问验证
步骤:
我们是使用thrift 框架来做RPC通信。所以先生成一个java版本的RPCSERVICE 代码。在eclipse建立一个包含jmeter的项目文件。导入rpcservice代码。如下:
* Autogenerated by Thrift Compiler (0.11.0)
*
* DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
* @generated
*/
package com.test.webservice;
@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked", "unused"})
@javax.annotation.Generated(value = "Autogenerated by Thrift Compiler (0.11.0)", date = "2018-04-18")
public class JiRPCService {
public interface Iface {
public java.lang.String SendRequest(java.lang.String requestDatas) throws org.apache.thrift.TException;
}
public interface AsyncIface {
public void SendRequest(java.lang.String requestDatas, org.apache.thrift.async.AsyncMethodCallback<java.lang.String> resultHandler) throws org.apache.thrift.TException;
}
public static class Client extends org.apache.thrift.TServiceClient implements Iface {
public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
public Factory() {}
public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
return new Client(prot);
}
public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
return new Client(iprot, oprot);
}
同时我们建立一个测试类:public class JmeterForRdThriftTest extends AbstractJavaSamplerClient {}
这个里面的核心在public SampleResult runTest(JavaSamplerContext arg0)
具体上代码如下:
public SampleResult runTest(JavaSamplerContext arg0) {
String server_host = arg0.getParameter("server_host");
Integer server_port = arg0.getIntParameter("server_port");
Integer timeout = arg0.getIntParameter("timeout");
String body = arg0.getParameter("body");
String response = null;
SampleResult sr = new SampleResult();
sr.setSampleLabel("we want to listen the host and port");
sr.sampleStart();
TTransport transport = new TSocket(server_host, server_port, timeout);
TProtocol protocol = new TBinaryProtocol(transport);
JiebaoRPCService.Client rpcClient = new JiebaoRPCService.Client(protocol);
try {
transport.open();
response = rpcClient.SendRequest(body);
sr.setResponseData("Test result: pass " +"12"+server_host+server_port+timeout+body+" "+ response, null);
sr.setDataType(SampleResult.TEXT);
sr.setSuccessful(true);
} catch (TException ex) {
sr.setSuccessful(false);
ex.printStackTrace();
} finally {
transport.close();
sr.sampleEnd();
}
return sr;
打包jar文件,并且保存到jmeter对应的jar文件夹。
在jmeter我们创建一个3秒并发5000的任务量。验证读取redis端口。对服务器的影响。