Jmeter 入门 从0-1 基础篇-实操

Jmeter 入门 从0-1 基础篇

笔记有的图片链接可能失效了,等我修改好了在来编辑哈

文章目录

  • 1 JMeter
    • 1.1 JMeter环境搭建和基本使用
      • 1.1.1 JMeter环境搭建
      • 1.1.2 JMeter常用目录
      • 1.1.3 基本配置-汉化jmeter
      • 1.1.4 jmeter基本操作
    • 1.2 JMeter基本元件
      • 1.2.1 JMeter元件类型
      • 1.2.2 JMeter元件的作用域
      • 1.2.3 JMeter元件执行顺序
    • 1.3 JMeter基本组成部分
      • 1.3 .1 线程组
        • 1.3.1.1 添加线程组
        • 1.3.1.2 线程组的特点
        • 1.3.1.3 线程组分类
        • 1.3.1.4 线程组属性
      • 1.3.2 取样器 HTTP请求
      • 1.3.3 查看结果树
    • 1.4 JMeter 参数化常用方式
      • 2.4.1 用户定义的变量
      • 1.4.2 用户参数
      • 1.4.3 CSV数据文件设置 CSV Data Set Config
      • 1.4.4 函数(_counter)
    • 1.5 JMeter断言
      • 1.5.1 响应断言
      • 1.5.2 JSON断言
      • 1.5.3 断言持续时间
  • 2 使用问题
    • 2.1 jmeter响应中出现乱码时

1 JMeter

​ Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做压力测试。

​ JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,在不同压力类别下测试它们的强度和分析整体性能。另外,JMeter 能够对应用程序做功能/回归测试,通过创建带有断言的脚本来验证程序是否返回了期望结果。为了最大限度的灵活性,JMeter 允许使用正则表达式创建断言。

​ 还可以做接口测试哈哈哈

1.1 JMeter环境搭建和基本使用

1.1.1 JMeter环境搭建

(1)JDK安装

下载jdk:

运行jdk

配置jdk的环境变量

验证jdk是否安装成功。java -version

(2)jmeter安装

下载jmeter
官网下载地址

jmeter版本必须与jdk版本匹配

​ 需要下载binaries的包

​ 安装jmeter:解压缩

​ 配置环境变量

​ 验证jmeter是否安装成功

​ 启动方式有:jmeter.bat/ 双击Apachejmeter.jar/ java.jar Apachejmeter.jar

1.1.2 JMeter常用目录

JMeter文件目录

**bin目录:**用于存放可执行程序、日志文件、配置文件

**docs目录:**存放API文档,主要提供第三方插件开发

**printable_docs:**目录存放用户使用手册

**lib目录:**存放jmeter所支持的jar包,第三方的插件一般放到lib\ext目录下

1. bin目录
存放可执行文件和配置文件
 jmeter.bat: windows的启动文件
 jmeter.log: 日志文件
 jmeter.sh: linux的启动文件
 jmeter.server.bat: windows 分布式测试要用到的服务器配置
 jmeter.server: linux 分布式测试要用的服务器配置
2. docs目录
 docs:是Jmeter的api文档,可打开api-index.html页面来查看
3. printable_docs 目录
  printable_docs的usermanual子目录下的内容是JMeter的用户手册文档
  usermanual 下 component_reference.html是最常用到的核心元件帮助文档

提示:printable_docs的demos子目录下有一些常用的Jmeter脚本案例,可以作为参考 

1.1.3 基本配置-汉化jmeter

汉化:

​ . 临时修改:菜单栏选择–>options-language-choose language-Chinese

​ . 永久修改: 打开bin目录下-jmeter.propertles,修改language=zh CN,重启jmeter

​ . 主题修改:选项-主题–选择对应的主题.并重启

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hcONnrdk-1660616309244)(image/clip_image002.jpg)]

(1.1.3 汉化)

1.1.4 jmeter基本操作

操作步骤

1.启动jmeter

2.在"测试计划"下添加"线程组"

3.在"线程组"下添加"HTTP请求"取样器

4.填写"HTTP请求"的相关请求数据

5.在"线程组"下添加"查看结果树"监听器

6.点击"启动"按钮运行,并查看结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ajk9AFSJ-1660616309248)(image/clip_image004.jpg)]

1.2 JMeter基本元件

​ 元件:多个类似功能组件的容器统称

​ 组件:实现独立某个功能的统称(类似函数)

​ 取样器:不同协议实现的组件

1.2.1 JMeter元件类型

*基本元件:*

线程组:模拟用户的

配置元件:进行测试环境和测试数据的初始化。类似自定化脚本中的setup

前置处理器:对要发送的请求进行预处理。类似自动化脚本中的参数化

取样器:往服务器发送请求。类似于自动化脚本中的发送请求代码

后置处理器:对收到的服务器的响应进行数据提取。类似自动化脚本中获取响应中特定字段的语句

断言:将收到的响应结果与预期结果做对比。类似自动化脚本中的断言

监听器:查看测试脚本运行的结果和日志,类似自动化脚本中的测试报告

定时器:等待一定时间。类似自动化脚本中的sleep

测试片段:封装基本功能,不单独执行,需要通过脚本调用才能执行。类似自动化脚本中封装的函数。

Jmeter 入门 从0-1 基础篇-实操_第1张图片
(1.2.1 基本元件)

1.2.2 JMeter元件的作用域

在JMeter中,元件的作用域是靠测试计划树形结构中元件的父子关系来确定的

提示:核心是“取样器”,其他组件都是以取样器为核心运行的,组件添加的位置不同,生效的取样器也不同。

作用域的原则

1.取样器:元件不和其他元件相互作用,因此不存在作用域的问题;
2.逻辑控制器:元件只对其子节点中的取样器和逻辑控制器作用;
3.其他六大元件:除取样器和逻辑控制器外,如果是某个取样器的子节点,则该元件对其父子节点起作用;
4.如果其父节点不是取样器,则其作用域是该元件父节点下的其他所有后代节点(包括子节点,子节点的子节点等)

提示:以上元件中还没开始学习,暂时理解jmeter这种树形结构影响作用域即可。

Jmeter 入门 从0-1 基础篇-实操_第2张图片

(2.2.2 元件的作用域)

作用域的原来:

核心:根据测试计划中的树形结构的父子节点来确定的

原则:

.取样器是没有作用域的

.逻辑控制器:只针对其子节点下的所有元件有小

.其他元件

​ 如果其父节点是取样器,只针对父节点(取样器)有效

​ 如果父节点是非取样器,针对父节点下的所有子节点及子节点有效

1.2.3 JMeter元件执行顺序

1.配置元件(config elements)

2.前置处理器程序(Per-processors)

3.定时器(timers)

4.取样器(Sampler)

5.后置处理程序(Post-processors)

6.断言(Assertions)

7.监听器(listenres)

注意:

​ .配置元件、前置处理器、后置处理器都需要依赖取样器才能运行

​ .在同一个作用域下,相同类型元件的执行顺序是从上到下按顺序执行

提示:

​ .前置处理器、后置处理器、断言等元件功能对取样器器作用(如果在它们的作用域内没有任何取样器,则不会执行)

​ .如果在同一作用域范围内有多个同一类型的元件,则这些元件按照它们在测试计划中的上下顺序依次执行
Jmeter 入门 从0-1 基础篇-实操_第3张图片

(1.2.3 元件的执行顺序)

1.3 JMeter基本组成部分

1.3 .1 线程组

线程组是控制JMeter将用于执行测试的线程组数,也可以把一个线程理解为一个测试用户

(作用:通过配置线程组中的线程数来模拟用户。线程数就是用户数,线程组就是用户组)

1.3.1.1 添加线程组

位置:右键点击测试计划–>添加-线程(用户)–线程组

1.3.1.2 线程组的特点

. 模拟多用户:设定线程数(模拟多人操作)

. 取样器(请求)和逻辑控制器必须依赖线程组才能使用

. 一个测试计划下可以添加拖个线程组,他们可以并行或者串行执行

​ 并行:默认情况下线程组为并行执行

​ 串行:在测试计划下勾选“独立运行每个线程组”

Jmeter 入门 从0-1 基础篇-实操_第4张图片

(1.3.1.1 并行) (1.3.1.2 串行)

清除全部执行结果操作[ 快捷键:ctrl+E ]

Jmeter 入门 从0-1 基础篇-实操_第5张图片

1.3.1.3 线程组分类

. setup****线程组:用于测试前的预处理操作,在所有的线程组最先执行

. 普通线程组:用于执行业务测试脚本

. teardown****线程组:用于测试后的后置处理(恢复环境,数据)的操作,在所有的线程组最后执行

Jmeter 入门 从0-1 基础篇-实操_第6张图片

1.3.1.4 线程组属性

线程数:模拟虚拟用户数

Ramp-up****时间:虚拟用户启动所需要的时间

循环次数:

.配置指定次数:控制脚本循环执行的次数

​ .配置循环永远

​ 。需要和调度器配置使用

​ 。运行时间:脚本执行的时间

​ 。延时启动时间:脚本等待特定的时间才能开始运行

线程数m和循环次数n的关系

. 如果同时配置,实际发送的HTTP请求数应该为m*n

. 虽然发送请求的次数相同,但不能相互替换

线程组:代表并发用户数,体现服务器的负载量

循环次数:代表执行时间

(线程组名不同1-1——1-10)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MWIuYN1t-1660616309253)(image/clip_image020.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hHh1ZReP-1660616309254)(image/clip_image022.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dDpgT44g-1660616309255)(image/clip_image024.jpg)]

循环次数 (线程组名相同1-1)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TcVrow79-1660616309256)(image/clip_image026.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1hK7eaaW-1660616309257)(image/clip_image028.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Syqgnmnv-1660616309258)(image/clip_image030.jpg)]

循环次数永远-调度器配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sYMlhyPk-1660616309259)(image/clip_image032.jpg)]

1.3.2 取样器 HTTP请求

​ **http****协议:**可以填写为HTTP或者HTTPS,默认不填写为HTTP协议

http****主机名/ip:

​ **端口:**可以填写为任何值,默认不填写时为80端口

​ **请求方法:**HTTP协议所支持的所有方法

​ **路径:**目录+参数

​ **编码格式:**默认IOS国际标准,推荐使用utf-8

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m8h3a8Vt-1660616309260)(image/clip_image034.jpg)]

1.3.3 查看结果树

取样器结果:统计请求相关的信息

请求:HTTP请求的请求头和请求体的详细信息

响应: HTTP响应的响应头和响应体的详细信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWVaQP3s-1660616309261)(image/clip_image036.jpg)]

1.4 JMeter 参数化常用方式

2.4.1 用户定义的变量

应用场景:全局参数

添加方式: 测试计划->线程组->配置元件->用户定义的变量

​ 场景样例:

​ 请求:https://www.baidu.com:443

要求:使用用户定义的变量配置被系统的协议、域名和端口

​ 操作步骤:

​ 1.添加线程组

​ 2.添加用户定义的变量

​ 3.添加HTTP请求

​ 4.添加查看结果树

总结

​ 配置:参数名+参数值

使用:在HTTP请求的取样器中引用定义的变量。 ${参数名}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtSSxSov-1660616309262)(image/clip_image038.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tzzIytmT-1660616309263)(image/clip_image040.jpg)]

用户定义的变量2

或者在直接在 测试计划 中配置用户定义的变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7W4AIYZw-1660616309264)(image/clip_image042.jpg)]

1.4.2 用户参数

应用场景:可以针对不同的用户获取不同的参数值(不能针对同一个用户循环取不同的值)

添加方式:测试计划->线程组->前置处理器->用户参数

​ 场景样例:

​ 请求:https://www.baidu.com

要求:第一次请求附带参数: name=“张三”&age=28;

第二次请求附带参数: name=“李四”&age=30

​ 操作步骤:

​ 1.添加线程组

​ 2.添加用户参数

​ 3.添加HTTP请求

​ 4.添加查看结果树

总结

​ 参数:添加变量

​ 参数值:添加用户-针对每个用户配置不同的参数值

​ 使用:在HTTP请求的取样器中引用定义的变量。${参数名}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hAtlywu1-1660616309265)(image/clip_image044.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pb7gZ5aM-1660616309266)(image/clip_image046.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3LyvBYE-1660616309267)(image/clip_image048.jpg)]

1.4.3 CSV数据文件设置 CSV Data Set Config

应用场景:针对每个用户每次循环取不同的值

添加方式:测试计划->线程组->配置元件->CSV数据文件设置

​ 场景样例:

​ 请求:https://www.baidu.com

要求:循环3次,每次请求时附带参数username,password,code的值不相同

​ 操作步骤:

​ 1.定义CSV数据文件

​ 2.添加线程组

​ 3.添加csv数据文件设置

​ 4.添加HTTP请求

​ 5.添加查看结果树

​ 编写CSV数据文件(.csv后缀) data.csv

​ 多个参数写为多列,其中用英文逗号分隔

​ 多组参数值,则使用多行来设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FuiEA5dP-1660616309268)(image/clip_image049.png)]

​ 配置:

​ . 文件名:填写CSV文件的路径。建议使用相对路径

​ . 文件编码:UTF-8

​ . 变量名称:从CSV数据文件中读取的数据需要保存的变量名,有多个变量时用逗号分隔

​ . 是否忽略首行: 是否从CSV数据文件第一行开始读取

​ . 分隔符: 要求与CSV数据文件中多列的分隔符一致

​ . 遇到文件结束符是否在次循环:默认TRUE

​ . 遇到文件结束符是否停止线程:当前一个参数为FALSE,改参数有效,一般设置为TRUE

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QbFjKBt1-1660616309268)(image/clip_image051.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oPOiGGAL-1660616309269)(image/clip_image053.jpg)]

同一个用户循环3次

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o1P7nZtS-1660616309270)(image/clip_image055.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0xQy2Jnh-1660616309271)(image/clip_image057.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vInoMFvP-1660616309272)(image/clip_image059.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wo7iJysR-1660616309273)(image/clip_image061.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4emytVd9-1660616309273)(image/clip_image063.jpg)]

1.4.4 函数(_counter)

应用场景:当需要参数化的数据只有唯一性要求,但对具体的参数无明确要求时,建议使用函数方式 (不需要提前准备数据,jmeter自动添加计数的方式来完成参数化)

计数函数,一般做执行次数统计使用;

​ 位置:工具条 函数助手 工具按钮

(JMeter5.3 及以后的版本jmeter函数助手生成的字符在置灰无法复制,其实新版的的jmeter点“生成”按钮时 jmeter已经自动复制了,ctrl+v直接粘贴到需要的位置即可)

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bKg7mlOA-1660616309274)(image/clip_image065.jpg)]

​ counter:

​ .TRUE:每个用户使用独立的计数器

​ .FALSE: 所有用户使用全局的计数器

​ 引用:在取样器中使用${__counter(TRUE,)}来引用对应的值

1.5 JMeter断言

作用:让脚本自动化执行的过程中,能够自动的判断执行结果是否正确,需要添加断言

.响应断言

.JSON断言

.持续时间断言(Duration Assertion)

1.5.1 响应断言

添加方式:测试计划->线程组->HTTP请求->(右键添加)断言->响应断言

场景样例:

请求:https://www.baidu.com

​ 检查:让程序检查响应数据中是否包含"百度一下,你就知道"

操作步骤:

​ 1.添加线程组

​ 2.添加HTTP请求

​ 3.添加响应断言

​ 4.添加断言结果

​ 5.添加查看结果树

配置:

.测试字段:需要检查的字段

.模式匹配规则:需要使用什么规则来进行检查

​ 。且、或者、非

.测试模式:需要校验的值

​ 。填写多个值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e0yxigyo-1660616309275)(image/clip_image067.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HxZJK376-1660616309275)(image/clip_image069.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kyFLImI6-1660616309276)(image/clip_image071.jpg)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gGMOdly7-1660616309277)(image/clip_image073.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UNz8p7WI-1660616309278)(image/clip_image075.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JP7COokp-1660616309279)(image/clip_image077.jpg)]

1.5.2 JSON断言

适用于返回的HTTP响应为JSON格式

​ 添加:线程组–HTTP请求–断言–JSON断言

场景样例:

请求:http://www.weather.com.cn/data/sk/101010100.html

​ 检查:让程序检查响应的JSON数据中,city对应的内容是否为“北京”

​ 操作步骤

​ 1.添加线程组

​ 2.添加HTTP请求

​ 3.添加JSON断言

​ 4.添加断言结果

​ 5.添加查看结果树

配置:

​ .JSON PATH: $weatherinfo.city

​ .勾选“Additonal assert value”

​ .在expected value 里填写期望值

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6tDOHIEE-1660616309280)(image/clip_image079.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ciCywE0c-1660616309280)(image/clip_image081.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O2Kz1Hss-1660616309281)(image/clip_image083.jpg)]

当期望值没有时

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-unKJw7pI-1660616309282)(image/clip_image085.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9bSsZxf-1660616309283)(image/clip_image087.jpg)]

1.5.3 断言持续时间

适用于性能测试时候,检查HTTP请求的响应时间是否超过预期值

添加:线程组–HTTP请求–断言–断言持续时间

场景样例:

请求:https://www.jd.com

​ 检查:让程序检查响应时间是否大于500毫秒

操作步骤

1.添加线程组

​ 2.添加HTTP请求

​ 3.添加断言持续时间

​ 4.添加断言结果

​ 5.添加查看结果树

配置:预期时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6C8w6XqF-1660616309284)(image/clip_image089.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q6ZnYTbV-1660616309284)(image/clip_image091.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QNcOhzZz-1660616309285)(image/clip_image093.jpg)]

重复访问时间会少

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ktyoTJpy-1660616309286)(image/clip_image095.jpg)]

当设置响应时间20毫秒

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPKpqMl0-1660616309287)(image/clip_image096.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iXguNjxI-1660616309288)(image/clip_image098.jpg)]

2 使用问题

2.1 jmeter响应中出现乱码时

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ePUOtMgg-1660616309288)(image/clip_image100.jpg)]

如果响应数据中中文显示乱码可以修改 \bin jmeter.properties配置文件

#sampleresult.default.encoding=ISO-8859-1

改为

sampleresult.default.encoding=UTF-8 重启jmeter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aFXoWUW8-1660616309289)(image/clip_image102.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d2aDdBLz-1660616309290)(image/clip_image104.jpg)]

你可能感兴趣的:(#,JMeter,Jmeter,接口测试,压力测试)