阅读本文大约需要10分钟
JMeter提供了多种取样器,包括HTTP请求,Bean Shell Sampler, JDBC Request……可以支持大部分的请求。除此之外,如果公司使用了自定义的接口协议,JMeter依然可以强大地支持。JMeter提供了自定义Java请求,通过选择自定义指定类型的Java类,以及填写指定的入参,便可以调用指定协议的Java请求。
下面开始介绍如何编写自定义的Java Sampler类。
新建工程
使用IDEA(或Eclipse)新建一个maven工程, pom.xml文件中引入ApacheJMeter_core和ApacheJMeter_java包,如果自己的接口协议包包含了与ApacheJMeter共用的包,需要将其排除。如:
1 | <dependency> |
代码编写
新建JavaSampler类实现JavaSamplerClient类,并实现未实现的方法。
1.getDefaultParameters
1 | //设置默认参数 |
此方法设置入参变量名及默认值,设置之后,会自动加载到JMeter GUI的参数列表中。
2.setupTest
1 | //初始化运行数据 |
相当于Junit或TestNg中的@BeforeClass,在执行方法之前,先初始化线程的公用部分,每个线程都只执行一次。
3.runTest
1 | //执行测试主体 |
性能测试的线程运行体,测试执行主体,从入参javaSamplerContext中获取参数值,并在
sampleResult.sampleStart();与sampleResult.sampleEnd();
之间编写调用被测方法的代码,完成与服务器的交互。该方法是java Sampler实现的重点,执行次数取决于线程数和循环次数。
4.teardownTest
1 | //结束清理 |
相当于Junit或TestNg中的@AfterClass,测试主体执行结束之后,运行该方法,可根据需要编写代码。
5.本地调试的main方法
1 | public static void main(String[] args) { |
直接在main方法上调用自定义的JavaSampler类,省去打jar包,重启JMeter等时间。
打jar包
1.File>Project Structure>Project Settings>Artifacts> + > Jar >Empty > + Module Output > OK
2.Build>Build Artifacts…>选择上一步配置的jar名称>Build
3.打包结束后,在out\artifacts目录下可以找到jar包,
如%PROJECT_PATH%\out\artifacts\jmeter_plugin_jar。
JMeter运行
1.放jar包:将上一步打好的jar包放在%JMETER_HOME%\lib\ext路径下【不能建子目录】,如果依赖的第三方jar包,且%JMETER_HOME%\lib下未找到的,需要将其放在%JMETER_HOME%\lib目录下,若已存在相同的包但版本号不同,保留高版本的jar包,因为优秀的jar包都是向下兼容的。若觉得都统一放在已有的两个文件夹根目录下,有点杂乱,可以参考 JMeter扩展jar包与依赖jar包一文,配置自定义的路径。
2.重启JMeter:切记,新增加或修改jar包,需要重启JMeter才能生效。
3.新建Java请求:参数列表填写参数,点击运行,查看结果
常见问题解决
1.Java请求中,下拉类名称,找不到新增的JavaSampler
确保main函数能够调试通过,检查jar包地址配置是否正确,是否已经重启JMeter。
2.自定义Java Sampler运行后,请求部分显示”No data to display”
SampleResult需要设置SamplerData信息,代码如“sampleResult.setSamplerData(“请求信息”); ” 。
注:红框中“取样器结果”,“请求”,“响应数据”三者的内容一般都可以通过SampleResult来设置,可以自行查看都提供了哪些方法。