最全面的Jemter性能测试教程——Jmeter安装、基本组件使用、Windows和Linux上命令行执行

由于之前用Jmeter做了几次性能测试,所以写了下面这篇博客总结下。但是性能测试的知识点有很多,这个只能算一个初级教程。写的不好的地方,还请见谅。如果写的可以的话,可以关注我的博客,或者查看我的博客目录:YFF

一、Jmeter下载、安装、启动、基本配置

1.1 Java环境
1.2 Jmeter下载
1.3 Jmeter安装及环境变量配置
  • 安装的话,解压安装即可
  • 环境变量配置
    • JMETER_HOMED:\jmeter\apache-jmeter-5.1.1(Jmeter解压后目录)
      在这里插入图片描述

    • Path%JMETER_HOME%\bin
      在这里插入图片描述

  • 查看环境变量是否配置成功
    • 运行->cmd-> jmeter -v命令查看是否能查看到Jmeter版本信息
    • 运行->cmd->jmeter命令查看是否能启动jmeter
1.4 启动Jmeter
  • 启动jmeter的bin目录下的jmeter.bat文件
    在这里插入图片描述
  • 在jmetet配置环境变量后, cmd中输入jmeter打开。
    在这里插入图片描述
  • 注意:不管用那种方式打开,都会打开一个cmd窗口。如果关闭这个cmd窗口,打开的jmeter也会被关闭。
    在这里插入图片描述
1.5 Jemter配置中文环境
将Jemter的bin目录下的Jmeter.properties文件
将language=en修改为language=zh_CN

在这里插入图片描述
参考链接:https://jingyan.baidu.com/article/37bce2bedfc7135002f3a291.html

二、Jmeter基本使用

首先介绍Jemter基本使用,这里我就以一个登录接口作为例子,来进行基本脚本编写。

  • Jemter常用按钮在这里插入图片描述
2.1.接口信息查看

第一步肯定是了解需要进行性能测试的接口信息,如果有现成的接口文档更好。这里是在浏览器中通过F12键去网页中获取接口信息。

  • General数据
    在这里插入图片描述
协议类型:http或者https
域名或者IP:例如访问百度就是www.baidu.com
方法类型:POST或GET
请求路径:例如我这里是/auth/oauth/token
端口号:例如我这里是443
  • Request Headers请求头

一般情况下,对一个借口进行访问的时候,必须带上相关的请求头。如果不清楚哪些请求头参数需要添加上,就一个个添加名称中不含:的请求头。例如我这里就需要将authorization这个请求头加上。在这里插入图片描述

  • 请求参数

请求参数有的时候是以Form Data形式,有的时候是以JSON串的形式显示。
在这里插入图片描述

2.2 脚本编写
  • 创建线程组

(1)测试计划下添加->线程->线程组
在这里插入图片描述
(2)填写相关参数

线程数:即为虚拟用户数。一个虚拟用户占用一个进程或线程。
Ramp-Up时间:设置虚拟用户数启动需要的时间。
循环次数:即为循环
调度器:需要设置持续时间或者启动延迟的时候,才需要勾选。勾选该选项后,需要将循环次数勾选永远
持续时间:测试持续时间

下面给出两种设置的情况:
一种是设置线程数、Ramp-Up时间、循环次数。
另一种是设置线程数、Ramp-Up时间、持续时间
  • 设置10、2、10,含义就是在2秒内启动10个线程,并循环10次,最后发送的总请求数就为10*10=100.
    在这里插入图片描述
  • 设置10、2、10,含义就是在2秒内启动10个线程,并持续压测10秒。 在实际情况中,我们进行性能测试中,一般会对一个接口压测5~10分钟,甚至更长。
    在这里插入图片描述
  • 创建HTTP请求

线程数上 添加->取样器->HTTP请求,然后根据最初查看到的接口信息,填写相关数据。在这里插入图片描述
在这里插入图片描述

  • 创建HTTP信息头管理器

HTTP请求上 添加->配置原件->HTTP信息头管理器,然后填写请求信息头相关的数据。
在这里插入图片描述
在这里插入图片描述

  • 创建响应断言

没有断言的测试,是没有意义的。所以需要根据响应结果添加断言。HTTP请求上添加->断言->响应断言。
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

  • 创建监听器(察看结果树、聚合报告)

在线程组上右键添加->监听器->察看结构树、聚合报告。

察看结果树:能查看每个请求的详细数据。请求相关信息、响应相关数据。
聚合报告:查看整体所有请求的整体数据。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、Jmeter常用组件

上面以一个简单的登录接口,讲解了Jemter的基本使用。下面以组件的分类,讲解一下常用的几大类组件。按照组件执行顺序,依次为:配置原件->前置处理器->定时器->取样器->后置处理器->断言->监听器同一层级的,顺序执行

3.1 配置原件

在这里插入图片描述
重点介绍一下CSV数据文件设置这个配置原件,因为参数化在性能测试中几乎是必不可少的。因为在实际相关接口性能测试时,不太可能每次请求都是同一个请求参数。

  • 设置CSV数据文件
    在这里插入图片描述
    在这里插入图片描述

  • 读取变量
    在这里插入图片描述

3.2 前置处理器

前置处理器的含义:即为在请求启动前运行的原件。由于使用的较少,就不在这里说了,可自行百度。

3.3 定时器

在这里插入图片描述
参考链接:
同步定时器:https://www.cnblogs.com/zichuan/p/6938783.html

3.4 取样器

取样器,即为发送的请求。常用的有HTTP请求、调试取样器、FTP请求、JDBC Request(连接数据库)等。HTTP请求由于上面已经说过了。

  • 调试取样器

用于查看测试计划中及外部文件中的变量,可以定位问题,使用就是查看调试取样器的响应结果。
https://blog.csdn.net/caohongxing/article/details/82993026

  • JDBC Request

https://www.cnblogs.com/liu-xiaoliu/p/9146449.html
https://www.jianshu.com/p/23526221c8dc

3.5 后置处理器

后置取样器,即为发送请求完成后的处理,也是比较常用的一个组件。常用的后置处理器有正则表达式提取器、JSON提取器、调试后置处理程序、BeanShell后置处理程序。这里就重点说一下正则表达式提取以及关联

  • 正则表达式提取器
参考链接:
https://www.jianshu.com/p/d47a1f67c959
https://blog.csdn.net/quiet_girl/article/details/50724313
https://www.cnblogs.com/tudou-22/p/9566894.html

引用名称:下一个请求中引用的参数名称
正则表达式:
    () 括起来的部分为提取的内容
    . 匹配任意字符串
    + 匹配一次或多次
    ? 找到第一个匹配项之后就停止匹配
    \d 匹配数字
    \n 匹配结尾,例如匹配响应头中一行的数据
    带有转义字符的:id?test\":"1234"   id\?test\\":"(.+?)" 提取出1234
模板:用$$引用起来,$1$表示将匹配到的第一个值赋给引用名称、同理可以使用$1$$4$是将
      第一个和第四个值赋给引用名称。例如引用名称为user,模板为$1$$4$,后续取第一个
      正则的值就是user_g1,第四个就是user_g4.
匹配数字:0代表随机取值、1代表全部取值
缺省值:即为正则表达式没有匹配到值,则使用缺省值给引用名
实际举例
响应文本内容:
{"access_token":"0cdd295e-3803-4201-b945-2149bebda9a4",
"token_type":"bearer","refresh_token":"b832edd8-ed5b-4fd2-980b-65036412410b"
,"expires_in":6636,"scope":"read write","isDeviceValidate":true}

引用名称:token
正则表达式:"access_token":"(.+)","token_type":"(.+)","refresh_token":"(.+)","expires_in"
模板:$1$$2$$3$
匹配数字:1
Debug调试取样器结果
token=0cdd295e-3803-4201-b945-2149bebda9a4bearerb832edd8-ed5b-4fd2-980b-65036412410b
token_g=3
token_g0="access_token":"0cdd295e-3803-4201-b945-2149bebda9a4",
  "token_type":"bearer","refresh_token":
  "b832edd8-ed5b-4fd2-980b-65036412410b","expires_in"
token_g1=0cdd295e-3803-4201-b945-2149bebda9a4
token_g2=bearer
token_g3=b832edd8-ed5b-4fd2-980b-65036412410b

所以后续想要调用相关的参数的时候可以通过 引用名_g下标
  • 关联

关联:可以理解为我们需要取服务器返回的值。举个常用的例子,就是一般系统一些接口请求的时候,请求头中参数需要登录返回的响应数据。关联中有两种情况,一种是一个线程组内请求之间的关联;另一种是两个线程组之间的关联。

相关参数一个线程组两个线程组
正则表达式提取器引用名称:_access_token
正则表达式:“access_token”:"(.+?)"
引用名称:_access_token
正则表达式:“access_token”:"(.+?)"
BeanShell 后置输入值
后面取值${_access_token}${__P(_access_token)}

输入值为:

参数:${_access_token}
输入框值:
${__setProperty(_access_token,${_access_token})}

在这里插入图片描述
在这里插入图片描述

3.6 响应

断言,由于前面也大致说过了,具体可以参考下面链接。
https://www.cnblogs.com/xiehong/p/9959704.html

3.7 监听器

监听器,由于前面也大致说过了,具体可以参考下面链接。
察看结果树:https://www.cnblogs.com/syw20170419/p/9845985.html
聚合报告:https://blog.csdn.net/lijing742180/article/details/81183036

3.8 逻辑控制器
  • 事务控制器

将多个请求当做一个事务,由于实际场景中不仅有数据返回,还有页面渲染加载,所以需要将多个接口放在一个事务中。
参考链接:
https://www.cnblogs.com/testlearn/p/11176257.html
https://www.cnblogs.com/mawenqiangios/p/7886068.html

  • ForEach控制器

通常是几个类似的值需要循环使用的时候,通常结合自定义变量来使用。(是把ForEach控制器套在请求的上面)。
参考链接:
https://blog.csdn.net/adonis_lu37/article/details/77771019

  • if控制器

参考链接:
https://blog.csdn.net/haiou24/article/details/83545442
https://www.cnblogs.com/sandymonk/p/11506222.html

3.9 BeanShell

由于BeanShell是Jmeter中一个强大的功能,这里可以参考下面链接。
https://www.cnblogs.com/cty136/p/11335092.html

四、命令行执行压测

在打开Jmeter的时候,就会有一个提示。大致含义就为不要用GUI界面来做测试,只用GUI界面来做调试脚本。给出的命令模板为:jmeter -n -t [jmx file] -l [result file] -e -o [Path to web report folder]
在这里插入图片描述

4.1 Windows环境

  • 执行命令

例如:这里默认Windows中安装好Jmeter环境,且配置环境变量。执行命令。

jmeter -n -t G:\Test\1.jmx -l G:\Test\result\result.jtl -e -o G:\Test\htmlReport\1

在这里插入图片描述
在这里插入图片描述

压测报告:1.rar

  • 注意点
    • bin\jmeter.properties配置jmeter.save.saveservice.output_format=xml需要注释掉,才能执行成功
    • jtl文件路径和html报告路径需要不存在,否则会提示错误

4.2 Linux环境

4.2.1 Linux上Jemter环境搭建
  • (1)确定Java环境

java -version

  • (2)下载和解压安装Jmeter
/*wget命令下载Jmeter或者上传Jemter的tgz包*/
wget http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-5.1.1.tgz
/*解压Jemter*/
[yff@192 Desktop]$ ls
apache-jmeter-5.1.1.tgz
[yff@192 Desktop]$ tar zxvf  apache-jmeter-5.1.1.tgz -C ./

apache-jmeter-5.1.1.tgz

  • (3)配置环境变量
/*1.修改/etc/profile文件*/
vim /etc/profile

/*2.添加配置 路径根据实际修改*/
export PATH=/home/yff/Jmeter/apache-jmeter-5.2.1/bin/:$PATH

/*3.生效配置*/
source /etc/profile

/*查看配置是否成功*/
jmeter -v
  • (4)修改端口

将/bin/jmeter.properties文件修改为jmeterengine.nongui.port=0

  • (5)创建相关文件夹
/*在apache-jmeter-5.1.1目录下创建文件夹,为后续性能测试做准备*/
mkdir result log script file htmlReport

/*每个文件夹含义*/
result文件夹:用于存放压测结果 
log文件夹:用于存放日志文件
file文件夹:用于存放CSV等文件 
script文件夹:用于存放脚本文件
htmlReport文件夹:存放压测html报告

4.2.2 修改脚本
  • CSV数据文件路径

如果Jmeter脚本中使用到CSV文件,在Linux执行性能测试前,需要将CSV文件上传到Linux上刚才创建的file文件夹下,然后将脚本中CSV数据文件路径修改为Linux上对应路径。

  • 线程组参数参数化

由于在实际性能测试过程中,会进行不同并发数、不同持续时间的性能测试,就将线程组中相关参数修改为指定参数,然后执行命令中对参数赋不同的值。

${__P(threadCount,)}	线程数
${__P(startTime,)}	启动时间
${__P(time,)}		持续时间

在这里插入图片描述

4.2.3 执行性能测试

执行下面命令运行测试并生成报告。

/*执行命令*/
nohup jmeter -n -t /home/yff/Jmeter/apache-jmeter-5.1.1/script/1.1login_linux.jmx  -l /home/yff/Jmeter/apache-jmeter-5.1.1/reslt/$(date +%y%m%d%H%M).jtl > /home/yff/Jmeter/apache-jmeter-5.1.1/log/$(date +%y%m%d%H%M).log -e -o /home/yff/Jmeter/apache-jmeter-5.1.1/htmlReport/8 -JthreadCount=0 -JstartTime=2 -Jtime=3
/*命令含义*/
nohup jmeter -n -t jmx脚本路径 -l jtl文件路径 > log文件路径 -e -o html路径 参数赋值

需要注意的是,html路径应该是不存在的,如果命令中html路径已经存在,执行命令时会报错

脚本参数设置及命令对应
${__P(threadCount,)}	
${__P(startTime,)}	
${__P(time,)}

-JthreadCount=10	
-JstartTime=2 	
-Jtime=3

4.2.4 HTML报告解读

报告.rar

关于HTML中数据的解析,可以参考下面链接https://www.jianshu.com/p/4f32918d66bb
https://www.cnblogs.com/imyalost/p/10239317.html


<think>好的,我现在要回答用户关于如何使用JMeter进行性能测试的问题。首先,我需要整理用户提供的引用内容,看看里面有哪些有用的信息。用户提到了四个引用,分别涉及编写HTTP性能测试脚本、JMeter基本过程示例、分布式测试平台,以及使用BeanShell Sampler提取时间。 接下来,我应该按照用户的要求,结构清晰地分步骤说明,同时结合引用中的具体步骤示例。用户需要方法教程,所以可能需要从环境准备开始,逐步引导到脚本编写、配置元件、执行测试结果分析。 首先,用户的问题是关于如何用JMeter实现性能测试教程示例。根据引用[1],编写HTTP性能测试脚本的第一步是添加HTTP请求。所以第一步应该是创建测试计划,添加线程组,然后添加HTTP请求。这部分需要详细说明每个步骤的操作,比如在JMeter界面中如何操作。 然后,引用[2]提到JMeter可以测试静态动态资源,所以可能需要解释如何配置不同的请求类型。同时,引用[4]提到使用BeanShell Sampler来提取当前时间,这可能是在测试脚本中添加时间戳的例子,可以作为一个步骤来说明如何增强测试脚本。 另外,引用[3]提到了分布式性能测试平台,这部分可能属于高级应用,可以在相关问题里提到,或者在教程后部分简要介绍,供用户进一步探索。 需要注意用户要求使用中文回答,并且所有数学表达式要用$...$格式,但这个问题可能不涉及数学公式,所以可能不需要处理这点。但需要确保LaTeX语法正确,如果有的话。不过根据引用内容,似乎主要涉及JMeter的操作步骤,可能不需要数学公式。 接下来要组织回答结构。根据示例,回答应分步骤,可能包括环境准备、创建测试计划、添加线程组、配置HTTP请求、使用监听器、执行测试、分布式测试(可选)、示例代码等部分。每个步骤需要结合引用中的具体信息,比如引用[1]中的步骤1,引用[4]中的BeanShell Sampler的使用。 在生成相关问题部分,需要根据教程内容提出相关问题,比如如何分析结果、参数化测试、分布式测试等,同时可能涉及到引用中的内容,比如如何用BeanShell脚本增强测试。 后,检查是否符合所有系统级指令:行内公式正确(如果有的话),独立公式单独成段,LaTeX正确,中文回答,生成相关问题,引用标识正确添加。比如在提到引用[1]的地方在句末加上[^1]。 现在需要确保每个步骤都清晰,并且正确引用提供的资料。例如,在添加HTTP请求的部分引用[1],在提到分布式测试时引用[3],在提到BeanShell时引用[4]等。 可能的步骤结构: 1. 环境准备:安装JMeter 2. 创建测试计划 3. 添加线程组(用户组) 4. 配置HTTP请求(引用[1]) 5. 添加监听器 6. 执行测试 7. 参数化测试(可能用到CSV Data Set Config) 8. 使用BeanShell Sampler添加时间戳(引用[4]) 9. 分布式测试简介(引用[3]) 10. 示例脚本 11. 结果分析 在写作过程中,需要将每个步骤详细说明,并适当添加引用标记。例如,在步骤4中,添加HTTP请求时,说明根据引用[1],第一步是添加HTTP请求,并详细说明如何操作。 后,生成的相关问题需要围绕JMeter的不同功能,比如性能分析、参数化测试、分布式测试、BeanShell使用等,确保问题与教程内容相关,并且引导用户进一步学习。</think>### 如何使用JMeter实现性能测试:分步教程与示例 #### **1. 环境准备** - 下载并安装JMeter(需Java环境支持),官网地址:[Apache JMeter](https://jmeter.apache.org/)。 --- #### **2. 创建测试计划** 1. 启动JMeter,默认生成一个测试计划。 2. 右键测试计划 → 添加 → 线程(用户)→ **线程组**,用于定义虚拟用户数请求频率。 --- #### **3. 配置HTTP请求** 1. **添加HTTP请求**:右键线程组 → 添加 → 取样器 → **HTTP请求**。 - 输入目标URL(如`https://example.com/api`)。 - 设置请求方法(GET/POST)、路径、参数等。 2. **参数化请求**(可选): - 使用`CSV Data Set Config`读取外部文件中的数据,实现动态参数替换。 --- #### **4. 添加监听器分析结果** 右键线程组 → 添加 → 监听器 → 选择以下常用监听器: - **查看结果树**:查看请求响应详情。 - **聚合报告**:统计平均响应时间、吞吐量等关键指标[^2]。 --- #### **5. 增强脚本功能(示例)** - **添加时间戳**:使用`BeanShell Sampler`在请求中插入当前时间: ```java vars.put("currentTime", String.valueOf(System.currentTimeMillis())); // 将时间存入变量[^4] ``` - 在HTTP请求中引用变量:`${currentTime}`。 --- #### **6. 执行测试** 1. 设置线程组参数: - 线程数(虚拟用户数):100 - 循环次数:10 2. 点击工具栏绿色箭头启动测试。 --- #### **7. 分布式测试(高级)** 通过多台机器协同压测,提升负载能力: 1. 配置控制机(Controller)负载机(Agent)[^3]。 2. 在控制机中远程启动Agent执行测试。 --- #### **8. 示例脚本** ```plaintext 测试计划 └── 线程组(线程数:100,循环次数:10) ├── HTTP请求(目标URL:https://api.example.com/data) ├── CSV Data Set Config(参数化文件:user_data.csv) └── 聚合报告(分析性能指标) ``` --- #### **9. 结果分析** - **关键指标**: - 吞吐量(Throughput):单位时间处理的请求数。 - 平均响应时间(Average Response Time):请求处理耗时。 - 错误率(Error %):失败请求比例。 - 优化建议:根据结果调整线程数、优化服务器配置或代码逻辑。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

One Tester

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值