如何使用Jmeter进行Thrift服务的压力测试?

2026-06-10 06:482阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计804个文字,预计阅读时间需要4分钟。

如何使用Jmeter进行Thrift服务的压力测试?

下载Apache JMeter 4.0版本,遇到问题时添加以下pom依赖:

xml org.apache.thrift libthrift 0.10.0 org.apache.jmeter


下载

用apache-jmeter-4.0版本,5的版本我用的时候有点问题

加入pom

<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.10.0</version>
</dependency>

<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>4.0</version>
</dependency>

编写测试类

看个大概,以后写详细的例子

public class TestThriftByJmeter extends AbstractJavaSamplerClient {

private BaseSentimentServiceHelper baseSentimentServiceHelper;

/**
* 初始化方法,每个线程都会执行一次
* @param context
*/
@Override
public void setupTest(JavaSamplerContext context) {
String ip = context.getParameter("ip");
String port = context.getParameter("port");
baseSentimentServiceHelper = new BaseSentimentServiceHelper();
baseSentimentServiceHelper.setHost(ip);
baseSentimentServiceHelper.setPort(Integer.valueOf(port));
super.setupTest(context);
}

/**
* 设置参数
* @return
*/
@Override
public Arguments getDefaultParameters() {
Arguments arguments = new Arguments();
arguments.addArgument("ip", "mt011");
arguments.addArgument("port", "60000");
arguments.addArgument("total", "100");
return arguments;
}

/**
* 运行测试方法
* @param javaSamplerContext
* @return
*/
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult sampleResult = new SampleResult();
sampleResult.setDataEncoding("utf-8");
sampleResult.sampleStart();
int total = Integer.valueOf(javaSamplerContext.getParameter("total"));

Map<String, Object> map = new HashMap<>();
List<Content> contentList = new ArrayList<>();
for (int i = 0; i < total; i++) {
Content content = new Content();
content.setMid(String.valueOf(i));
content.setText("情感确实曼妙。有时机遇恰巧会眷顾了爱情。在擦肩而过的人群中谁能与你并肩同行;谁能理会同你一道上船、驶往爱的彼岸。在滚滚红尘中,只有俩厢情愿,情投意合,才能算是一见钟情,顺理成章。");
contentList.add(content);
}
map.put("data", contentList);
long begin = System.currentTimeMillis();
String result = baseSentimentServiceHelper.getSentiInfo(JsonUtil.obj2String(map));
long cost = System.currentTimeMillis() - begin;
System.out.println("cost " + cost);
if (result.equals("")) {
sampleResult.setSuccessful(false);
sampleResult.setDataType(SampleResult.TEXT);
} else {
sampleResult.setSuccessful(true);
sampleResult.setDataType(SampleResult.TEXT);
}
sampleResult.sampleEnd();
return sampleResult;
}


/**
* 完成测试
* @param context
*/
@Override
public void teardownTest(JavaSamplerContext context) {
super.teardownTest(context);
}

/**
* 这个是本地跑用的,执行测试类的时候,并不执行这个方法
* @param args
*/
public static void main(String[] args) {
Arguments arguments = new Arguments();
arguments.addArgument("ip", "mt011");
arguments.addArgument("port", "60000");
arguments.addArgument("total", "100");
JavaSamplerContext context = new JavaSamplerContext(arguments);
TestThriftByJmeter jmeter = new TestThriftByJmeter();
jmeter.setupTest(context);
jmeter.runTest(context);
jmeter.teardownTest(context);
}

}

测试

将测试类放在apache-jmeter-4.0\lib\ext目录下面,
导出工程的依赖

mvn dependency:copy-dependencies -DoutputDirectory=lib

将依赖放在apache-jmeter-4.0\lib目录下

将Jmeter设置为中文

在apache-jmeter-4.0\bin目录下找到jmeter.properties,将language设置为如下形式

language=zh_CN

运行

点击apache-jmeter-4.0\bin下面的jmeter.bat,即可启动

点点配置成如下形式即可


18个线程,每个线程运行30次

如何使用Jmeter进行Thrift服务的压力测试?


写好的测试类,一些参数可以设置


统计的页面


统计之后的结果

各种参数的含义,参考参考博客[2]



本文共计804个文字,预计阅读时间需要4分钟。

如何使用Jmeter进行Thrift服务的压力测试?

下载Apache JMeter 4.0版本,遇到问题时添加以下pom依赖:

xml org.apache.thrift libthrift 0.10.0 org.apache.jmeter


下载

用apache-jmeter-4.0版本,5的版本我用的时候有点问题

加入pom

<dependency>
<groupId>org.apache.thrift</groupId>
<artifactId>libthrift</artifactId>
<version>0.10.0</version>
</dependency>

<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>4.0</version>
</dependency>

编写测试类

看个大概,以后写详细的例子

public class TestThriftByJmeter extends AbstractJavaSamplerClient {

private BaseSentimentServiceHelper baseSentimentServiceHelper;

/**
* 初始化方法,每个线程都会执行一次
* @param context
*/
@Override
public void setupTest(JavaSamplerContext context) {
String ip = context.getParameter("ip");
String port = context.getParameter("port");
baseSentimentServiceHelper = new BaseSentimentServiceHelper();
baseSentimentServiceHelper.setHost(ip);
baseSentimentServiceHelper.setPort(Integer.valueOf(port));
super.setupTest(context);
}

/**
* 设置参数
* @return
*/
@Override
public Arguments getDefaultParameters() {
Arguments arguments = new Arguments();
arguments.addArgument("ip", "mt011");
arguments.addArgument("port", "60000");
arguments.addArgument("total", "100");
return arguments;
}

/**
* 运行测试方法
* @param javaSamplerContext
* @return
*/
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult sampleResult = new SampleResult();
sampleResult.setDataEncoding("utf-8");
sampleResult.sampleStart();
int total = Integer.valueOf(javaSamplerContext.getParameter("total"));

Map<String, Object> map = new HashMap<>();
List<Content> contentList = new ArrayList<>();
for (int i = 0; i < total; i++) {
Content content = new Content();
content.setMid(String.valueOf(i));
content.setText("情感确实曼妙。有时机遇恰巧会眷顾了爱情。在擦肩而过的人群中谁能与你并肩同行;谁能理会同你一道上船、驶往爱的彼岸。在滚滚红尘中,只有俩厢情愿,情投意合,才能算是一见钟情,顺理成章。");
contentList.add(content);
}
map.put("data", contentList);
long begin = System.currentTimeMillis();
String result = baseSentimentServiceHelper.getSentiInfo(JsonUtil.obj2String(map));
long cost = System.currentTimeMillis() - begin;
System.out.println("cost " + cost);
if (result.equals("")) {
sampleResult.setSuccessful(false);
sampleResult.setDataType(SampleResult.TEXT);
} else {
sampleResult.setSuccessful(true);
sampleResult.setDataType(SampleResult.TEXT);
}
sampleResult.sampleEnd();
return sampleResult;
}


/**
* 完成测试
* @param context
*/
@Override
public void teardownTest(JavaSamplerContext context) {
super.teardownTest(context);
}

/**
* 这个是本地跑用的,执行测试类的时候,并不执行这个方法
* @param args
*/
public static void main(String[] args) {
Arguments arguments = new Arguments();
arguments.addArgument("ip", "mt011");
arguments.addArgument("port", "60000");
arguments.addArgument("total", "100");
JavaSamplerContext context = new JavaSamplerContext(arguments);
TestThriftByJmeter jmeter = new TestThriftByJmeter();
jmeter.setupTest(context);
jmeter.runTest(context);
jmeter.teardownTest(context);
}

}

测试

将测试类放在apache-jmeter-4.0\lib\ext目录下面,
导出工程的依赖

mvn dependency:copy-dependencies -DoutputDirectory=lib

将依赖放在apache-jmeter-4.0\lib目录下

将Jmeter设置为中文

在apache-jmeter-4.0\bin目录下找到jmeter.properties,将language设置为如下形式

language=zh_CN

运行

点击apache-jmeter-4.0\bin下面的jmeter.bat,即可启动

点点配置成如下形式即可


18个线程,每个线程运行30次

如何使用Jmeter进行Thrift服务的压力测试?


写好的测试类,一些参数可以设置


统计的页面


统计之后的结果

各种参数的含义,参考参考博客[2]