1. Jmeter常见问题

1.1 Windows下双击%JMETER_HOME%/bin/jmeter.bat时无法启动JMeter

此问题是没有配置Java环境变量JAVA_HOME,下图所示Linux配置环境变量,Windows不介绍,浪费时间。

1.2 请求/响应数据显示乱码

1.2.1 请求数据显示乱码,可在请求中如下设置:

1.2.2 返回数据包含乱码时,可以修改jmeter\bin\jmeter.properties文件中的一个属性:将encoding=后面的编码格式改为utf-8,如下:

1.3 内存OOM(OutOfMemoryError:内存溢出)

1.3.1 内存溢出原因

  1. 测试计划中内容过大: 测试计划中包含大量的线程组、取样器、监听器等元件,占用了大量内存
  2. 大量并发用户:同时运行大量的虚拟用户,占用了大量的内存
  3. 资源泄露:测试中可能存在资源为正确释放的情况,导致内存不断增加
  4. 配置不当:Jmeter的JVM参数配置不当,分配内存不足以支持测试

1.3.2 解决办法

  1. 增加内存: 修改Jmeter启动脚本,增加JVM的内存限制

  2. 减少负载:根据需求适当减少测试计划的负载,包括减少线程数、降低压力等,以减少内存占用

  3. 优化测试计划:优化测试计划,减少元件的数量和复杂度,避免过度占用内存

  4. 检查资源释放:检查测试中是否存在资源未正确释放的情况,及时释放资源以避免内存泄露

  5. 优化JVM参数:根据实际情况调整JVM的参数,如堆大小、垃圾回收策略等,以提高内存利用率和性能

1.4 Listener的使用

用于收集和展示测试结果的组件。Listener可以帮助你查看测试过程中的实时数据,如请求响应时间、吞吐量等,以便于分析测试结果和优化测试策略。JMeter提供了多种内置Listener,也支持自定义Listener

  1. Summary Report:生成测试报告的摘要,包括平均响应时间、平均吞吐量、最小响应时间、最大响应时间等。
    添加方法:在Test Plan中添加Summary Report,选择所需的报告类型(如HTML、CSV、XML等)。
    配置选项:可以根据需要配置报告的保存路径、格式和其他选项。

  2. Graphs:生成各种性能指标的图表,如响应时间、吞吐量等。
    添加方法:在Test Plan中添加Graphs,选择所需的图表类型(如Line、Bar、Pie等)。
    配置选项:可以根据需要配置图表的样式、标签、标题等。

  3. Table Data:以表格形式展示测试结果,便于查看单个请求的详细信息。
    添加方法:在Test Plan中添加Table Data,选择所需的表格样式(如Grid、List等)。
    配置选项:可以根据需要配置表格的列名、数据范围等。

  4. HTML Report:生成一个完整的HTML报告,包含测试结果、图表和其他相关信息。
    添加方法:在Test Plan中添加HTML Report,选择所需的报告类型(如PDF、RTF、Word等)。
    配置选项:可以根据需要配置报告的保存路径、样式、主题等。

  5. 自定义Listener:根据需求编写自定义的逻辑来收集和处理测试结果。通常需要实现org.apache.jmeter.testelement.TestElement和org.apache.jmeter.reporters.TestReporter接口。
    自定义添加插件

1.5 Jmeter分布式

在使用Jmeter进行接口的性能测试时,由于Jmeter 是JAVA应用,对于CPU和内存的消耗比较大,所以,当需要模拟数以万计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误。为了让jmeter工具提供更大的负载能力,这时可以使用Jmeter提供的分布式功能来启动多台电脑来分压测试。

  1. JMeter分布式原理:
    1)Jmeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent);
    2)执行时,Controller会把脚本发送到每台Agent上,Agent 拿到脚本后开始执行,Agent执行时不需要启动Jmeter,只需要把jmeter-server.bat文件打开,它应该是通过命令行模式来执行的;
    3)执行后,Agent会把结果回传给Controller,Controller会收集所有Agent的信息并汇总。
  2. 代理机(Agent)配置:
    1)Agent机上需要安装JDK、Jmeter,并且配置好环境变量;
    2)打开“运行”,输入"cmd",打开运行面板,输入“ipconfig”,找到IP地址,例如是:192.168.8.149;

3)打开Jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把这一行修改为”remote_hosts=192.168.8.149:1099,1099是端口号,可以随意自定义;
4) 打开jmeter-server.bat文件,就设置完成了,等待控制机(Controller)启动。
3. 控制机(Controller)配置
1)Controller机上需要安装JDK、Jmeter,并且配置好环境变量;
2)打开“运行”,输入"cmd",打开运行面板,输入“ipconfig”,找到IP地址,例如是:192.168.8.174;

3)打开Jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把这一行修改为”remote_hosts=192.168.8.149:1099,192.168.8.174:1099,1099是端口号,可以随意自定义。如果有多台代理机,这里需要把所有的代理机的IP地址和端口号都加入进来;

4)打开jmeter-server.bat文件,设置完成了。
4. 开始添加线程组和请求来运行查看结果
1)打开jmeter.bat文件,添加线程组,编辑线程数,这里设置100个线程数,循环2次,就是一台机器发送100*2=200个请求;

2)添加http请求

3)添加察看结果数和聚合报告,点击运行,可以选择远程启动或者远程全部启动,如果是点击远程启动,可以选择任意一台电脑来运行,如果是点击远程全部启动就会运行控制机和所有的代理机;

4)这里以点击远程全部启动为例。运行结束后,查看聚合报告,每台电脑设置的线程数为200,这里一共是两台电脑,所以是200*2=400个线程数。