Jmeter做压力测试的心得
什么是性能压测?
也是最近刚刚接触到,就是被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定,通常情况,是模拟多个请求同时 请求服务器,也就是在某个时间内,比如说1秒内,调用接口达到200次,结果就是接口调用成功率、最大请求花费时间、最小请求花费时间还有一些性能参数,做性能压测目前来讲大多数来说都是借助 工具软件来完成的,真正去写一套脚本来完成性能压测的步骤已经很少很少了,所以我们接下来讲的就是比较常用的工具-Jme
前期准备!!!
- 首先,你要去官方那里下载Jmeter的压缩包,官方地址是http://jmeter.apache.org/,另外,你的系统要配置好java环境,我写这篇博客的时候,用的版本是3.0,下载完了之后,进入里面的bin目录下, 找到jmeter.bat这个批处理文件,然后双击,进入jMeter的工作界面,这里面有很多功能,这我们先别去理会这一些,按照我们下面的步骤一点一点来做就可以一个基本的压力测试了.
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 HH
ss
Http请求中的Cookie设置
答:Cookie的设置中,也就是HTTP信息头管理器中,如果要设置多个key和多个value, 只需要建立一行,名称是Cookie,值是key1=value1;key2=value2;key3=value3的格式
GUI和Shell压测方式的差异
1.GUI页面更适合单次调试或者少并发的情况下,否则大并发下易造成聚合报告、查看结果树等加载缓慢,图形卡死;
2.Shell页面实时统计(每30s刷新一次)请求总数、平均响应时间、最小请求时间、最大请求时间以及并发量;
3.Shell页面压测过程中,会实时在指定日志文件中记录每个线程每个请求的执行过程,展示项可在jmeter.properties文件中的jmeter.save.saveservice选项下个性化设置;
4.Shell页面压测结束后,会产出更加详细数据以及可视化的html格式的测试报告,更加便于查看和统计(如若压测过程中手动停止压测,如ctrl+c,则不会产生报告);
BeanShell和自定义函数实现MD5算法的差异
BeanShell作为前置处理器中的一种,会在线程发送请求前完成所需操作,如本次压测过程中,由于业务需求,需要进行签名操作,它是脚本语言,动态加载执行,所以效率不高,不太适合放在循环内部,易造成多线程同时调用BeanShell,阻塞在发送在http请求前,实际上客户端并没有在单位时间内发送预期请求数到达服务器端,从而看到服务器的吞吐量和预期并发量相差很多。
Websocket相关压测
答:Jmeter本身不支持websocket协议的,所以需要安装第三方的插件还有6个依赖包。链接: http://pan.baidu.com/s/1kV8QmN1 密码: hx2v 安装方式很简单,解压完成以后直接放到jmeter的\lib\ext\目录下,然后重启Jmeter就OK了,以下为各项参数含义
WebServer:
(1)Server Name or IP:WebSocket发送的目标服务器的地址或者名称;
(2)Port Number:WebSocker服务器监听的端口号。(一般是HTTP 80端口,可以通过WireShark数据包得到);
Timeout:
(1)Connection – 发送一个连接请求后,Jmeter等待连接完成的最长时间,单位是毫秒;
(2)Response - 对响应消息的最大等待时间;
WebSocket Request:
(1)Implementation – 只支持RFC6455(v13) ,WebSocket协议标准的最新版;
(2)Protocol – 有ws与wss之分, ws前缀是WebSocket连接的辨别标识,wss前缀是WebSocket安全连接的辨别标识。根据自己的实际情况填写;
(3)Streaming Connection – 选择这个TCP session要不要保持,如果勾上标识连接会一直存在,如果没有勾上,那么得到第一次响应后该链接就会被关闭;
(4)Request data:填入将要发送的请求,要跟开发沟通好,这个是什么格式的消息;
WebSocket Response:
(1)Response Pattern – 采样器将等待含有该标识的消息并继续通信(或者直到timeout,该连接关闭);
(2)Close Connection Pattern – 如果服务器返回的消息含有这样的字符,就结束会话;
(3)Message Backlog – 定义服务器返回消息保留的最大长度;
Jmeter上完成Websocket的压测主要流程会涉及到以下三个请求
第一步是http get请求,如http://192.168.6.233:8445/socket.io/?token=test&clientId=GYjJPnSWXYtxb&EIO=3&transport=polling&t=test,得到的response会含有一个字典包含一个字段叫做['sid'],把对应的value值拿到 (可以采用后置处理器中的正则表达式提取器),这一步实现就是向服务器第一次握手,服务器返回唯一的一个会话id;
第二步是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等于第一步拿到的值,这一步实现的是向服务器传输一条数据,然后服务器返回响应数据,第二次握手;
第三步是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,里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!人生是一个逆水行舟的过程,不进则退,咱们一起加油吧!
Jmeter做压力测试的心得的更多相关文章
- 使用JMeter做压力测试
使用JMeter做压力测试 1.下载Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 2.启动jmeter 运行bin/jmeter.bat ...
- 学习使用Jmeter做压力测试(一)--压力测试基本概念
学习使用Jmeter做压力测试(一)--压力测试基本概念 一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测 ...
- (转)学习使用Jmeter做压力测试(三)--数据库测试
数据库测试 JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本. 根据脚本,JMeter可通过线程组来模拟真实用户对Web ...
- 【转】学习使用Jmeter做压力测试(三)--数据库测试
JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本.根据脚本,JMeter可通过线程组来模拟真实用户对Web服务器做压力测 ...
- 【转】学习使用Jmeter做压力测试(二)--压力测试的实施
JMeter测试步骤: 1.建立测试计划 2.添加线程组 3.添加HTTP请求 4.增加监听器 5.执行测试计划 6.根据JMeter提供的报告分析结果 一.目标 测试访问目标服务器网站首页的每秒查询 ...
- (转)学习使用Jmeter做压力测试(一)--压力测试基本概念
一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...
- [Jmeter]用Jmeter做压力测试(分布式)
Jmeter 是Java应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具提 ...
- 【转】学习使用Jmeter做压力测试(一)--压力测试基本概念
一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...
- Jmeter做压力测试
1)首先双击bin/jmeter.bat 2)创建Thread Group 3)配置HTTP Request 4)配置Aggregate Report 5)配置并发数和并发时间 6)点击绿色按钮,执行 ...
随机推荐
- C# abstract,virtual 修饰符
abstract(抽象):该abstract修饰符指示要修改的东西有缺失或不完整的实现.abstract修饰符可以与类,方法,属性,索引器和事件一起使用.abstract在类声明中使用修饰符来指示类仅 ...
- Spring整合Mybatis SQL语句的输出
[1.修改Spring-Mybatis] <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSes ...
- ArrayList详解
一.ArrayList类介绍:(这里给出jdk1.8源码上中文翻译) ArrayList是List接口以可变数组方式实现的,实现了所有的lis接口中的操作,并容许有null等所有元素.除了实现了Lis ...
- 个人免签即时到账收款接口 bufpay.com 支持多账号收款
有很多 bufpay 的用户反馈,单个手机收款有些时候不太方便,切换手机太麻烦:或者是营业额比较多,希望分摊到多个账号上面. 基于以上的问题,bufpay 开发了多手机收款的功能:每个收款的手机安装 ...
- 学习笔记 - Ford-Fulkerson & EK
Ford-Fulkerson & EK - 学习笔记 之前网络流什么的快忘完了 老师讲课的时候一脸懵逼--开始系统复习,从最大流开始 标签:网络流-最大流 『预备』 首先复习了网络流的概念-- ...
- chromium之histogram.h
histogram不知道是干啥的 // Histogram is an object that aggregates statistics, and can summarize them in // ...
- (Oracle)自定义调用AWR&ADDM
Oracle->自定义调用AWR&ADDM 需求描述: 前面设定每天自动生成AWR用于提供前一天的数据库状态信息,但因数据库和信息过多不利于直观检查.此次新增ADDM诊断. ADDM诊断 ...
- Linux基础命令之文件和目录操作(一)
pwd print working directory的缩写,作用是显示当前工作目录的绝对路径,一般进行频繁切换路径时使用. -L 显示逻辑路径(或略软链接文件),不常用. -P 显示物理路径,不常用 ...
- JSP/Servlet开发——第十一章 Ajax交互扩展
1. jQuery实现Ajax的方法: ●除了$.ajax()方法以外,jQuery还提供了其他多种更简单的 Ajax 实现方法,如$.get().$.post().$.getJSON().对象.lo ...
- canvas绘制圆角头像
如果你想绘制的网页包含一个圆弧形的头像的canvas图片,但是头像本身是正方形的,需要的方法如下:首先, 拿到头像在画布上的坐标和宽高:(具体怎么获取不在此做具体介绍) 使用canvas绘制圆弧动画 ...