Jmeter做压力测试的心得

什么是性能压测?

  • 也是最近刚刚接触到,就是被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定,通常情况,是模拟多个请求同时 请求服务器,也就是在某个时间内,比如说1秒内,调用接口达到200次,结果就是接口调用成功率、最大请求花费时间、最小请求花费时间还有一些性能参数,做性能压测目前来讲大多数来说都是借助 工具软件来完成的,真正去写一套脚本来完成性能压测的步骤已经很少很少了,所以我们接下来讲的就是比较常用的工具-Jme

前期准备!!!

Jmeter性能参数配置

  • 线程数:一个用户占一个线程,200个线程就是模拟200个用户;
  • Ramp-Up Period(in seconds):设置线程需要多长时间全部启动。如果线程数为200 ,准备时长为10 ,那么需要1秒钟启动20个线程。也就是每秒钟启动20个线程;
  • 循环次数:每个线程发送请求的次数。如果线程数为200,循环次数为10,那么每个线程发送10次请求。总Samples为200*10=2000。如果勾选了“永远”,那么所有线程会一直发送请求,直到选择停止运行脚本。
  • 注意,如果要真正模拟多个用户并发的话,比如说你要模拟100个用户并发,那么你的线程数一定得是100,不能是25个线程,每个线程 内包含4个请求,举个栗子,假如有4个接口,要模拟2000个用户并发,每个接口500个用户,那么你的解决方案是:建立4个线程组,每个线程组的线程数是500,同时并发运行4个线程组(这一点你不用做,jmeter的机制 就是线程组都是并发运行的,不用担心这个)

Summary Report参数解释

  • Samples:发送了多少个请求;
  • Average:平均请求时间;
  • Min:最小请求时间;
  • Max:最大请求时间;
  • Error:请求失败率;
  • Troughput:Throughput,即每秒钟服务器处理的Samples,单位是tps(transaction per second),也有说成是rps(request per second);
  • KB/sec:服务器每秒接收的数据量;
  • 90% Line:90%请求响应时间不会超过XX秒;
  • Median:中位数,50%响应时间小于XX秒;

调度器的使用?

答:

  • Jmeter的线程组设置里有一个调配器设置,用于设置该线程组下脚本执行的开始时间、结束时间、持续时间及启动延迟时间.
  • 启动时间:测试计划什么时候启动,启动延迟会覆盖它。当启动时间已过,手动运行脚本时也当前时间也会覆盖它(但启动时间页面显示不会变);
  • 结束时间:测试计划什么时候结束,持续时间会覆盖它;
  • 持续时间(秒):测试计划持续多长时间,会覆盖结束时间;
  • 启动延迟(秒):测试计划延迟多长时间启动,会覆盖启动时间.

影响性能压测的参数有哪些?

答:

  • (1).系统服务器所在机器的环境,包含硬件配置内存大小和系统,首先内存大小是这样,比如我们的内存条大小是4G,那么服务器分给用户可支配的大小可能只有3G,剩余的1G用于 系统自身调用,其次,取决于我们当前服务器所在的系统,实际上对应的就是不同的系统默认设置的线程栈所占用的内存大小不同,我们通常所说的线程对应的我们的物理资源就是 线程栈所占用的内存,不同的系统这个值是不同的,可以在装完系统后进行更改,假如我们用户所支配的内存大小是3G,windows一个线程栈是1M,那么当前服务器最多也就支持 3*1024个线程并发,超过这个数目,就需要等待前面的线程完毕之后才能执行,也就是所说的等待状态.
  • (2).web 服务器的配置,我们目前的接口基本上 都是部署在tomcat上,tomcat自身会有一个关于进程的配置,包括最大进程连接数、请求超时时间等.

如何添加关于服务器的CPU、内存等的测试查询?

答:

  • 1.下载Jmeter Plugins manager插件,下载地址 http://jmeter-plugins.org/downloads/all/ ;
  • 2.解压文件,并将jmeter-plugins-tst-2.0.jar放在jmeter-3.0\lib\ext路径下;
  • 3.重启Jmeter,并点击上方菜单选项->Plugins Manager;
  • 4.点击Avalible Plugins并找到Perfmon插件、点击右下角的Apply Changes and Restart Jmeter;
  • 5.重启后点击测试计划->添加->监听器->jp@gc - PerfMon Metrics Collector;
  • 6.下载Jmeter ServerAgent插件,下载地址 http://jmeter-plugins.org/downloads/file/ServerAgent-2.2.1.zip;
  • 7.解压文件,并将文件放到服务器所在的机器上,目前这款插件支持windows、linux环境;
  • 8.启动ServerAgent,windows用bat启动,linux用sh启动,默认占用端口4444;
  • 9.在Jmeter的打开界面的jp@gc - PerfMon Metrics Collector插件中配置Host/IP为服务器的IP,然后添加测试的内容,有CPU、内存、网络等;
  • 10.在UI方式执行测试计划,就会有结果,但目前还未找到命令行生成的测试查询包含这个插件

如何通过命令行的方式执行测试计划并生成html测试查询?

答:

  • 执行命令:jmeter -n -t “test JMX file” -l “test log file” -e -o “Path to output folder”
  • 参数解释:
    test JMX file-测试计划所在的文件 支持格式为.jmx文件格式;
    test log file-默认生成的测试查询文件 支持格式为.jtl或者csv文件格式,默认是.jtl;
    Path to output folder-html测试查询存放的路径,是个文件夹;
  • Jmeter配置:在jmeter.properties或者user.properties确认如下配置项;
  • jmeter.save.saveservice.bytes = true
  • jmeter.save.saveservice.label = true
  • jmeter.save.saveservice.latency = true
  • jmeter.save.saveservice.response_code = true
  • jmeter.save.saveservice.response_message = true
  • jmeter.save.saveservice.successful = true
  • jmeter.save.saveservice.thread_counts = true
  • jmeter.save.saveservice.thread_name = true
  • jmeter.save.saveservice.time = true
  • jmeter.save.saveservice.timestamp_format = ms
  • jmeter.save.saveservice.timestamp_format = yyyy/MM/dd HHss

Http请求中的Cookie设置

答:Cookie的设置中,也就是HTTP信息头管理器中,如果要设置多个key和多个value, 只需要建立一行,名称是Cookie,值是key1=value1;key2=value2;key3=value3的格式

GUI和Shell压测方式的差异

 
  1. 1.GUI页面更适合单次调试或者少并发的情况下,否则大并发下易造成聚合报告、查看结果树等加载缓慢,图形卡死;
  2. 2.Shell页面实时统计(每30s刷新一次)请求总数、平均响应时间、最小请求时间、最大请求时间以及并发量;
  3. 3.Shell页面压测过程中,会实时在指定日志文件中记录每个线程每个请求的执行过程,展示项可在jmeter.properties文件中的jmeter.save.saveservice选项下个性化设置;
  4. 4.Shell页面压测结束后,会产出更加详细数据以及可视化的html格式的测试报告,更加便于查看和统计(如若压测过程中手动停止压测,如ctrl+c,则不会产生报告);

BeanShell和自定义函数实现MD5算法的差异

 
  1. BeanShell作为前置处理器中的一种,会在线程发送请求前完成所需操作,如本次压测过程中,由于业务需求,需要进行签名操作,它是脚本语言,动态加载执行,所以效率不高,不太适合放在循环内部,易造成多线程同时调用BeanShell,阻塞在发送在http请求前,实际上客户端并没有在单位时间内发送预期请求数到达服务器端,从而看到服务器的吞吐量和预期并发量相差很多。

Websocket相关压测

答:Jmeter本身不支持websocket协议的,所以需要安装第三方的插件还有6个依赖包。链接: http://pan.baidu.com/s/1kV8QmN1 密码: hx2v 安装方式很简单,解压完成以后直接放到jmeter的\lib\ext\目录下,然后重启Jmeter就OK了,以下为各项参数含义

 
  1. WebServer:
  2. (1)Server Name or IP:WebSocket发送的目标服务器的地址或者名称;
  3. (2)Port Number:WebSocker服务器监听的端口号。(一般是HTTP 80端口,可以通过WireShark数据包得到);
  4. Timeout:
  5. (1)Connection – 发送一个连接请求后,Jmeter等待连接完成的最长时间,单位是毫秒;
  6. (2)Response - 对响应消息的最大等待时间;
  7. WebSocket Request:
  8. (1)Implementation – 只支持RFC6455(v13) ,WebSocket协议标准的最新版;
  9. (2)Protocol – 有ws与wss之分, ws前缀是WebSocket连接的辨别标识,wss前缀是WebSocket安全连接的辨别标识。根据自己的实际情况填写;
  10. (3)Streaming Connection – 选择这个TCP session要不要保持,如果勾上标识连接会一直存在,如果没有勾上,那么得到第一次响应后该链接就会被关闭;
  11. (4)Request data:填入将要发送的请求,要跟开发沟通好,这个是什么格式的消息;
  12. WebSocket Response:
  13. (1)Response Pattern – 采样器将等待含有该标识的消息并继续通信(或者直到timeout,该连接关闭);
  14. (2)Close Connection Pattern – 如果服务器返回的消息含有这样的字符,就结束会话;
  15. (3)Message Backlog – 定义服务器返回消息保留的最大长度;
  16. Jmeter上完成Websocket的压测主要流程会涉及到以下三个请求
  17. 第一步是http get请求,如http://192.168.6.233:8445/socket.io/?token=test&clientId=GYjJPnSWXYtxb&EIO=3&transport=polling&t=test,得到的response会含有一个字典包含一个字段叫做[‘sid‘],把对应的value值拿到 (可以采用后置处理器中的正则表达式提取器),这一步实现就是向服务器第一次握手,服务器返回唯一的一个会话id;
  18. 第二步是http get请求,如http://192.168.6.233:8445/socket.io/?token=test&clientId=GYjJPnSWXYtxb&EIO=3&transport=polling&t=test&sid=value,就是在第一步请求后拼接上sid=value,value等于第一步拿到的值,这一步实现的是向服务器传输一条数据,然后服务器返回响应数据,第二次握手;
  19. 第三步是websocket请求,如ws://192.168.6.233:8445/socket.io/?token=test&clientId=GYjJPnSWXYtxb&EIO=3&transport=websocket&t=test&sid=value,就是在第二步请求上将transport=polling改为transport=websocket,这一步实现的是和服务器正式确认连接;

结语:

跟大家推荐一个学习资料分享群:747981058,里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!人生是一个逆水行舟的过程,不进则退,咱们一起加油吧!

原文地址:https://www.cnblogs.com/nanaheidebk/p/10070765.html

时间: 2024-10-10 16:46:37

Jmeter做压力测试的心得的相关文章

如何用Jmeter做压力测试 --- 转

Jmeter是一个性能测试工具,同loadrunner类似,他功能较多,我们常用的功能是用jmeter模拟多浏览器对网站做压力测试.    下载jmeter地址 :http://jakarta.apache.org/我们一般的网站,在进入业务功能前先需登录,然后才能访问业务功能.下面介绍如何用jmeter登录系统再对主业务做压力测试.1 运行jmeter    2 左边树将出现测试计划.工作台两根节点.3 选择测试计划,按右键->添加->threads(users)线程组    线程组能设置以

(转)学习使用Jmeter做压力测试(三)--数据库测试

数据库测试 JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本. 根据脚本,JMeter可通过线程组来模拟真实用户对Web服务器做压力测试.本文描述使用JMeter进行数据库测试的过程.创建测试计划,模拟 并发用户发送SQL请求到数据库.测试数据库. 性能测试的目标是找到系统的性能瓶颈.本文将通过构造测试场景,完成对数据库的测试. 场景: 1.单用户: a.SQL语句优化:    b.数据库约束检查:   c.分页查询

【转】学习使用Jmeter做压力测试(三)--数据库测试

JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本.根据脚本,JMeter可通过线程组来模拟真实用户对Web服务器做压力测试.本文描述使用JMeter进行数据库测试的过程.创建测试计划,模拟并发用户发送SQL请求到数据库.测试数据库. 性能测试的目标是找到系统的性能瓶颈.本文将通过构造测试场景,完成对数据库的测试. 场景: 1.单用户: a.SQL语句优化:    b.数据库约束检查:   c.分页查询: 2.并发用户

学习使用Jmeter做压力测试(一)--压力测试基本概念

一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下系统的性能,目标是当负载逐渐增加时,测试系统各项性能指标的变化情况.压力测试时通过确定一个系统的瓶颈或者不能接受的 性能点,来获取系统能提供的最大服务级别的测试.性能测试主要包括负载测试.强度测试.容量测试. 二.性能测试的指标 web服务器: Avg Rps: 平均每秒的响应次数 = 总请求数 /

使用jmeter进行压力测试及如何添加负载机

Jmeter是一款简单灵活且强大的性能测试工具,同时也可以做接口测试. 由于初识jmeter,今天来记录一下如何对一个web进行一个简单的压力测试. 1.首先在测试计划里面添加一个线程组,然后再其下面添加一个“HTTP请求”,来存放我们要测试的web信息. a.web的IP地址 b.请求方式:这里用的是get c.路径 d.发送请求时的入参 参考图片如下: 2.因为我们要做压力测试,所以在线程组页面也要进行一些设置 a.线程数==20     这里的线程数也就是我们所说的用户并发数,有20个用户

使用 JMeter 进行压力测试

原文链接:https://www.cnblogs.com/stulzq/p/8971531.html 一.前言 压力测试是每一个Web应用程序上线之前都需要做的一个测试,他可以帮助我们发现系统中的瓶颈问题,减少发布到生产环境后出问题的几率:预估系统的承载能力,使我们能根据其做出一些应对措施.所以压力测试是一个非常重要的步骤,下面我带大家来使用一款压力测试工具JMeter. 二.关于JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它

在linux中给你的应用做压力测试

在linux中给你的应用做压力测试 作者: 立地 邮箱: [email protected] QQ: 511363759 一.webbench 1.在Ubuntu中安装webbench —支持get,head等请求,但不支持post请求 wget http://blog.zyan.cc/soft/linux/webbench/webbench-1.5.tar.gz tar zxvf webbench-1.5.tar.gz cd webbench-1.5 make && make insta

使用Application Center Test (ACT)来做压力测试 【转】

在我们完成了基于SPS2003的开发,实现了我们的具体应用以后,我们是不是就可以直接请用户来使用了呢?如果我这么做,那么有经验的开发人员一定会对此嗤之以鼻:居然连压力测试也不做!真是不想活了…… 呵呵,是啊.开发环境往往只考虑功能,到了具体环境中,就需要考虑有大量的用户来访问的时候,很多功能会不会出错?性能会怎么样呢?……我们这里就简单看看,怎么来做压力测试. 相信作压力测试肯定有很多工具,而我们一般使用的,现在很多是Application Center Test (ACT).这个东东是VS.N

通过命令行对CPU负载做压力测试

无意间在51首页上看到一篇关于"通过命令行制造CPU负载或压力"的文章,感觉不错,先记录下来,为将来的使用做好笔记记录! 很简单,就一个命令: # cat /dev/urandom | md5sum 然后通过top观察,cpu的值果然很高,说明测试成功! 有图有真相^ _ ^ 通过命令行对CPU负载做压力测试