JMeterJavaSampler简介我们通常使用jmeter来测试http或者https请求,但是有些场景需要直接调用Java接口进行性能测试,jmeter通过Java请求这个需求可以实现(可以处理一些公司定义的协议,开发提供协议接口,然后我们通过javasampler调用)。本文将详细介绍如何在jmeter中编写java请求并调用!添加Java请求Java请求如下:上图中的com.my.demo.JmeterDemo2就是我们需要调用的Java类;str就是我们需要传入的参数。那么如何在Jmeter中实现对java请求的调用呢?我将在这篇文章中详细解释!设计Java请求思路及代码分析InheritAbstractJavaSamplerClient;2.在publicSampleResultrunTest(JavaSamplerContextarg0)方法中,编写处理java代码的逻辑;3.在publicArgumentsgetDefaultParameters()方法中定义jmeter中java代码传入的参数;4.打类Demo创建一个jar包,放在jmeter的\lib\ext目录下(如果Demo需要依赖其他jar包,需要一起放在\lib\ext目录下)例子代码如下:.JavaSamplerContext;importorg.apache.jmeter.samplers.SampleResult;(){Argumentsparams=newArguments();params.addArgument("str","");returnparams;}publicSampleResultrunTest(JavaSamplerContextarg0){this.sr.setSampleLabel("commonsio-demo2");try{Stringstr=arg0.getParameter(“段");//使用jar包中StringUtils类的countMatches方法统计字符串a的个数intnum=StringUtils.countMatches(str,"a");if(num==0){this.sr.setResponseMessage("ResponseMessage:parametermatches0");//Responsemessagethis.sr.setResponseData("ResponseData:parametermatches0"inSampleResult","UTF-8");//ResponseData的值会被this覆盖.sr.setSuccessful(true);//SampleResult中的结果}else{this.sr.setResponseMessage("ResponseMessage:参数匹配"+num+"");this.sr.setResponseData("ResponseData:参数匹配"+num+"","UTF-8");this.sr.setSuccessful(false);}}catch(Exceptione){this.sr.setResponseMessage(e.getMessage().toString());this.sr.setSuccessful(false);}最后{//this.sr.setResponseData("结束测试","UTF-8");super.getNewLogger().info("####测试执行####");try{Thread.sleep(500);}catch(InterruptedExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}returnthis.sr;}publicvoidsetupTest(JavaSamplerContextcontext){超集upTest(context);super.getNewLogger().info("####TestStart####");this.sr=newSampleResult();this.sr.sampleStart();}publicvoidteardownTest(JavaSamplerContextcontext){super.teardownTest(context);this.sr.sampleEnd();super.getNewLogger().info("####TestEnd####");}}下面对上面的代码进行详细分析:主要使用的方法如下:方法执行顺序为:getDefaultParameters()-->setupTest(JavaSamplerContextcontext)-->runTest(JavaSamplerContextcontext)-->teardownTest(JavaSamplerContextcontext)代码运行后,日志结果如下,参数para对应代码Stringstr=arg0.getParameter("para");从日志中我们可以看到setupTest(JavaSamplerContextcontext)中的代码执行了一次,####teststart####teardownTest(JavaSamplerContextcontext)中的代码打印了Executed1次,打印####测试结束####和方法super.getNewLogger().info("####testexecution####");在runTest中执行了5次,因为在线程组中,设置了执行5次(线程组中线程执行次数的多少影响了java请求中的runTest,但不影响setupTest和teardownTest)。super.getNewLogger().info("")方法会将值写入日志。setResponseMessage("ResponseMessage:参数匹配0");打印到SampleResult中的Response消息;setSampleLabel("commonsio-demo2");设置java请求的显示名称,如下图:setResponseData("ResponseData:parametersmatch0","UTF-8");打印到ResponseData,如下图所示:最后setSuccessful(true)方法会影响测试结果。在IDE中开发JmeterJava的要求在IDE中开发JmeterJava的要求和普通的java开发是一致的,引入需要java包和jmeter相关的jar包就够了,ApacheJMeter_core.jar和ApacheJMeter_java.jarJmeter下的lib\ext都引入到IDE中了!
