您的位置:首页 > 其它

JMETER入门总结

2020-02-02 14:31 696 查看

JMETER入门总结

并发量的计算方法

一、经典公式1:
一般来说,利用以下经验公式进行估算系统的平均并发用户数和峰值数据

1)平均并发用户数为 C = nL/T
2)并发用户数峰值 C‘ = C + 3*根号C
C是平均并发用户数,n是login session的数量,L是login session的平均长度,T是值考察的时间长度
C’是并发用户数峰值

举例1,假设系统A,该系统有3000个用户,平均每天大概有400个用户要访问该系统(可以从系统日志从获得),对于一个典型用户来说,一天之内用户从登陆到退出的平均时间为4小时,而在一天之内,用户只有在8小时之内会使用该系统。
那么,
平均并发用户数为:C = 40046060/(86060) = 200
并发用户数峰值为:C‘ = 200 + 3根号200 = 243

举例2, 某公司为其170000名员工设计了一个薪酬系统,员工可进入该系统查询自己的薪酬信息,但并不是每个人都会用这个系统,假设只有50%的人会定期用该系统,这些人里面有70%是在每个月的最后一周使用一次该系统,且平均使用系统时间为5分钟。
则一个月最后一周的平均并发用户数为(朝九晚五):
n = 1700000.50.7/5 = 11900(其中5为一周上班天数)
C= 11900560/60/8/60 = 124

吞吐量计算为:F = Vu * R / T 单位为个/s
F为事务吞吐量,Vu为虚拟用户数个数,R为每个虚拟用户发出的请求数,T为处理这些请求所花费的时间

二、通用公式2:
对绝大多数场景,我们用(用户总量/统计时间)影响因子(一般为3)来进行估算并发量。
比如,以乘坐地铁为例子,每天乘坐人数为5万人次,每天早高峰是7到9点,晚高峰是6到7点,根据8/2原则,80%的乘客会在高峰期间乘坐地铁,则每秒到达地铁检票口的人数为5000080%/(36060)=3.7,约4人/S,考虑到安检,入口关闭等因素,实际堆积在检票口的人数肯定比这个要大,假定每个人需要3秒才能进站,那实际并发应为4人/s*3s=12,当然影响因子可以根据实际情况增大!

三、根据PV计算公式:
比如一个网站,每天的PV(网站访问量)大概1000w,根据2/8原则,我们可以认为这1000w pv的80%是在一天的9个小时内完成的(人的精力有限),那么TPS为:
1000w80%/(93600)=246.92个/s,取经验因子3,则并发量应为:
246.92*3=740

四、根据TPS估计:
公式为 C = (Think time + 1)*TPS

五、根据系统用户数计算:
并发用户数 = 系统最大在线用户数的8%到12%

TPS、QPS、吞吐量的区别与联系

吞吐量就是指一定时间内,服务器接受发生的数据量总和,单位时间内吞吐量越高,服务器处理能力基本上就越好,其他情况是正常情况下。
TPS是每秒处理的事务数。
QPS才是每秒处理的请求数。
一个事务指的就是指定完成的一个功能过程,一个事务有可能是一个请求,也有可能是很多请求组成。

线程组参数详解:

https://blog.csdn.net/u012111923/article/details/80705141

  1. 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多少虚拟用户数在这里也就是设置多少个线程数。
  2. Ramp-Up Period(in seconds)准备时长:设置的虚拟用户数需要多长时间全部启动。如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。
  3. 循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么每个线程发送100次请求。总请求数为10*100=1000 。如果勾选了“永远”,那么所有线程会一直发送请求,一到选择停止运行脚本。
  4. Delay Thread creation until needed:直到需要时延迟线程的创建。
  5. 调度器:设置线程组启动的开始时间和结束时间(配置调度器时,需要勾选循环次数为永远)
    持续时间(秒):测试持续时间,会覆盖结束时间
    启动延迟(秒):测试延迟启动时间,会覆盖启动时间
    启动时间:测试启动时间,启动延迟会覆盖它。当启动时间已过,手动只需测试时当前时间也会覆盖它。
    结束时间:测试结束时间,持续时间会覆盖它。

聚合报告参数详解:

  1. Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这里显示的就是 Name 属性的值
  2. #Samples:请求数——表示这次测试中一共发出了多少个请求,如果模拟10个用户,每个用户迭代10次,那么这里显示100
  3. Average:平均响应时间——默认情况下是单个 Request 的平均响应时间,当使用了 Transaction Controller 时,以Transaction 为单位显示平均响应时间
  4. Median:中位数,也就是 50% 用户的响应时间
  5. 90% Line:90% 用户的响应时间
  6. Min:最小响应时间
  7. Max:最大响应时间
  8. Error%:错误率——错误请求数/请求总数
  9. Throughput:吞吐量——默认情况下表示每秒完成的请求数(Request per Second),当使用了 Transaction Controller 时,也可以表示类似 LoadRunner 的 Transaction per Second 数
  10. KB/Sec:每秒从服务器端接收到的数据量,相当于LoadRunner中的Throughput/Sec

性能测试的分类

1、性能负载测试
通过在被测软件系统上不断实施加压,直到性能指标达到极限状态,例如“响应时间”超过预定指标或都某种资源已经达到饱和状态。
1)负载测试的特点:
(1)负载测试方法的主要目的是找到系统处理能力的极限何在。
(2)负载测试方法需要在已知的测试环境下进行,通常也需要考虑被测试系统的业务压力量和典型场景、使得测试结果具有业务上的实际意义。
(3)负载测试方法一般用来了解系统的性能容量,或是配合性能调优来使用。
也就是说,负载测试是对一个系统持续不断的加压,观察软件在什么时候已经超出“预期要求”或系统崩溃。
2、性能压力测试(也叫强度测试)
性能压力测试是测试软件系统在一定饱和状态下,例如CPU、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误现象。
1)压力测试的特点:
(1)压力测试方法的主要目的是检查系统处于压力性能下时,软件应用的具体表现。
(2)压力测试方法一般通过模拟负载测试等方法,使得系统的资源使用达到较高的水平。
(3)压力测试方法一般用于测试系统的稳定性。
也就是说,压力测试是让系统处在很大强度的压力之下,看系统是否稳定,注意观察哪个地方会出现问题。
3、性能并发测试
性能并发测试通过模拟用户并发访问,测试多用户并发访问同一个软件、同一个模块或者数据记录时是否存在死锁或其者性它的性能问题。
1)并发测试的特点:
(1)并发测试方法的主要目的是发现系统中可能隐藏并发访问时的问题。
(2)并发测试方法主要关注系统可能存在的并发问题,例如系统中的内存泄漏、线程锁和资源并用方面的问题。
(3)并发测试方法可以在开发的各个阶段使用,不过是需要相关的测试工具的配合和支持。
也就是说,并发测试关注点是多个用户同时(并发)对一个模块或操作行为进行加压的一种测试。
4、性能配置测试
性能配置测试是通过对被测系统的软/硬件环境的调整,了解各种不同方法对软件系统的性能影响的程度,从而找到系统各项资源的最优分配原则。
1)配置测试的特点:
(1)配置测试方法的主要目的是了解各种不同因素对系统性能影响的程度,从而判断出最值得进行的调优操作。
(2)配置测试方法一般在对系统性能状况有初步了解后才进行。
(3)配置测试方法一般用于性能调优和软件处理能力的规划。
也就是说,配置测试关注点是“微调”,通过对软硬件的不断调整,找出软件系统的最佳状态,使软件系统达到一个最稳定的状态
5、性能可靠性测试
性能可靠性测试是在给系统加载一定业务压力的情况下,使系统运行一段时间,以此检测系统是否稳定。
1)可靠性测试的特点:
(1)可靠性测试方法的主要目的是验证软件系统是否支持长期稳定的运行。
(2)可靠性测试方法需要在压力下持续一段时间的运行。
(3)可靠性测试过程中需要关注系统的运行状况如何。
也就是说,这种测试的关注点是“稳定”,不需要给系统太大的压力,只要系统能够长期处于一个稳定的状态即可。
除了上面的几种分类性能测试,还有一种是失效性测试,就是系统局部发生问题时,其它模块是否可以正常的运行。这个在极少数情况下才会要求进行测试。使用到的情况比较少。

命令执行脚本:

jmeter -n -t D:***\项目**\jmeter\外汇圈.jmx -l D:\result.jtl -e -o D:\jmeter-report\test0904

分布式压测

Jmeter分布式执行原理:
1、Jmeter分布式测试时,选择其中一台作为控制机(Controller),其它机器做为代理机(Agent)。
2、执行时,Controller会把脚本发送到每台Agent上,Agent 拿到脚本后开始执行,Agent执行时不需要启动Jmeter,只需要把jmeter-server.bat文件打开,它应该是通过命令行模式来执行的。
3、执行后,Agent会把结果回传给Controller,Controller会收集所有Agent的信息并汇总。

配置:
一、windows下负载机的配置(执行机)
1、在执行机上安装相同版本的JDk和Jmeter(参考调度机的安装)
注意:JDK和Jmeter都要配置环境变量
Jmeter 环境变量的配置:
在系统环境变量中添加:
JMETER_HOME
C:\jmeter\apache-jmeter-3.3\bin

在path系统变量中添加如下配置:
%JMETER_HOME%\bin;

2、在执行机上自定义端口号
  1、进入Jmeter的bin目录,找到Jmeter.properties文件,打开该文件修改如下两个配置项,比如修改端口号为:1355(默认端口号为:1099)
    server_port=1355
    server.rmi.localport=1355
    (记得取消注释)
  2、启动执行机上的Jmeter-server.bat,如下图,端口号已经修改为:1355
  
3、在调度机上添加远程的负载机
  进入Jmeter的bin目录,找到Jmeter.properties文件,进行如下配置:
  
4、在调度机上打开,Jmeter,如下图即可启动远程的负载机
   
5、验证:
 启动后如果运行正常,在调度机上可以看到远端负载机的执行结果,如下图:
 
 在执行机上有如下显示:
 

A、若是脚本中设置的并发线程数是100,采用3台slaver机器去施加压力,那么对于服务端来说,此时的并发线程数是300。
B、为了减少出错的可能性,最好按照如下Jmeter 分布式要求:
1、各个机器在相同目录下安装相同版本的jdk;
2、各个机器在相同的目录下安装相同版本的jmeter;
3、配置/etc/hosts的IP和hostname的映射。
4、修改各个机器的jmeter的默认内存参数,从512m调整为合适大小。

集合点

https://blog.csdn.net/qq_36350532/article/details/80622349
在性能测试的时候,设置集合点是为了实现绝对的并发,测试服务器的承载能力。当所有的线程都达到集合点的时候,才开始发送请求。
集合点:让所有请求在不满足条件的时候处于等待状态。

如:我集合点设置为50,那么不满足50个请求的时候,这些请求都会集合在一起,处于等待状态,当达到50的时候,就一起执行。从而达到并发的效果。

那么Jmeter中可以通过同步定时器 Synchronizing Timer 来完成。

Number of Simulated Users to Group by:按组分组的模拟用户数。
timeout in milliseconds:Timout的意思是等待请求多久后,不管线程数有没有到达设置的并发数量都开始运行测试。

注:同步定时器要在请求之前设置。

场景一:线程数设置为6,集合点为3,超时为0,点击运行。

可以看到有6个结果,此处分成了2组进行并发,每次是3个用户。

场景二:线程数设置3,集合点设置为4,超时为0,点击运行。

发现没有执行请求,需要手动stop。原因:不够并发数且超时为0

场景三:线程数设置6,集合点设置为4,超时为0,点击运行。

发现只有4个请求,然后一直都没有停止,需要手动stop。原因:第一组够集合点,一起并发,第二组只有2个,不够集合点。
场景四:线程数设置6,集合点设置为6,超时为0,点击运行。

可以看到有6个请求。分1组执行。
场景五:线程数设置6,集合点设置为4,超时为5000,点击运行。

分2组,发现先有4个请求,为第一组,5秒后,出现后2个请求,为第二组,共6个。
结论:
Timeout in milliseconds: 如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值才释放。也就是说,如果线程数不足集合点中设置的数,就会一直等待,需要手动stop。

如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间(毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。也就是说如果线程数不满足集合点中设置的值,则在timeout中设置的时间后继续执行不足的那些线程。

Timeout in milliseconds默认为0。所以当timeout设置为0,但是线程数又不满足集合点中设置的值时,就会一直等待,不执行请求,需要手动stop。

同步定时器是在每一个采集器之前执行的,不管定时器的位置是在采集器之前还是之后,都是在采集器之前执行。

如果一个线程中存在多个采集器,同步定时器和这些采集器在同一级(同一节点下),则同时作用于这些采集器。

如果需要一个定时器单独对应某一个采集器,可以在采集器的子节点中创建定时器。

一个线程组多个请求的执行顺序
今天被这个问题困扰了很久,一个线程组下有多个请求,比如线程组设置100,下面有请求1,请求2,请求3,那么如何实现对请求1进行100并发,再对请求2进行100并发,再对请求3进行100并发呢?
实际运行后在结果树中查看结果,请求1,2,3会交替出现,也就是说某个线程完成请求1之后立刻执行请求2了,这个时候有些线程请求1还未完成。
即只对请求1进行了并发,而请求2,3开始的时间不确定,没有实现并发。
百度搜索了很多帖子都不得其解,最后突然想到前些天看到的集合点的概念,发现了解决方法,分享出来希望能解决大家在性能测试中遇到一样的问题。
在线程组下添加Synchronizing Timer,Number of Simulated Users to Group by(这个参数就是集合的线程数)与线程组中的线程数设置一致,我这里设置100.那么在请求1的并发完成,请求2会等100个线程集合后同时并发,同理,请求3也会如此,所以将Synchronizing Timer配置在线程组下,对每一个请求生效。这样就完成了每个请求依次并发~

修改TCP端口范围

Address already in use : connect
该问题的原因为:
Windows 提供给 TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收他们。就导致我们在短时间内跑大量的请求时将端口占满了。
解决方案:    
1.cmd中,用regedit命令打开注册表
2.在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters下,
1)右击parameters,添加一个新的DWORD,名字为MaxUserPort
2)然后双击MaxUserPort,输入数值数据为65534,基数选择十进制
3.一定要记得重启电脑哦

命令执行

jmeter -n -t D:\项目\jmeter\外汇圈.jmx -l D:\result.jtl -e -o D:\jmeter-report\test0904

jmeter -n -t xx.jmx -R xxx.xxx.xxx.xxx:5174,xxx.xxx.xxx.xxx:5172 -l xxx.jtl -j xxx.log
-R表示选择执行=远程启动
-r 表示启动所有执行机=远程全部启动

  • 点赞
  • 收藏
  • 分享
  • 文章举报
hxx_hhh 发布了2 篇原创文章 · 获赞 0 · 访问量 20 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: