编写jmeter自定义代码

19 篇文章 1 订阅
7 篇文章 1 订阅

        jmeter是基于java开发的开源性能和接口测试工具。它能够满足基于很多协议的接口性能测试,例如http、ftp、tcp等等,但是有些公司自己内部开发一些框架,那么测试基于这些框架开发的接口时就需要通过自定义的方式编写测试代码,下面介绍了如何利用JMeter提供的Java Sampler扩展机制来方便地扩展对新协议的支持。

1、开发脚本前的准备

1)打开Java编译器,新建一个项目TestNumber,然后新建一个包test。

2)从Jmeter的安装目录lib/ext中拷贝两个文件ApacheJMeter_core.jar和ApacheJMeter_java.jar到TestNumber项目中,然后引入这两个JAR包。

3)在test包中新建一个类,类名为TestNum,该类继承AbstractJavaSamplerClient类,AbstractJavaSamplerClient存在于ApacheJMeter_java.jar这个JAR包中,引用即可调用。

 

2、开发自定义的Java Sample包括两个方面:

1)扩展JMeter的类:org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient

2)实现下面的4个方法:

/**必需实现的方法**/
publicSampleResult runTest(JavaSamplerContext context)

/**可选实现的方法**/
public Arguments getDefaultParameters()
public void setupTest(JavaSamplerContext context)
public void teardownTest(JavaSamplerContext context)

runTest方法的返回结果为SampleResult,就是每次调用返回的结果。

getDefaultParameters方法在运行测试的时候,需要用户提供一些输入,这些输入甚至可能是JMeter的变量,这个方法的用处就在于允许用户在测试开始,或者运行期间指定变量的值。

setupTest跟写JUnit测试的setup方法类似,这里主要运行一些针对一个虚拟用户的一次性起始、准备性的操作,比如建立连接的过程在测试阶段可能只需要一次,那么这段建立连接的逻辑可以放在该方法里。

teardownTest与JUnit测试的teardown方法类似,这里主要运行一些针对一个虚拟用户的收尾的操作,比如清除连接等。这里需要注意的是,该方法的调用不是在单个虚拟用户的线程里执行的操作,而是所有虚拟用户在一个线程里顺序执行的。

 

3、实现一个案例

package jmeter;

import com.bj58.spat.cmc.entity.CategoryEntity;

import com.bj58.ads.advuseragent.contract.ICmcProxyService;

import com.bj58.spat.scf.client.SCFInit;

import com.bj58.spat.scf.client.proxy.builder.ProxyFactory;

 

//import static org.hamcrest.CoreMatchers.nullValue;

import org.apache.jmeter.config.Arguments;

import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

import org.apache.jmeter.samplers.SampleResult;

//GetCategoryByID<InfoTransferService>

public class GetCategoryByID extends AbstractJavaSamplerClient {

   private static ICmcProxyService iCmcProxyService

   CategoryEntity resultData=null;

   static long start=0;

   static long end=0;

   int idcateid=0;

   String IADS_SERVICE=null;

   //private SampleResult results;

   //private String a;

   //用于jmeter中获取默认参数

   public Arguments getDefaultParameters() {

       Arguments params=new Arguments();

       params.addArgument("idcateid","4381");

       return params;

   }

   //准备性的操作

   public void setupTest(JavaSamplerContext arg0) { 

       String scf_Config = "E:\\softs\\测试\\性能\\Jmeter\\apache-jmeter-modify-2.13\\apache-jmeter-modify-2.13\\lib\\ext\\scf.config";

       SCFInit.init(scf_Config);

       //SampleResult results=new SampleResult();

       String URL = "tcp://advuseragent/CmcProxyService";

       IADS_SERVICE = "advuseragent";

       iCmcProxyService=ProxyFactory.create(ICmcProxyService.class, URL);

       System.err.println("setupTest");

   }

   //返回测试结果

   public SampleResult runTest(JavaSamplerContext arg0) {

       SampleResult results = new SampleResult();

       results.sampleStart();

      

       try {  

          idcateid=arg0.getIntParameter("idcateid");

          this.resultData = iCmcProxyService.GetCategoryByID(idcateid);

          if (this.resultData!=null) {

              results.setSuccessful(true);

             // System.out.println(resultData);

          }

              else

              results.setSuccessful(false);         

       }catch (Exception e) {

          results.setSuccessful(false);

          e.printStackTrace();

    }finally {

       results.sampleEnd();

        System.err.println("runTest");

    }

       return results;

   }

   //关闭当前连接

   public void teardownTest(JavaSamplerContext arg0) {  

   }

    public static void main(String[] args) {

        Arguments param=new Arguments();

        param.addArgument("idcateid","4381");

        JavaSamplerContext arg0=new JavaSamplerContext(param);

        GetCategoryByID test=new GetCategoryByID();

        test.setupTest(arg0);

        test.runTest(arg0);

        test.teardownTest(arg0);

    }

}

调试没有问题后,将以上脚本导入jar

 

     4jmeter中添加自定义包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值