一、性能测试

性能测试:验证在各种性能负载场景下 ,系统的表现是否符合预期。

一个性能测试场景,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

二、安装和配置,准备工作

https://www.cnblogs.com/l199616j/p/11550810.html

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