文章

Jmeter 简单入门

JMeter 是 Apache 组织开源的一款纯 Java 编写的压力测试软件。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来也扩展到其他测试领域。包括 FTP、SMTP、TCP、JMS、数据库等等。

准备工作

Jmeter 要求使用 Java8 以上的 JDK 版本,如果你使用的版本低于 8,那么需要先更新 JDK 版本并且正确配置了 JAVA_HOME 才能正常使用 Jmeter。

下载安装

建议下载 Jmeter 最新版本,目前官网最新版本是5.1.1。下载二进制压缩包之后解压即可。 jmeter_unzip

修改配置

Jmeter 默认是语言是英语,如果你想切换成中文的话可以在配置文件中修改,将 bin/jmeter.properties 中的 #language=en 注释去掉,en 改为 zh_CN

打开 GUI 界面

直接运行 bin 目录下的启动脚本

  • Mac: bin/jmeter
  • Windows: bin/jmeter.bat

jmeter_index

说明

Jmeter GUI 是给用户编写以及调试测试计划的,实际执行压测任务的时候需要是 CLI 模式(命令行模式)运行,官方说法 Don't run load test using GUI mode !

使用 CLI 模式,可以生成包含结果的 CSV(或XML)文件,并让 JMeter 在测试结束时生成 HTML 报告。默认情况下,JMeter 会在运行时提供负载测试的摘要。你还可以在测试期间使用 Backend Listener 获得实时结果。

如何构建一个 web 测试计划

本节以构建一个简单的测试计划为例:模拟 5 个用户同时请求 2 个接口,循环两次,总请求数是 5 x 2 x 2 = 20.

添加线程组

jmeter_add_thread_group jmeter_thread_group_ui

根据我们的计划需求,填写的参数分别为:

  • 线程数:5
  • Ramp-up:1
  • 循环次数:2

线程组参数

  • 取样器错误后执行的动作:
    • 继续:正常往下执行,相当于忽略了错误
    • 启动下一进程循环:终止当前循环,开始下一循环
    • 停止线程:停止当前线程,其他线程继续执行
    • 停止测试:当前执行的采样器结束后,停止测试计划
    • 立即停止测试:立即停止测试计划
  • 线程数:也就是用户数,并发数,指的是同时发出多少个请求
  • Ramp-up 时间:线程启动时间,指的是在多长时间内将全部线程启动完成。设置为 0 表示立即启动所有线程。
  • 循环次数:循环执行多少次,如果勾选了前面的“永远”,那么将会一直执行。
  • 延迟创建线程直到需要:当线程需要执行的时候,才会被创建。如果不勾选此选项,所有线程在开始时就全部被创建。
  • 调度器
    • 持续时间:整个测试计划持续的时间。
    • 启动延迟:测试计划启动后,会被延迟启动,时间为选项填入的时间。

添加第一个 HTTP 请求

右键点击“线程组”->“添加”->“取样器”->“HTTP 请求”。这里用 GitHub 的 API 来做示例:https://api.github.com/users/WhiteDG jmeter_http_req_ui

使用同样的方式添加第二个 HTTP 请求:https://api.github.com/users/WhiteDG/repos

添加监听器,查看测试结果

如果你需要独立查看每一个请求的测试结果,你可以为每一个请求都添加监听器,如果你只需要查看总的测试结果,则只需要为线程组添加监听器。这里为了演示,我们都加上一个最简单的“察看结果树”。

右键点击“线程组”->“添加”->“监听器”->“察看结果树”,对两个 HTTP 请求也用同样的方式加上监听器。

jmeter_add_result_tree

GUI 执行测试计划

测试计划编写完成后,按快捷键 Ctrl+s 保存,保存到 bin 目录,命名为 demo.jmx,然后点击 执行 按钮,即可开始测试,测试过程中可以通过 “选项”->“日志查看” 来查看 Jmeter 执行日志。

jmeter_run_log

执行结果如下:

jmeter_result

CLI 模式执行测试计划

前面说到 Jmeter GUI 只是用来编写和调试测试计划,实际执行测试计划要用 CLI 模式,才能获取最佳的测试结果,下面就用 CLI 模式来执行前面写好的测试计划,并且生成测试报告。在执行之前,首先了解一下 CLI 模式。

CLI 模式

参数

  • -n: 指定 Jmeter 使用 CLI 模式运行
  • -t: 指定编写完成的测试计划脚本( jmx 文件)
  • -l: 指定记录样本结果的 JTL 文件的名称
  • -j: 指定 Jmeter 运行日志输出文件
  • -r: 在指定的服务器(JMeter property “remote_hosts”)上运行测试计划
  • -R: 在指定的多个远程服务器上运行测试计划
  • -g: 仅生成报告仪表盘
  • -e: 测试完成后生成报告仪表板
  • -o: 指定测试报告输出的位置,文件夹不得存在或为空
  • -H: 指定代理服务器主机名或IP地址
  • -P: 指定代理服务器端口

执行命令

为了方便演示,这里将结果全部保存在 bin 目录下的 result 文件夹

1
./jmeter -n -t demo.jmx -l result/result.jtl -j result/log/jmeter.log -e -o result/report
  • CLI 模式执行过程 jmeter_cli_run
  • 执行完成后生成的文件 jmeter_cli_run_result

执行完成后,result/report 文件夹下就生成了报告,报告是 HTML 形式的,可以直接用浏览器打开查看。 jmeter_report

本文由作者按照 CC BY 4.0 进行授权