一、性能测试
性能测试:验证在各种性能负载场景下,系统的表现是否符合预期。
一个性能测试场景,JMeter 称之为 Test Plan,中文翻译为 测试计划 。
实际上,一个 JMeter 的 Test Plan 对应 性能测试的一个场景,其实也就是一个测试用例。
应该先准备好 性能测试用例, 然后再用JMeter对应配置好一个 Test Plan 来对应它。
每个 Test Plan 都可以保存在一个单独的文件中。
性能指标
产品文档中 应该有 产品的性能指标。
做性能测试前,如果你发现需求文档中没有给你指标,应该直接向产品团队要。因为这和功能需求一样,是产品的需求。
服务端系统 性能测试 的常见指标有
- TPS (transaction per second) 是 服务端 每秒处理请求的数量
- TPS 最直观的反映了 系统的处理能力,当然是重要的性能指标之一。
- RPS (request per second) 是 测试工具 每秒发送请求的数量RPS
- 和 TPS 概念不同,前者是每秒发出的请求数量。后者是处理完成的请求数量。但是显然,RPS 是决定 TPS 的重要因素。TPS 是由 RPS 、网络延迟 、服务端本身的处理速度 这3个因素决定的。一个性能表现良好的系统,TPS和RPS几乎是相同的
- EPS (error per second) 是 服务端 每秒处理出错的数量,也包含在TPS中。一个性能表现良好的系统,EPS 应该一直为0
- TOPS (timeout per second) 是 服务端 每秒处理超时的数量超时时间具体是多少,应该由产品需求定义。一个性能表现良好的系统,TOPS 应该一直为0
前面说过 TPS 是由 RPS 、网络延迟 、服务端本身的处理速度 这3个因素决定的。
服务端本身的处理速度 就是我们要测试的,测试时,我们要保证的是其他两个因素:RPS 和 网络延迟。
做 性能/压力测试 时, 被测系统 和 加压系统, 应该 在一个 带宽网速 比较理想的环境中,首先保证网络延迟没有问题。
然后,性能测试工具 要 测试 TPS 能否达到 , 主要就是设置每秒发送请求的数量,也就是RPS。
RPS 是由测试工具决定的。
一个压测工具本身的加压性能也很重要。
否则,如果TPS指标比较高,工具本身做不到,就没法测试了。
如果服务端性能无限强,网络无限好,在目前的主流机器上,黑羽压测能做到
单进程 Windows系统 2000-5000 RPS, Linux系统下3000-6000 RPS
整机大概在 6000-12000 RPS
二、安装和配置,准备工作
1.配置环境变量
变量名:JMETER_HOME
变量值:Jmeter安装目录
变量名:CLASSPATH
变量值:%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar; %JMETER_HOME%\lib/logkit-2.0.jar;
2.测试用例举例
首先,必须定义用户访问的行为。 就是用户 先访问哪个网页,发出哪些HTTP请求,再访问哪个网页,发出哪些HTTP请求。
根据用例,往往需要模拟 多种 用户行为, 每种行为的用户有多少个。
JMeter 把一个用户的行为 用一个线程来执行。
JMeter 把同一种用户的行为和数量, 用JMeter 把每个节点称之为元件 ,或者元素。
比如,现在我们要做的一个性能测试用例 需要模拟的行为 如下:
第1种行为(用户数量 5个):
先访问首页,再访问购买页 ,再访问 新闻页
第2种行为(用户数量 10个):
先访问首页,再访问 专题页 ,再访问 新闻页
我们就要定义2个线程组,对应这两种行为的用户。
线程组中:
Ramp-Up 时间意思是 所有用户上线的总时间,以秒为单位。
比如5,就表示总共耗时5秒,如果是 5个用户,那就意味着 每隔1.25秒上线一个: 5秒/(5-1) = 1.25
循环次数
意思是 每个用户 做线程组里面定义的动作行为多少轮 。 缺省就做一轮。
接下来 这个线程组里面 的 行为定义,也就是这类用户 先访问哪个网页,发出哪些HTTP请求,再访问哪个网页,
发出哪些HTTP请求, 是通过 Sampler 取样器设置
运行JMeter 有2种运行模式:
- GUI 图形界面模式
- CLI 命令行模式
前者是开发调试用的,后者才是真正执行压力测试时用的
三、GUI模式
后面写一篇详细介绍
四、命令行模式
1.为什么
使用GUI方式启动jmeter,运行线程较多的测试时,会造成内存和CPU的大量消耗,导致客户机卡死。
所以正确的打开方式是在GUI模式下调整测试脚本,再用命令行模式执行。
命令行方式支持在多个环境下使用,windosw的dos环境下,也可以在linux环境上执行。
2.怎么用
1..执行路径:
执行命令前要检查当前目录是否是%JMeter_Home%\bin 目录;如果 JMeter 脚本不在当前目录,需要指定完整的路径;如果要把执行的结果保存在其他地方也要指定完整的路径。命令中不指定测试计划与测试结果的路径时,默认都是在该目录下。
2.命令行参数:
-n -t // -n 非界面方式运行 -t 指定 jmx 文件位置
-l //-l 指定生成 jtl 结果文件
-e -o //-e 生成html报告 -o 指定html报告位置
命令:jmeter -n -t <testplan filename> -l <listener filename>
前面是jmeter的安装地址,中间是测试用例位置以及名字,后面是执行结果文件(格式是jtl,可更改csv便于查看)
执行命令之前需要在GUI模式进行测试
3.查看结果报告
dashboard报告产生命令:
d:\tools\apache-jmeter-5.4.1\bin\jmeter -g log.jtl -o report1
可更改配置文件,自定义参数
其中 APDEX (Application Performance Index) 里面的 T (Toleration threshold) 和 F (Frustration threshold)
可以通过 JMeter 工具 bin 目录下面的 user.properties 配置文件里面 这两个选项来设置
jmeter.reportgenerator.apdex_satisfied_threshold
jmeter.reportgenerator.apdex_tolerated_threshold