压测神器:JMeter入门指南

509 阅读7分钟

压测神器:JMeter入门指南

本文为 JMeter 入门指南,介绍了使用 JMeter 进行性能测试的基本步骤,包括创建测试计划、添加线程组、添加 HTTP 请求、配置 HTTP 请求、添加监听器、运行测试等。同时,还介绍了如何安装和启动 JMeter,如何创建线程组、如何在创建线程组中添加 HTTP 请求,如何配置 HTTP 请求头等。此外,本文还介绍了如何使用命令行启动测试,如何使用断言、CSV 数据文件、定时器等功能,以及如何进行分布式测试和监控服务器资源等高级操作。

核心步骤

使用 Apache JMeter 做 HTTP 接口的压测通常需要以下步骤:

  1. 安装和启动 JMeter:从 JMeter 官方网站下载并安装 JMeter。安装完成后,启动 JMeter。
  2. 创建测试计划:在 JMeter 中创建一个新的测试计划,这个测试计划将包含所有的测试元素和配置。可以通过右键点击“Test Plan”并选择“Add”来添加需要的配置元素。
  3. 添加线程组:在测试计划中添加一个线程组,线程组是一组模拟用户,每个用户都将执行指定的测试场景。可以通过右键点击测试计划并选择“Add”来添加线程组。
  4. 添加 HTTP 请求:在线程组中添加 HTTP 请求元素,这个元素用于发送 HTTP 请求并接收 HTTP 响应。可以通过右键点击线程组并选择“Add”来添加 HTTP 请求元素。
  5. 配置 HTTP 请求:在 HTTP 请求元素中设置请求的 URL、请求方法(如 GET、POST、PUT 等)、请求头、请求参数等。此外,还可以设置请求的超时时间、并发用户数等参数。
  6. 添加监听器:添加一个或多个监听器,用于收集和显示测试结果。例如,可以添加“View Results Tree”监听器,用于查看 HTTP 请求和响应的详细信息,或者添加“Summary Report”监听器,用于查看测试的摘要信息。
  7. 运行测试:保存测试计划并运行测试。可以通过点击工具栏上的“Start”按钮来开始测试,测试完成后可以查看测试结果并进行分析。

安装和启动 JMeter

在 macOS 上下载和安装 JMeter:

  1. 打开浏览器并访问 JMeter 的官方网站(jmeter.apache.org/)。
  2. 在主页上找到“Download”(下载)菜单,然后选择“Binaries”(二进制文件)子菜单。
  3. 在“Binaries”页面上,找到最新版本的 JMeter 的下载链接,然后选择“apache-jmeter-X.XX.zip”(其中 X.XX 代表版本号)进行下载。
  4. 下载完成后,解压缩压缩包,将解压后的 JMeter 文件夹移动到您想要放置的目录中(例如,/Applications/ 目录)。
  5. 打开终端(Terminal)应用程序,并输入以下命令,将 JMeter 添加到您的 PATH 环境变量中:
echo 'export PATH="$PATH:/path/to/jmeter/bin"' >> ~/.bash_profile source ~/.bash_profile

请将“/path/to/jmeter/bin”替换为您实际的 JMeter 文件夹路径。

可以通过在终端中输入“jmeter”命令来启动 JMeter。也可以从 Finder 中打开 JMeter 文件夹,并双击“jmeter”应用程序来打开 JMeter。

创建线程组

创建线程组.png

在 JMeter 左侧的“Test Plan”节点上右键单击,并选择“Add”菜单,然后选择要添加的测试元素。例如,在“Add”菜单中选择“Thread Group”元素,就会在测试计划中添加一个新的线程组。

配置线程数量.png

这里可以配置线程数量

在线程组参数中,ramp-up period(中文名为“启动时间”或“递增时间”)是指测试执行时,启动多少线程所需的时间。它可以理解为从测试开始到所有线程全部启动的时间间隔。

例如,如果设置线程组中的启动时间为10秒,线程数为100,那么每秒将启动10个线程,直到全部100个线程都启动完成。这意味着在测试开始的前10秒,只有10个线程在工作,之后每秒将启动10个线程,直到达到最大线程数为止。

在创建线程组中添加HTTP请求

添加http请求.png

添加http请求

在线程组节点上右键单击,并选择“Add”菜单,然后选择“Sampler”子菜单,最后选择“HTTP Request”元素来添加 HTTP 请求。

配置HTTP请求

配置http请求.png

在 HTTP 请求元素的属性中,可以设置请求的 URL、请求方法(如 GET、POST、PUT 等)请求参数等。

配置HTTP请求头

配置HTTP请求头.png

在Test Plan节点上右键单击,并选择“Add”菜单,然后选择“Config Element”子菜单,最后选择“HTTP Header Manager”元素来添加 HTTP 请求头。

添加监听器

添加监听器.png

添加一个或多个监听器,用于收集和显示测试结果。例如,可以添加“View Results Tree”监听器,用于查看 HTTP 请求和响应的详细信息,或者添加“Summary Report”监听器,用于查看测试的摘要信息。

运行测试

保存测试计划并运行测试。可以通过点击工具栏上的“Start”按钮来开始测试,测试完成后可以查看测试结果并进行分析。

运行测试.png

HTTP 503 分析

测试时发现有大量的请求返回503错误,一般情况下,当服务器处理请求的数量超出其处理能力时,就会出现 HTTP 503 错误。

在 Spring Boot 中,默认嵌入式 Tomcat 的线程池大小为 200,默认请求处理队列大小为 100。这意味着 Tomcat 可以同时处理最多 200 个请求。如果同时有更多的请求到来,它们将被放置在队列中,等待处理。如果队列也已满,新的请求将被拒绝,并返回 HTTP 503 错误。

使用命令行启动测试

命令行方式启动 JMeter 测试可以在服务器上实现自动化测试,并允许在远程服务器上运行测试。

jmeter -n -t testplan.jmx

-n 参数指定 JMeter 的非 GUI 模式,-t 参数指定测试计划文件的路径和名称。这种方式可以在命令行中运行测试计划,而不需要打开 JMeter 的图形界面。

jmeter -n -t testplan.jmx -l testplan.jtl

-l 参数指定测试结果文件的路径和名称。这种方式可以在命令行中运行测试并将测试结果保存到文件中。

其他

  1. 禁用图形界面:在进行高负载测试时,可以禁用 JMeter 的图形界面,以减少资源消耗。可以通过在 JMeter 启动脚本中添加“-n”参数来实现。
  2. 使用断言:在 HTTP 请求中添加断言,用于验证服务器返回的结果是否符合预期。可以使用“Response Assertion”元素来添加断言。
  3. 使用 CSV 数据文件:可以使用 CSV 数据文件来提供 HTTP 请求的参数和值。可以在“HTTP Request”元素的属性中使用变量来引用 CSV 数据文件中的值。
  4. 使用定时器:在模拟用户发送 HTTP 请求时,可以使用定时器来模拟用户之间的间隔时间。可以使用“Constant Timer”元素来添加定时器。
  5. 分布式测试:在进行大规模负载测试时,可以使用 JMeter 的分布式测试功能,将测试负载分散到多台机器上,以提高测试效率和准确性。
  6. 监控服务器资源:在进行高负载测试时,需要特别注意被测系统和 JMeter 所在服务器的资源负载情况。可以使用系统监控工具(如 top、htop 等)来监控服务器的 CPU、内存、磁盘和网络等资源的使用情况,以及识别潜在的瓶颈和问题。可以通过调整 JMeter 的线程数、并发数、持续时间等参数,以避免对生产环境造成影响。