Gatling实用技术高性能轻量级压力测试工具_第1页
Gatling实用技术高性能轻量级压力测试工具_第2页
Gatling实用技术高性能轻量级压力测试工具_第3页
Gatling实用技术高性能轻量级压力测试工具_第4页
Gatling实用技术高性能轻量级压力测试工具_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Gatling实用技术----高性能轻量级压力测试工具项目背景开发部门需要压力测试,但依赖QA的压力测试组不够便捷,因为其行动周期较长(业务讲解,计划制定,脚本匹配,文档撰写....),另外QA组使用的工具也比较专业,如果让开发部门自己用也不那么轻便。否能找到一种方法,让开发人员跑一跑压力测试呢(在专业的QA压力测试组介入以前)?本文档适用对象有一定编程基础的开发人员对应用性能有很高要求的开发团队本文不适合的对象■希望所有功能均由图形界面完成的使用者本文阅读时间1~2小时,建议分部阅读,中间安排充足的时间实验。1Gatling简介Gatling的Scala基础封装是基于Akka编程的,它是非阻塞异步编程模型,可以高效执行并有极高的容错率。专用web测试。像LR那样录制脚本,不用从零开始。脚本使用scala语言,易懂,易修改,控制灵活。基于JVM,随拷随用。(对比LoadRunner的客户端安装以及JMeter需要XWindow组件,这个方便很多),操作接近apache的ab。

原生支持NIO,并发性能很好,即使性能较差的电脑也能发起很大的负载压力。基于HTML的报表,简单易读。2Gatling入门2.1准备工作2.1.1下载下载地址:/excilys/gatling/wiki/Downloadsjdk6对应1.5版本,jdk7以上对应2.0版本。本文档使用1.5.2版本进行演示。2.1.2配置环境变量需要配置好JAVA_HOME和GATLING_HOME环境变量,后者指向Gatling的根目录。J臼Gatlingl.5直己wmb请求2.1.3Gatling目录结构J臼Gatlingl.5直己wmb请求gatling-sh陶reco-rder.batreco-rder.shJ&confapplication.coMgatling.conf<日忘i脚本例子Alogbiaclc.xmll> 日忘i脚本例子臼?resultsJ user-files>百datareqnest-bodies,BFiniLilationFD-旧jadvancedJ&ba^ic国Ea&icExarnpleSirnulation.scalfi2.1.4Recorder.bat和gatling.batRecorder.bat和gatling.bat一个用来录脚本,一个用来执行脚本。它们也提供了linux版本.sh。Recorder是个桥接在浏览器和web服务器之间的代理,如果浏览器通过它访问网络时,它能记下浏览器的访问轨迹。Reocrder提供了UI界面,让配置和执行变得简单。同时,Recoder也是一个scala代码的生成器,它能把访问轨迹记录成scala代码。Gatling.bat是一个包含了编译,执行scala代码的脚本,它提供了一些参数供使用者指定执行的细节(比如JVM_OPTS),运行它可以选择需要执行的scala代码,创建非阻塞的线程模型执行压力测试。2.2录制一个脚本2.2.1启动Recorder执行{Gatling目录}/bin/recorder.bat|.sh,会启动一个图形控制界面,同时在后台启动了一个代理服务器。配置浏览器,令浏览器通过这个代理服务器访问互联网,则一切操作都会被其记录。2.2.2浏览器指向Recorder代理启动Recorder之后,已经在本机的8000和8001上启动了代理,接下来我们配置一下浏览器,让它通过Recorder的代理访问网络。缱存量大为[D会9■k_Tl.^j降私安全巨步岸现致誓权网结弟新1证书祸 览您的网铝内客援芹当前已使用350MB磁色兰归怒的应用程手缓巨当前I巳使荏0-715遂坦空印W网站请求保斑串供离绣更用时通知我①以F网项:袍蔑注卧:取消帮助E)配置好以后,当Recorder关闭时,浏览器无法访问任何网站,证明配置成功。当脚本记录工作结束之后,别忘了改回无代理的状态,否则只要recorder一关,浏览器就不能访问互联网了。笔者建议,如果经常录压力测试脚本,可以单独安装一个不常用的浏览器专用,比如chromo2.2.3录制脚本录制以前,启动待测试的应用服务器,本文用grails搭了一个简单的web应用程序,跑在localhost:8080/teset/,然后打开浏览器,切换到Recorder点击start,回到浏览器访问地址,切回Recorder点击stop&save,这样就完成了一次录制。

J臼GatingL5J&2.2.4脚本保存位置J臼GatingL5J&binISIgatling.bat_gstling.sh国]reco-rder.bat」reco-rder.shconispplication.confjgatling.oonf凶Ici-gback.xmllibresults□&er-file5-&dataBreque-st-bodies&simulations>advanced[=1RecordedSiim□Iation.5caIa录制完成的脚本放在了这里,路径根据Recorder的Outputfolder指定,重名情况下会覆盖旧文件。如果录制的文件多了,可以考虑将这个文件夹弄到svn上去,以防万一。2.3编辑脚本2.3.1脚本内容分解我们打开刚才录好的RecordedSimulation.scala,看到内容定义,我们只关注httpConf,scn这两个对象就够了。importcciri.rxcilys■ebi」gqtling.B匚」Prrdef」_importccm„excilys..ebi.gatling;.http一Predef"_importccim.excilys.ebi」gatling.jdbc」Predef」_iimportccfi.excilys„ebi.gatling:“http.Hieaders„Marres»_importalkka..util-duration«_Importbootstrap.-RecordsdSiniulatianejftendsSimulation(importasEerti-cnEu_RecordsdSiniulatianejftendsSimulation(yalht^^onf=httptonflg.baseURL(11https//aduBg-™fokbcn")rScceptHeader(,Rtext/.hmLaPpHcation/xhlml+.MfflLapplication/藏灯qWr9,七q=SfJ•女eptEnc<?dingHeadel("依应&衣£4我必).acceptLflnguagEHefldErfzh-jzn,zhjq^^Sjen~usiq=O.5j.en; ").ccnne匚tizin〔■kEEip・aliivE").uaerAgentHieader('Hozill.a/5..0(Uindo^sNT巳1;WOW6-4;ry;:23 例131Eircfox/SS.01')vialsen-scenaricf^Scenario-Name*).get['"http;//lotaIhost;8OB0/teset/'")setUp(senJU5ers(l&&)・protocolCDnfig(http£onf))观察相同颜色的箭头,其功能脚本内容一目了然“用httpConf当做访问协议,用scn描述访若干问地址和暂停时间,用scn.users描述并发个数,执行访问。”当然,所举的例子很简单。而一个完整的操作流程至少包含“登陆验证,操作,退出”。在实际的录制过程中,读者可能会发现录制完的脚本中有很多杂乱的请求,这是因为网页中的css,js等资源也是通过请求获取,凡是请求都会被记录到脚本,形成了像“杂音”一样的内容。我们可以在编辑脚本时,适当删除它们。因为很多这类请求消耗的是缓存服务器的性能,而大说数情况我们更关注应用服务器。2.3.2编程思路/将用户的操作,分解成多个“get”和“post”请求。/定义每个请求对应的参数变量。/缓存请求返回的值,如需要作为下次请求的参数。/使用“scn.users”属性,模拟多用户多线程。

可以阅读Gatling提供的演示脚本BasicExampleSimulation.scala,看看怎样给每个请求指定不同的header,每个请求指定不同参数,感受编程带来的灵活性。读者可能会感受到,Galting其实是个编程类库,提供了各种发送网络请求的基础类。2.4运行压力测试2.4.1编程思路执行{Gatling路径}\bin\gatling.bat|.sh-sf〈脚本路径>。这时屏幕开始输出日志,观察负载应用服务器的日志,会发现正在处理批量的请求。GtiDOsea[0]simLilacionnumber:GtiDOsea[0]simLilacionnumber:RecordedSimulationCcptional>执行完毕之后,在此录下会产生报告文档,直接访问index.html即可阅读。J臼Gatlingl.5卜Bbin>日confABlibJ&re-sultE&recordedsimulation-20130922191506^^□&j&『&s.tyl&国indeK.htrt^^|习req_request-2-93baff64Bd9a0cl3a4;[7]E.imulation.log]I j卜&use-r-files

压力测试的结果,分为GLOBAL和DETAILS两栏,分别对平均分数和每组请求的分数做了统计。我们重点参考Request/sec(每秒处理请求个数)和Transactions/sec(每秒处理事务个数,事务即每个模拟用户的一组请求)更详细的测试报告说明,请参考官网/excilys/gatling/wiki/Reports2.4.1注意事项发送端与负载端的网络环境与带宽Galting作为发送端发起大量的请求,是很消耗网络带宽的。如果开发机与应用服务器之间有带宽限制,则不应将发起端放在开发机,而应该放在负载端同机架的服务器,确保发起端有足够的带宽输出请求。考虑Galting本身会占用内存和CPU去发起请求和接收请求,所以Galting不应该与负载端同使用一台服务器,或者共享硬件资源的两个虚拟机。负载压力根据脚本所定制的并发数,Galting需要占用内存去生成对象。请根据情况,调整Galting的配置文件,将更多内存分配给Galting的JVM,让其有足够的内存去发起请求。3Gatling提高3・1测试计划请在着手录制脚本以前,仔细制定一个计划,磨刀不误砍柴工。比如制定多级压力,逐级测试,找到应用的极限。3.2活用scala,实现功能型测试scala代码可以实现任何控制逻辑。比如http类提供了一个check()方法,可以在发送压力请求的同时检查和记录每次访问的结果。检查结果记录在report中,而记录的结果放在并在下次请求中复用(对应某些串联请求的业务场景)。这样,压力测试就包含了功能测试,用来检查软件功能是否正确。关于使用方法的细节,请参考官方文档的高级应用章节/excilys/gatling/wiki/Advanced-Usage3.3编辑可复用脚本Scala是面向对象的,利用好这一点,我们可以针对项目的特点设计通用测试脚本,让它为多个项目服务最好的参考,就是Gatling提供的高级脚本例子:{Gatling目录}/user-files/simulations/advanced里面讲脚本分成了若干文件和对象,令复杂脚本的结构更加清晰和可编辑。提示:scala类可以直接访问同一个包路径下的所有类,不用importo3.4使用窍门,导入IDE用eclipse新建一个普通project,文件目录指向Gatling的文件目录。之后就能在eclipse里编辑脚本发起测试了。在这基础上,eclipse再加上了scala的插件,那就更加方便,所有的脚本都会高亮显示关键字,而且可以使用ctrl+shift+F来整理文档格式。Eclipse的Scala插件:/download/current.html根据读者自己的eclipse版本来安装,推荐使用links模式,因为这个插件蛮大的,不用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论