1. JMeter
你知道你公司的网站可以支撑多少用户同时访问吗
你能找来一万个人,同时去访问你的网站吗

1.1. JMeter介绍
Apache jmeter 是一个100%的纯java桌面应用,用于压力测试和性能测量。
它最初被设计用于Web应用测试但后来扩展到其他测试领域。
Apache jmeter 可以用于对静态的和动态的资源(文件,Servlet,Perl脚本,java 对象,数据库和查询,FTP服务器等等)的性能进行测试。
它可以用于对服务器,网络 或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的整体性能。
可以使用它做性能的图形分析或在大并发负载测试你的服务器/脚本/对象。
1.2. JMeter与LoadRunner比较
JMeter 是一款开源(有着典型开源工具特点:界面不美观)测试工具
虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细;
很它的优点也有很多:
- 开源,他是一款开源的免费软件,使用它你不需要支付任何费用,
- 小巧,相比LR的庞大(最新LR11将近4GB),它非常小巧,不需要安装,但需要JDK环境,因为它是使用java开发的工具。
- 功能强大,jmeter设计之初只是一个简单的web性能测试工具,但经过不段的更新扩展,现在可以完成数据库、FTP、LDAP、WebService等方面的测试。因为它的开源性,当然你也可以根据自己的需求扩展它的功能。
1.3. JMeter缺点
使用JMeter无法验证JS程序,也无法验证页面UI,所以要须要和Selenium配合来完成Web2.0应用的测试。
1.4. 下载安装
1.官方网站:http://jmeter.apache.org/download_jmeter.cgi下载软件包

2.下载后解压缩

3.安装java环境,JDK,配置JAVA环境变量
4.运行JMeter,可以运行在linux、macos、windows平台

1.5. JMeter目录结构
- /bin 目录(常用文件介绍)
- jmeter.bat:windows下启动文件
- jmeter.sh:Linux下启动文件
- jmeter.log:Jmeter运行日志文件
- jmeter.properties:Jmeter配置文件
- jmeter-server.bat:windows下启动负载生成器服务文件
- jmeter-server:Linux下启动负载生成器文件
- /docs目录——Jmeter帮助文档
- /extras目录——提供了对Ant的支持文件,可也用于持续集成
- /lib目录——存放Jmeter依赖的jar包,同时安装插件也放于此目录
- /licenses目录——软件许可文件,不用管
- /printable_docs目录——Jmeter用户手册
1.6. JMeter插件安装
- 下载地址:http://jmeter-plugins.org/downloads/all/
- 下载后解压放入:apache-jmeter\lib\ext\目录下
- 重启jmeter
数据库链接驱动如果需要需要专门下载,例如mysql需要jdbc的jar包,地址:http://dev.mysql.com/downloads/file/?id=462850

1.7. JMeter 如何运行
- 进入bin目录运行jmeter.bat启动jmeter
注意:打开的时候会有两个窗口,JMeter的命令窗口和JMeter的图形操作界面,不可以关闭命令窗口。
JMeter的classpath:
如果你想添加其他JAR文件到JMeter的classpath中,你必须复制他们到lib目录中;
如果你开发了一个JMeter特定组件或有效的jar文件,复制到lib目录下的ext目录中。
打开之后显示的是中文,如果你想使用其他语言,比如英文,那么通过菜单选项->选择语言->英文即可,当然转为中文也是同样操作。
1.8. JMeter测试计划元件
1.8.1. JMeter-Test Plan
Test Plan (测试计划):用来描述一个性能测试,包含与本次性能测试所有相关的功能。
性能测试的所有内容是于基于一个计划的。

1.8.2. Threads(Users)线程用户

有三个添加线程组的选项,名字不一样, 创建之后,其界面是完全一样的。
1) setup thread group
- 一种特殊类型的ThreadGroup的,可用于执行预测试操作。
- 这些线程的行为完全像一个正常的线程组元件。
- 不同的是,这些类型的线程执行测试前进行定期线程组的执行。
- setUp Thread Group类似于lr的init.可用于执行预测试操作。
2) teardown thread group.
- 一种特殊类型的ThreadGroup的,可用于执行测试后动作。
- 这些线程的行为完全像一个正常的线程组元件。
- 不同的是,这些类型的线程执行测试结束后执行定期的线程组。
- tearDown Thread Group类似于lr的end.可用于执行测试后动作。
3) thread group(线程组).
- 这个就是我们通常添加运行的线程。
- 通俗的讲一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。
- 线程组中包含的线程数量在测试执行过程中是不会发生改变的。

线程组:
名称:就如字面意思,起个有意义的名字就行
注释:
线程数:这里选择5
Ramp-Up Period:单位是秒,默认时间是1秒。它指定了启动所有线程所花费的时间,比如,当前的设定表示“在5秒内启动5个线程,每个线程的间隔时间为1秒”。如果你需要Jmeter立即启动所有线程,将此设定为0即可
循环次数:表示每个线程执行多少次请求。
1.8.3. 控制器
取样器
JMeter有两种类型的控制器:取样器(sample)和逻辑控制器(Logic Controller),用这些原件来驱动处理一个测试。
- 取样器(Sampler)是性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元
- JMeter 原生支持多种不同的sampler , 如 HTTP Request Sampler 、 FTP Request Sampler 、TCP Request Sampler 、 JDBC Request Sampler 等,每一种不同类型的 sampler 可以根据设置的参数向服务器发出不同类型的请求。
- 在Jmeter的所有Sampler中,Java Request Sampler与BeanShell Requst Sampler是两种特殊的可定制的Sampler.

逻辑控制器
逻辑控制器,包括两类无件,一类是用于控制test plan 中 sampler 节点发送请求的逻辑顺序的控制器,常用的有 如果(If)控制器 、 switch Controller 、Runtime Controller、循环控制器等。
另一类是用来组织可控制 sampler 来节点的, 如 事务控制器、吞吐量控制器。

1.8.4. 配置元件(Config Element)
- 配置元件(config element)用于提供对静态数据配置的支持。
- CSV Data Set config 可以将本地数据文件形成数据池 (Data Pool)
- 而对应于HTTP Request Sampler和 TCP Request Sampler等类型的配制无件则可以修改 Sampler的默认数据。
- 例如,HTTP Cookie Manager 可以用于对 HTTP Request Sampler 的 cookie 进行管理。
- HTTP 请求默认值不会触发Jmeter发送http请求,而只是定义HTTP请求的默认属性。

1.8.5. 定时器
定时器(Timer)用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。
类似于LoadRunner里面的“思考时间”。
JMeter 定义了Bean Shell Timer、Constant Throughput Timer、固定定时器等不同类型的Timer。

1.8.6. 前置处理器(Per Processors)
前置处理器用于在实际的请求发出之前对即将发出的请求进行特殊处理。

1.8.7. 后置处理器(Post Processors)
后置处理器是用于对Sampler 发出请求后得到的服务器响应进行处理。
一般用来提取响应中的特定数据(类似LoadRunner测试工具中的关联概念)。

后置处理器解决HTTP响应请求乱码
prev.setDataEncoding("utf-8");

1.8.8. 断言(Assertions)
断言用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否与预期一致。

1.8.9. 监听器(Listener)
用来对测试结果数据进行处理和可视化展示的一系列元件。
图形结果、查看结果树、聚合报告、用表格察看结果都是我们经常用到的元件。

1.9. JMeter小案例
JMeter测试计划-路飞学城
1.创建测试计划

2.创建线程组

3.向路飞学城发起请求

4.对HTTP响应请求进行编码处理,调用后置处理程序

5.添加结果树,执行测试计划,观察HTTP结果

6.保存Jmeter测试计划脚本,也就是个XML文档

1.10. JMeter配置文件
1.10.1. 主配置文件
C:\apache-jmeter-5.1.1\bin\jmeter.properties

1.10.2. 修改JMeter默认编码

此时就可以关闭后置处理程序,默认解析utf-8响应了
1.10.3. JMeter日志
C:\apache-jmeter-5.1.1\bin\jmeter.log

显示日志按钮
改为true

修改日志级别


1.10.4. Java虚拟机启动配置
修改Jmeter内存相关
windows平台找到jmeter.bat打开

1.11. JMeter组件

1.12. 配置管理
配置元件
提供配置相关的信息,如Http请求头,cookie管理,提供参数化数据(csv),数据库驱动连接,用户自定义变量等
1.13. 请求预处理
前置处理器:
用于在实际的请求发出之前对即将发出的请求进行特殊处理
例如变量定义,变量使用
1.14. 集合点、定时并发
定时器
用于操作与操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段,类似于LoadRunner的思考时间。
好比time.sleep
1.15. 请求发送
sampler(取样器)
性能测试中向服务器发送请求,记录响应信息,记录响应时间的最小单元
1.16. 实现关联
后置处理器
用于多Sampler发出请求后,得到的服务器响应进行处理
常用来提取响应中的特定数据
1.17. 数据预判
断言
用于检查测试中得到的相应数据是否符合预期,断言一般用来设置检查点,用以保证性能测试过程中的数据交互是否符合预期值
1.18. 监控数据可视化
监听器
用来对测试数据结果进行处理与可视化展示的一系列组件
1.19. 函数助手
- 随机数 __Random
- 参数化助手 __CSVRead
- 计数器 __counter
- 唯一数 __UUID