使用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包打不进去也没关系
2.将我们在这个函数里用到的所有jar包放入apache-jmeter-2.13\lib\ext这个路径下,注意不要与已经存在的冲突,比如httpclient需要使用lib下已经存在的jar包
导入后是这样的
3.进入jmeter新建一个java请求
看到我们新建的脚本和传入的参数
添加几个监听器,来帮助分析性能瓶颈,这个就不多说了
4.错误分析与日志
在jmeterGUI上可以看到我们的一些错误信息,方便我们调试脚本,
JMeter.log目录在bin下面,也可以通过jmeter.properties修改路径