一. JMeter介绍
1. 什么是JMeter?
Apache JMeter™ 应用程序是开源软件,一个 100% 纯 Java 应用程序,旨在加载测试功能行为和测量性能 。它最初是为测试 Web 应用程序而设计的,但后来扩展到其他测试功能。
2. JMeter能做啥?
Apache JMeter 可用于测试静态和动态资源、Web 动态应用程序的性能。
它可用于模拟服务器、服务器组、网络或对象上的重负载,以测试其强度或分析不同负载类型下的整体性能。
Apache JMeter 功能包括:
- 能够加载和性能测试许多不同的应用程序/服务器/协议类型:
- Web - HTTP、HTTPS(Java、NodeJS、PHP、ASP.NET,...)
- SOAP / REST Web 服务
- FTP
- 通过 JDBC 的数据库
- LDAP
- 通过 JMS 的面向消息的中间件 (MOM)
- 邮件 - SMTP(S)、POP3(S) 和 IMAP(S)
- 本机命令或 shell 脚本
- TCP
- Java 对象
- 功能齐全的测试 IDE,允许快速记录测试计划(从浏览器或本机应用程序)、构建和调试。
- **CLI 模式(命令行模式(以前称为 Non GUI)/无头模式)**可从任何 Java 兼容操作系统(Linux、Windows、Mac OSX 等)进行负载测试
- 完整且**可随时呈现的动态 HTML 报告**
- 能轻松从最流行的响应格式 HTML 、JSON 、 XML 或 **任何文本格式**中提取数据
- 完全的可移植性和 100% Java 纯度。
- 完整的多线程框架允许多个线程同时采样和不同线程组同时采样不同功能。
- 缓存和离线分析/重放测试结果。
- 高度可扩展的核心:
- 可插拔采样器允许无限的测试能力。
- 可编写脚本的采样器(与 Groovy 和 BeanShell 等 JSR223 兼容的语言)
- 可以使用 可插入计时器 选择几个负载统计信息。
- 数据分析和 可视化插件 允许很好的可扩展性和个性化。
- 函数可用于为测试提供动态输入或提供数据操作。
- 通过 Maven、Gradle 和 Jenkins 的 3 rd方开源库轻松实现持续集成。
3. 下载Apache JMeter
下载地址:Apache JMeter - Download Apache JMeter
安装要求:·
- JMeter是基于jdk运行的,因此要先安装java,java8或更高版本
- JMeter默认以1GB的堆运行(可通过修改配置文件进行调整)
解压后,目录结构:
Jmeter bin目录文件讲解
- jmeter.bat:: Windows启动文件
- jmeter:Mac或者linux启动文件
- jmeter-server:Mac或者Liunx分布式压测使用的启动文件
- jmeter-server.bat::Windows分布式压测使用的启动文件
- jmeter.properties::配置文件
4. 运行JMeter
要运行 JMeter,请运行 jmeter.bat
(对于 Windows)或 jmeter
(对于 Unix)文件。这些文件位于 bin 目录中。执行后,会出现JMeter GUI。
GUI 模式只能用于创建测试脚本,CLI 模式(非 GUI)必须用于负载测试
5. 中文设置
方式一:控制台修改(临时性显示为中文,下次在打开Jmeter还是默认显示问英文):菜单栏 -> options -> choose language -> Chinese(Simplified)
方式二:配置文件修改(永久性显示问中文样式):Jmeter的安装目录-> bin目录 -> jmeter.properties文件-> 使用记事本打开-> #language=en修改为language=zh_CN
二、核心组件
1. 测试计划
测试计划是使用JMeter进行测试的起点,它是其它JMeter测试 元件的容器。
2. 线程组
线程数:模拟用户并发数(虚拟用户数)。一个虚拟用户占用一个进程或线程。
Ramp-Up时间(秒):设置的虚拟用户数需要多长时间全部启动。如果线程数为10 ,准备时长为20 ,那么需要20秒钟启动10个线程。也就是每2秒钟启动1个线程。
循环次数:每个线程发送请求的次数。如果线程数为10 ,循环次数为100 ,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了"永远",那么所有线程会一直发送请求,一到选择停止运行脚本。
3. 取样器(Sampler)
模拟各种请求。所有实际的测试任务都由取样器承担,存在很多种请求。如:HTTP 、ftp请求等等。
4. 监听器
负责收集测试结果,同时也被告知了结果显示的方式。功能是对取样器的请求结果显示、统计一些数据(吞吐量、KB/S......)等。
5. 逻辑控制器
允许自定义JMeter发送请求的行为逻辑,它与Sampler结合使用可以模拟复杂的请求序列。
6. 断言
6.1 响应断言
用于来判断请求响应的结果是否如用户所期望,是否正确。它可以用来隔离问题域,即在确保功能正确的前提下执行压力测试。这个限制对于有效的测试是非常有用的。
Apply to:指定断言作用范围。关于应用范围,我们大多数勾选"main sample only" 就足够了,因为我们一个请求,实质上只有一个请求。但是当我们发一个请求时,可以触发多个服务器请求,就有main sample 和 sub-sample之分了。
Main sample and sub-samples:匹配范围包括当前父取样器并覆盖至子取样器
Main sampie only:匹配范围是当前父取样器
Sub-samples only:仅匹配子取样器
JMeter Variable Name to use:支持对JMeter变量值进行匹配
测试字段:针对响应数据的不同部分进行匹配
①响应文本:响应服务器返回的文本内容
②响应代码:匹配响应代码,比如返回代码"200"表示成功
③响应信息:匹配响应信息,比如处理成功返回"成功"字样
④响应头:匹配响应中的头信息
⑤请求头:请求中的头信息
⑥URL样本:匹配URL链接
⑦文档(文本):对文档内容进行匹配
⑧忽略状态:当第一个断言失败时可以忽略
⑨请求数据:请求数据
模式匹配规则:
①包括:响应内容包括需要匹配的内容即代表响应成功
②匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,不区分大小写,支持正则
③相等:响应内容要完全等于需要匹配的内容才代表响应成功,区分大小写,匹配内容是字符串非正则表达式
④字符串:响应内容包含需要匹配的内容才代表响应成功,区分大小写,匹配内容是字符串非正则表达式
⑤否:反转检查结果,用于表示不包含,不匹配,不等于,没有和模式字符串相匹配的字符串。若匹配成功则返回失败
⑥或者: 一个断言可以添加多个"要测试的模式"。使用OR选项后,只要其中有1个模式匹配,断言将会成功。不选择"OR"时将默认为AND选项,必须所有模式都匹配,断言才会成功。
测试模式:输入结果期望值(空格要去掉)。这里填写我们要进行断言的内容,可以添加多个模式,可以使用变量、文本、正则表达式(在"包括"和"匹配"模式下)。
6.2 JSON断言
JSON断言:书写格式为 $.msg
$表示根 也就是{
.表示子 也就是{下的元素
{
"msg":成功,
"state":b,
"data":[
{
"name":"测试",
"age":"12"
}
]
}
注释: 需要勾选上Additionally assert value,并填写上需要断言的内容,否则只检测是否有msg这个属性,有就返回ture,不会对内容做判断
若需要获取content,则修改为$.content (获取所有content)
若需要获取A的所有子类,则修改为$...A(获取所有的所有子类)
若只需要获取A的第二个子类,则修改为$...A[1],
当然也可以这样写:$.content.data.allCitySearchLabels.A[1].id,这样便能获取所有A类第二个的ID
6.3 XPath断言
书写格式为 //a[@name ="tj_trnews"]
其中,//表示相对路径,a表示标签,[]里面放谓词,@name="tj_trnews"表示属性,多个属性用 and、or表示。如果查看结果树使用XPath Tester显示时,记得勾选上return entire XPath fragment instead of text content,否则结果会显示失败。
断言结果监听器: 线程组-> 添加 -> 监听器 -> 断言结果
里面的内容是sampler采样器的名称
断言失败,查看结果树任务结果颜色标红(通过结果数里面双击不通过的记录,可以看到错误信息)
7. 定时器
负责定义请求(线程)之间的延迟间隔,模拟对服务器的连续请求。
8. 配置元件
维护Sampler需要的配置信息,并根据实际的需要会修改请求的内容。
9. 前置处理器和后置处理器
负责在生成请求之前和之后完成工作。前置处理器常常用来修改请求的设置,后置处理器则常常用来处理响应的数据。
三、实战使用
1. 新增测试计划
2. 新增线程组
3. HTTP请求
web服务器:
默认协议:http
默认端口:80
服务器名称或IP :请求的目标服务器名称或IP地址
路径:服务器URL
Use multipart/from-data:当发送POST请求时,使用Use multipart/from-data方法发送,默认不选中。(如服务器支持,不进行勾选也可以)
4. 新增监听器
对结果进行收集
以上一个简单的实例完成,更多的功能可以参考文档:
Apache JMeter™ | JMeter 官方帮助文档中文版 (xiniushu.com)
5. 其它
5.1 执行顺序
jmeter测试计划脚本呈树形结构排列,元件的执行顺序是先执行根节点,再执行子节点。在同一层次中,各个元件的执行顺序逻辑:
- 配置元件
- 前置处理器
- 定时器
- 取样器
- 后置处理器
- 断言
- 监听器
5.2 取样器(Sampler)
取样器执行jmeter的实际请求交互工作。Apache JMeter提供了一些案例:https://jmeter.apache.org/usermanual/component_reference
http取样器
1.testplan -> add -> threads->thread g roup
2.thread group -> add-> Sampler -> http reqeust (填入参数)
3.thread group -> add ->listener -> view results tree
4.http request -> add ->assertions -> response assertion
5.view results tree -> start