最近因为要对fo-processor进行性能压测,总结一下中间使用Jmeter构建自定义mdp消息的步骤及压测步骤,
在Jmeter中,有jms的请求样例,或者你自己也可以写一个beanshell(实际上就是java语言)来做一些校验类的工作
对于系统的if-mdp,需要自定义请求。
核心步骤:
创建Java工程–> 导出自定义测试jar-->放到Jmeter的lib目录及lib\ext下-->开始测试
1、下载Jmeter,http://jmeter.apache.org/download_jmeter.cgi,我这里使用的Jmeter2.13
2、在Eclipse创建一个自定义Java工程,如图,是我创建好的一个截图:
3、引入jar包
需要从Jmeter引入的jar包,在${JMETER_HOME}/lib,${JMETER_HOME}/lib/ext
ApacheJMeter_core.jar,ApacheJMeter_java.jar,geronimo-jms_1.1_spec-1.1.1.jar,slf4j-api-1.7.10.jar,slf4j-nop-1.7.10.jar
需要额外引入的jar包,涉及到业务的定制的一些
commons-lang-2.4.jar,commons-logging-1.2.jar,f
o-inner-settlement-4.3.54.7.jar,fo-inner-settlement-api-4.3.44.4.jar,fo-processor-api-4.3.57.2.jar,
if-mdp.jar,jackson-all-1.9.2.jar,spring-2.5.5.jar,tibjms-6.0.1.jar(如果是其他JMS服务器,需要更换,比如activemq,就是替换成activemq-all.jar)
4、因为我这次的交易涉及到920(提现),925(付款到银行),所以需要在压测的时候有一个可配参数,去确定到底压测哪个交易,看代码
public class InnerSettlementTest extends AbstractJavaSamplerClient 如果要进行自定义java请求的话,必须继承这个AbstractJavaSamplerClient抽象类
关键的几个方法:
getDefaultParameters() 如果要进行自定义参数的话,比如需求里,我需要有的时候设置925,有的时候设置920,这时候就需要这个方法
@Override
public Arguments getDefaultParameters() {
//需要传哪些参数,会显示在Jmeter上
Arguments args = new Arguments();
args.addArgument("SettleType", "920");
args.addArgument("Amount","1000");
return args;
}
runTest(JavaSamplerContext context) Jmeter会运行这个,自定义的方法,就在这里,重点见加粗加红的部分
public SampleResult runTest(JavaSamplerContext context) {
SampleResult sr = new SampleResult();
sr.setSampleLabel("InnerSettlementTest");
int settletype = 0;
long amount = 0;
try {
settletype=Integer.parseInt(context.getParameter("SettleType"));
amount = Long.parseLong(context.getParameter("Amount"));
sr.sampleStart(); // 这个位置很重要,响应时间是从这里开始计算
RemsInnerSettleRequestDto dto = InnerSettlementDtoFactory.getInnerSettleRequestDto(amount, settletype);//每次请求都会创建一个新的dto
RemsInnerSettleResponseDto rsp = remsInnerSettleService.innerSettle(dto);//发送消息到tibco
if("0000".equals(rsp.getErrorCode())){
sr.setSuccessful(true);//什么时候成功,什么时候失败,根据业务来定
}
else{
sr.setSuccessful(false);
}
} catch (Exception e) {
sr.setSuccessful(false);
e.printStackTrace();
}finally{
sr.sampleEnd();//位置很重要,表示这一个样例跑完了,花了多久,Jmeter会统计
}
return sr;
}
InnerSettlementDtoFactory这个类就不展现了,就是一个普通的工厂类,根据settletype和amount来产生一个新的请求对象
5、导出jar,Eclipse的Export就可以,不详述,我这里导出的是innersettlement-java-jmeter.jar这个名字
6、将innersettlement-java-jmeter.jar放到${JMETER_HOME}/lib/ext下,其他关联的jar放到 ${JMETER_HOME}/lib
7、重新运行Jmeter,测试自定义的请求
再创建一个监听,来监测吞吐量以及成功率,还有响应时间,我这里使用的是Aggregate Report
运行一次,得到如下结果:
可以看出,发了一个请求,718毫秒响应,成功1个,失败0个
检查一下数据库,
select * from fundout.withdrawworkorder where requestdate > sysdate - 2/24/60 检查两分钟内的交易
已经成功了。。。
单笔成功了,后面可以调整并发数,来进行我们需求的压测
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。