JAVA性能测试初体验
序言:做自动化测试的时候,一直没想过要去做性能,等到现在做性能的时候,才明白这本身就是一个必须都要经历的过程,就像编程一样,编写小型软件的时候,我们不用过多关注架构和性能,但是等成长到一定时候,就会需要关注软件的可复用性(这是由开发成本决定,这点可以在软件架构上去改善,常说的自动化框架也是为了增强脚本的可复用性和可维护性)、性能瓶颈(这是由系统资源成本决定,空间和时间的调配)、可测试行(这能大大提高测试人员的测试效率,很多时候我们要求开发提供一种测试的接口来方便测试人员进行测试)、可部署性(利用make、ant或者maven,能够大大提高软件发布效率,这也是持续集成中的一种手段)等,因此,测试中的发展其实可以有很多的,不仅关注测试手段,还要关注如何在更多的途径上提高测试效率。下面是对本次性能测试项目至今的一些简单总结,欢迎指正。
一、性能测试项目的背景
性能测试缘起于产品存在大量背景数据时,程序响应时间过慢,而且在特定的情况下有可能会造成一些数据上报丢失,所以需要定位。
产品为C/S架构,采用的协议是snmp协议,运行在jvm上。
二、性能测试的策略
1、测试目的的确定
1)系统监控,包括cpu、内存、线程使用情况,在大数据情况下,发现问题,帮助修正代码结构,系统结构,提高系统的运行效率。
2)确定软件运行资源需求指标。
2、性能测试指标确定
1)确定指标来源,主要包括:产品规格、行业标准、客户需求与故障场景等
2)确定测试特性,例如:系统容量、及时性、稳定性、抗压性、资源利用性等,这些特性可以根据行业性能测试特性以及产品的相关特性来决定。
3)确定具体指标,包括数目和单位。
3、性能测试技术储备
其实性能测试可以算得上是自动化测试的一种大数据测试
1)测试场景准备:准备测试场景,可以理解为对背景数据的构造,其实可以将这种构造理解为另类的接口测试,例如:我们的软件服务器是应用SNMP协议进行通信,设备端有一个agent,专门用来与软件服务器端通信,那么可以虚拟出这么一个agent,保存相应的设备信息,虚拟过程可以通过对在网的实际设备进行录制,然后生成。
互联网中,客户端与服务器的交涉是基于http接口协议,其一般的性能测试都是发送大量的http请求,其实这种过程有一个问题就是无法模拟真实的背景数据,因为报文过于单一,而印象很深的是新浪一位朋友开发的tcpcopy工具,在传输层,将线上数据复制到测试场景下,从而成功模拟了真实场景环境,这是一种很好的测试方法。
(还有一种准备工作就是对测试服务器的选型,包括操作系统类型、CPU内核数目、内存数目等)
2)测试数据准备:这其实就是接口数据,在互联网中,这方面的模拟比较简单,用很多工具,例如LR、jmeter、soaupi等都可以成功构造模拟http报文,从而查看服务器的响应。因为我们采用的是snmp协议,所以业内没有这样的snmp接口工具,所以就自己基于snmp协议包开发了其snmp报文模拟工具。
3)性能测试监控:性能测试过程中,对软件系统服务器的监控是关键,例如:web测试中,往往会对web服务器和数据库服务器、操作系统的指标性能进行监控,因为我们的软件是运行在jvm上,所以直接采用jconsole或者jprofiler监控服务器的内存使用、cpu使用、各个线程使用情况,还有对数据库和操作系统的监控等。
4、性能测试方法
1)基于指标,进行测试数据构造测试,查看系统是否工作正常以及监测是否没有问题。
2)基于指标,在基于测试数据测试的同时,由测试人员参与进行操作,测试在特定环境下的系统工作情况。
3)客户场景模拟测试。
4)随机测试,利用算法进行大量随机数据构造。
三、性能测试调优
1、性能测试是一个不断探索和不断完善的一个测试过程。
调优步骤:衡量系统现状、设定调优目标、寻找性能瓶颈、性能调优、衡量是否到达目标(如果未到达目标,需重新寻找性能瓶颈)、性能调优结束
2、衡量现状,系统性能主要存在问题
1)内存泄露
2)内存占用过大,响应速率慢
3)线程数不断增加,出现死锁或空闲线程
4)某些类实例化数目过多,占用多余的内存空间
3、内存泄露
1)检验方式:内存泄露需要进行时长测试,既将监控界面及系统界面全部打开,进行长时间运行(如12小时),观察系统类的增长情况。
2)问题定位:若出现JVM的Heap持续增长或者Memory views经过时长测试,出现较大规模的红色部分(增长部分),且无法GC。
4、系统内存占用大
1)检验方式:进行某些特定的操作,系统进行大量内存占用或者数据读写操作。
2)问题定位:若系统内存数突发性的增长,且之后不回落,说明某些模块在持续性的占用系统资源。或者出现JVM的Heap有增长,虽不是持续增长,但一直无法回落。
5、线程数目过多或死锁
1)检验方式:进行某些特定的操作,可以使系统产生大量线程操作。
2)问题定位:若系统线程数突发性的增长或持续增长,且之后不回落,说明某些模块在持续性的占用线程。或者观察是否有许多线程来自同一个模块、长期处于waiting或block状态
6、性能调优原则
调优过程中,充分而不过分使用硬件资源、不要一遇到问题就去改善资源环境,然后,合理调整JVM,需要重点掌握一些JVM的参数,并且要善于分析系统架构和JVM的底层工作机制。
总结:性能测试是一个很漫长的过程,不管是做JVM性能测试、WEB架构方面的性能测试,其实道理是相通的,个人觉得,要做好性能测试,不仅要对测试理解,更要对软件架构和底层的服务器工作机制特别理解,不然,往往,你只能去简单做一些所谓的性能测试操作,但是却无法针对很多场景提供有效的测试策略和调优建议。好的性能测试工程师应该是能够快速搭建场景定位问题、提供指标,并且能够对软件系统架构提出有效建议。共勉之
====================================分割线================================
最新内容请见作者的GitHub页:http://qaseven.github.io/

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
中兴通讯:IDC行业发展迅速 模块化备受青睐
近年来,国内IDC市场高热不退,各地兴建数据中心的积极性更是势头良好。众所周知,中兴通讯在数据中心领域发力许久,除了一些集装箱产品以及MiniDC产品被业界津津乐道之外,还沉淀了大数据中心,以及被称为“亚洲第一个T4的国家数据中心”的海外孟加拉中心,成绩显著。 中兴通讯全球云IDC总架构师陈沛对企业网D1net记者表示:“中兴通讯产品链非常广,从通讯到IT,这是不容忽视的优势。在专业方面,尤其是模块产品,解决了IDC传统缺乏灵活性、扩展性等诸多问题,我们的产品不断更新迭代,从早期IDC1.0、IDC2.0,到最初IT模块化甚至到终端化模块,全部是工厂预制化,并且把IT模块延伸到外部的智能模块、制电模块等,颠覆性解决IDC的问题,交付效果理想,不断受到业主和业界广泛关注,中兴通讯秉承诚信原则,一直以来都保证交付效果,以客户为中心。” (图:中兴通讯全球云IDC总架构师陈沛) “模块化”成新焦点 如今“模块”被广泛关注,模块可以有更多的空间,还可以进一步扩展,在整个IT通讯领域都可以应用,在万物互联的世界逐渐升级为重要工具,所以“MDC+”引发了业界的无数想象。 陈沛表示:传统数据中心具有...
- 下一篇
2016年数据中心热门技术盘点
临近岁末,2016年即将走完,回顾这近一年以来发生在数据中心圈里的大事小情,一切都还历历在目,但终将成为历史。数据中心的发展靠的是技术驱动,很多的信息技术都是为数据中心量身定做的。2016这一年,数据中心里也涌现出了一些新技术,同时早先提出的一些技术,可能被人冷落,却在2016年里受到了追捧。技术有如“明星”一样,也有它的生命期,说不定什么时候就被捧红了,有时连自己都不敢相信。下面,我们就来盘点一下,在2016年哪些数据中心技术火了,得到了广泛认可。雾计算 雾计算并不是2016年被提出来的,早在2011年就被思科提出来了,在2012年做了详细定义,只不过那时云计算风头正劲,没有多少人会关注雾计算。雾计算(Fog Computing)是云计算的延伸概念,是对云计算的扩展,所以雾计算从产生以来就和云计算有着千丝万缕的联系。云计算更强调利用网络将计算资源集中起来,提供数据中心整体计算能力,这种技术很好,但更适用于那些大型数据中心,而在更多的中小型数据中心里却没有用武之地。有别于云端计算,雾计算所采取的架构更分散、更接近网路边缘,将计算、通讯、控制和储存资源与服务,分配给用户或靠近用户的设备与...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,CentOS7官方镜像安装Oracle11G