使用JMeter的自定义脚本进行性能测试

0x01 为什么使用自定义脚本

当我们在使用jmeter来进行性能测试的时候,经常发现提供的sample无法满足我们的需求,

比如http header里面的鉴权进行了特殊的加密,我们如果使用现成的sample就无法实现,索性jmeter提供了自定义脚本来给我们自由实现各种需求。

0x02 新建一个例子

1.新建一个项目

2.导入jmeter的2个jar包,"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar,路径为apache-jmeter-2.13\lib\ext,方便调试(其实不导入也无所谓,最后打包的时候也不会打进去)

3.在项目中新建一个类,继承于类AbstractJavaSamplerClient,同时也会继承该类的4个方法

分别是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法

setupTest:初始化方法

teardownTest:测试结束方法,用于结束性能测试中的每个线程

runTest:方法为性能测试时的线程运行体

getDefaultParameters:方法主要用于设置传入的参数

public class UserLoginTest extends AbstractJavaSamplerClient  {

      public void setupTest(JavaSamplerContext arg0){  
                system.out.print("setup");
      }

      public void teardownTest(JavaSamplerContext arg0){  
                system.out.print("teardown");
      }

      public Arguments getDefaultParameters() {  
                Arguments params = new Arguments();  
                params.addArgument("url", url);
                params.addArgument("uri", "/Login"); 
                params.addArgument("request_type", "POST"); 
       }

      @Override  
       public SampleResult runTest(JavaSamplerContext context) {  
       }
}
 

runTest中有几个重要的函数

//实例化result类
SampleResult result;  
rresult = new SampleResult();  
//定义该脚本名
result.setSampleLabel(label);
//定义一个事务,该点为事务起点
result.sampleStart();
//插入一个事务
httpclient.sendRequest();
//定义一个事务,该点为事务重点
result.sampleEnd();

0x03 将完成的脚本导入jmeter

1.将函数打包成jar文件,jar包打不进去也没关系

image

image

2.将我们在这个函数里用到的所有jar包放入apache-jmeter-2.13\lib\ext这个路径下,注意不要与已经存在的冲突,比如httpclient需要使用lib下已经存在的jar包

 

image

 

导入后是这样的

image

3.进入jmeter新建一个java请求

image

看到我们新建的脚本和传入的参数

image

添加几个监听器,来帮助分析性能瓶颈,这个就不多说了

 

4.错误分析与日志

在jmeterGUI上可以看到我们的一些错误信息,方便我们调试脚本,

JMeter.log目录在bin下面,也可以通过jmeter.properties修改路径

image

posted on 2016-05-21 15:39  风之叹息  阅读(1103)  评论(0编辑  收藏  举报

导航