使用Jmeter进行RPC压力测试
linux-dash
A beautiful web dashboard for Linux
项目地址:https://gitcode.com/gh_mirrors/li/linux-dash
免费下载资源
·
使用Jmeter进行RPC压力测试
为了支持相关部门进行RPC协议的压测,初步了解了Jmeter如何使用java请求进行压测。
一、 下载Jmeter,进行解压即可使用,适用于windows和linux。用的版本为apache-jmeter-3.2
二、需要创建可用的java工程。
使用Java sample进行压测,需要创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写:
- public Arguments getDefaultParameters():设置可用参数的默认值;
- public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
- public SampleResult runTest(JavaSamplerContext
arg0):开始测试,从arg0参数可以获得参数值; - public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
接口压测的主要测试代码如下所示,main函数是方便调试代码。motan的配置放在了setupTest中。 为了使用Jmeter进行测试在工程中添加本地依赖,依赖JMeter的lib目录下的jar文件ApacheJMeter_core.jar,ApacheJMeter_java.jar和jorphan.jar
public class PerformenceTest extends Abstract JavaSamplerClient {
private static AlgFeedServiceMotan algFeedServiceMotan=null;
private Logger log = getLogger();
// 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
@Override
public void setupTest(JavaSamplerContext arg0){
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[] { "classpath:my.xml" });
algFeedServiceMotan = (AlgFeedServiceMotan) ctx.getBean("algFeedServiceRefer");
log.info("---- 启动线程 ----");
}
// 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
@Override
public void teardownTest(JavaSamplerContext arg0){
log.info("---- 结束线程 ----");;
}
// 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
@Override
public Arguments getDefaultParameters() {
Arguments args = new Arguments();
return args;
}
// 测试执行的循环体,根据线程数和循环次数的不同可执行多次
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
String ruids="xxxxx";
next = random.nextInt(22);
String[] uids={"yyyyy"};
SampleResult sampleResult = new SampleResult();
boolean success = true;
try {
sampleResult.sampleStart();
String str_uids = javaSamplerContext.getParameter("ruids");
String str_fids = javaSamplerContext.getParameter("uids");
RankedWeibo rankedWeibo = algFeedServiceMotan.rank(0,"fenzuxxx",ruids,uids);
if(rankedWeibo != null && rankedWeibo.getData() != null && 0 == rankedWeibo.getCode()){
success = true;
}else {
success = false;
}
} catch (Throwable e) {
success = false;
e.printStackTrace();
log.info(e.getMessage());
} finally {
sampleResult.sampleEnd(); // jmeter 结束统计响应时间标记
sampleResult.setSuccessful(success);
}
return sampleResult;
}
//Jmeter不执行main函数。
public static void main(String[] args) {
Arguments params = new Arguments();
params.addArgument("ruids", "xxxxx");//设置参数,并赋予默认值
params.addArgument("uids", "xxxx,xxx,xx");//设置参数,并赋予默认值
JavaSamplerContext arg0 = new JavaSamplerContext(params);
PerformenceTest test = new PerformenceTest();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
System.exit(0);
}}
二、工程建好后。需要打成jar包供Jmeter调用
一般情况可以将工程直接打包为可执行文件,再将jar包放在Jemter文件的JMETER_HOME\lib\ext目录即可。方法如下
- 直接Export为Runnable Jar File(eclipse和InteliJ IDEA方法各异)
- 在pom文件中使用插件打包
a.使用maven-assembly-plugin打包成独立可执行的jar包。可以将java工程及其全部依赖jar进行打包
工程一般依赖了很多的jar包,而被依赖的jar又会依赖其他的jar包,这样,当工程中依赖到不同的版本的spring时,在使用assembly进行打包时,
只能将某一个版本jar包下的spring.schemas文件放入最终打出的jar包里,这就有可能遗漏了一些版本的xsd的本地映射,导致报错。
b.使用maven-shade-plugin可以解决这个问题,它能够将所有jar里的spring.schemas文件 进行合并,在最终生成的单一jar包里,spring.schemas包含了所有出现过的版本的集合。
那些资源要单独打此类配置文件,需要和开发沟通。
c.由于打成可执行jar包,配置motan服务时总有冲突出现。压测时也可以采用maven-jar-plugin将工程打包(工程依赖的jar包不会一起打入)
采用maven-dependency-plugin进行依赖。maven-jar-plugin会将工程依赖的所有jar包放在target/lib 文件中。
打包完成后,将jar包和lib文件一起放入JMETER_HOME\lib\ext目录即可。
另外在打包时需要将外部包ApacheJMeter_core.jar,ApacheJMeter_java.jar和jorphan.jar加入,打包时才不会报错。
a.这里我采用手动mvn install到本地仓库,然后进行引用。版本名称如下,并在pom中引入
<dependency>
<groupId>org.ApacheJmeterCore</groupId>
<artifactId>ApacheJmeterCore</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.ApacheJmeterJava</groupId>
<artifactId>ApacheJmeterJava</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.jorphan</groupId>
<artifactId>jorphan</artifactId>
<version>1.0</version>
</dependency>
b.在工程中新建文件夹lib,放入外部引用的这三个jar包。依赖本地
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ApacheJMeter_java.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ApacheJMeter_core.jar</systemPath>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>jorphan</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/logkit-2.0.jar</systemPath>
</dependency>
三、在Jmeter文件夹bin文件夹下打开Jmeter
创建线程组、Java Request、结果树,进行测试;
在线程组中右键选择Sampler->java 请求,类名称中出现自己写的类,即打包成功可进行调用压测。
GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e
added ecosystem file for PM2 4 年前
5def40a3
Add host customization support for the NodeJS version 4 年前
更多推荐
已为社区贡献1条内容
所有评论(0)