前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过Jmeter压测

通过Jmeter压测

原创
作者头像
用户2422633
修改2020-06-02 10:28:49
1.3K0
修改2020-06-02 10:28:49
举报
文章被收录于专栏:jmeterjmeter

最近因为要对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 检查两分钟内的交易

已经成功了。。。

单笔成功了,后面可以调整并发数,来进行我们需求的压测

源码下载JmeterTestCases.zip

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档