什么是性能压测?

  • 也是最近刚刚接触到,就是被测试的系统,在一定的访问压力下,看程序运行是否稳定/服务器运行是否稳定,通常情况,是模拟多个请求同时 请求服务器,也就是在某个时间内,比如说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,里面大牛已经为我们整理好了许多的学习资料,有自动化,接口,性能等等的学习资料!人生是一个逆水行舟的过程,不进则退,咱们一起加油吧!

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

  1. 使用JMeter做压力测试

    使用JMeter做压力测试 1.下载Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 2.启动jmeter 运行bin/jmeter.bat ...

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

    学习使用Jmeter做压力测试(一)--压力测试基本概念 一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测 ...

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

    数据库测试 JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本. 根据脚本,JMeter可通过线程组来模拟真实用户对Web ...

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

    JMeter可以做为Web服务器与浏览器之间的代理网关,以捕获浏览器的请求和Web服务器的响应,这样就可很容易的生成性能测试脚本.根据脚本,JMeter可通过线程组来模拟真实用户对Web服务器做压力测 ...

  5. 【转】学习使用Jmeter做压力测试(二)--压力测试的实施

    JMeter测试步骤: 1.建立测试计划 2.添加线程组 3.添加HTTP请求 4.增加监听器 5.执行测试计划 6.根据JMeter提供的报告分析结果 一.目标 测试访问目标服务器网站首页的每秒查询 ...

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

    一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...

  7. [Jmeter]用Jmeter做压力测试(分布式)

    Jmeter 是Java应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具提 ...

  8. 【转】学习使用Jmeter做压力测试(一)--压力测试基本概念

    一.性能测试的概念 性能测试是通过自动化的测试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行测试.负载测试和压力测试都属于性能测试,两者可以结合进行. 通过负载测试,确定在各种工作负载下 ...

  9. Jmeter做压力测试

    1)首先双击bin/jmeter.bat 2)创建Thread Group 3)配置HTTP Request 4)配置Aggregate Report 5)配置并发数和并发时间 6)点击绿色按钮,执行 ...

随机推荐

  1. Ajax实例二:取得新内容

    Ajax实例二:取得新内容 通过点击pre和next按钮,从服务器取得最新内容. HTML代码 <div id="slide">图片显示区</div> &l ...

  2. faster-rcnn anchor_target_layer、rpn_proposal_layer、proposal_target_layer

    faster rcnn中这三层是单独生成的层,也是复现最复杂的层 anchor_target_layer作用:从众多的anchor中选取出正负样本供rpn网络学习(实际上就是把anchor和gt进行配 ...

  3. TensorFlow创建简单的图片分类系统--机器学习

    TensorFlow 参考链接 http://www.wolfib.com/Image-Recognition-Intro-Part-1/ 环境要求 linux amd64(必须是64位处理器)pyt ...

  4. tomcat端口被占用如何解决

    有时候我们在eclipse中启动项目时,Tomcat服务器会报错,显示8080.8009.8005这几个端口被占用,此时你用debug启动项目时会发现不管用,console控制台什么信息也没有,此时产 ...

  5. parsing XML document from class path resource [applicationtext.xml]; nested exception is java.io.FileNotFoundException: class path resource [applicationtext.xml] cannot be opened because it does not e

    控制台异常: parsing XML document from class path resource [applicationtext.xml]; nested exception is java ...

  6. 分布式网上商城项目- BeanDefinitionStoreException

    BeanDefinitionStoreException: 严重: StandardWrapper.Throwable org.springframework.beans.factory.BeanDe ...

  7. 07.安装及使用gitlub

    博客为日常工作学习积累总结: 1.安装gitlub sudo yum install -y curl policycoreutils-python openssh-server openssh-cli ...

  8. ORA-00911: 无效字符 问题和解决

    1.原本java插入数据库表数据写法是这样的 String sql = "INSERT INTO AAA (id1,id2,id3,id4) VALUES ('1','2','3','4') ...

  9. 发送邮箱验证码、session校验

    本篇主要描述“发送邮箱验证码.session校验”相关前(html\js)后(java)台代码,业务逻辑示例,闲话少诉,直接上代码. 1.引入的jar包是mail-1.4.jar 2.java底层发送 ...

  10. IOS移动端(H5)alert/confirm提示信息去除url

    前几天写移动端项目用alert和confirm进行信息提示,但发现在iOS系统中,每次提示信息上面都会被添加一行URL地址,安卓却没有,经过查找之后,果然不出所料,兼容!!兼容!!!兼容!!! 需要重 ...