JMeter 使用笔记

安装配置

安装配置

需要安装Java,尽量使用Java SE 8以上的版本。添加把JRE和JDK添加到环境变量中。

JMeter安装

JMeter官网下载相关版本的JMeter链接,直接解压即可。注意要把JMeter的根目录添加到环境变量JMETER_HOME中,之后集群测试会使用到。

单机测试

单机测试主要分为两个大的步骤,一个是添加线程组和Http请求,另一个就是添加Listener来查看测试结果,网络上有很多现成的教程,这里就不再赘述。

集群测试

集群测试很简单,只要把Slave机器部署好,Master会把测试脚本发送给Slave进行测试,部署过程也可以参考这篇文章。具体部署步骤如下:

  1. 在每台Slave上都安装配置好单机环境

  2. 在Slave上修改$JMETER_HOME/bin/jmeter.properties文件,主要修改以下几部分(1099为JMeter服务器默认端口)

    1
    2
    3
    server_port=1099
    server.rmi.localport=1099
    server.rmi.ssl.disable=true
  3. 在Master上修改$JMETER_HOME/bin/jmeter.properties文件,主要修改以下几部分,如果想要在Master上也运行测试程序的话,可以把以上Slave的配置也加到Master里,并且在remote_hosts中添加localhost:1099的项

    1
    2
    # 10.0.0.X为Slave的IP
    remote_hosts=10.0.0.1:1099,10.0.0.2:1099

完成了以上工作,在Master上启动测试程序(运行->远程启动所有)即可开始集群测试。这种模式下有一个非常大的缺点,就是各个Slave的测试结果会实时发送到Master上,对Master的网络和CPU都造成了很大的压力,如果能够积累一定的数据之后批量发送会好很多。也可能是我没有找到正确的使用方法,如果有解决方案,还请不吝告知。

常见问题

Http Post请求该怎么发

Post请求的Body在编程语言层面有很多的叫法,什么Payload、Data、Params、KWargs之类,在JMeter的Http请求界面,选中Method为POST之后,下边的参数栏有三个Tab,分别是Parameters、Body Data以及Files Upload,因为在GET请求时是使用的Parameters,所以这里一上来就往Body Data里填数据。但是当Content-Type为multipart/form-data,并且同时发送参数和文件的时候,在Body Data里填写的参数会被Files Upload的内容覆盖掉。所以至少在这种情况下需要把请求体中的参数填到Parameters栏里。

在其他Content-Type中尚未见到这种限制,比如application/json时就可以直接把Json对象填入到Body Data中。

表单请求无法正常发送

当Content-Type为multipart/form-data,并且同时发送参数和文件的时候,可能请求无法成功发出去,如果其他工具(比如Postman)可以正常发送请求,那么应该是JMeter实现的问题,在Http请求的Advanced标签中把Client implementation换成Java即可解决这个问题。

集群运行时报找不到rmi_keystore.jks错误

因为JMeter集群在运行时默认会开启SSL,所以需要额外进行SSL的配置,如果想要跳过SSL直接使用,需要在jmeter.properties中设置以下内容

1
server.rmi.ssl.disable=true