注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网易杭州 QA Team

务实 专注 分享 做有态度的QA

 
 
 
 
 

日志

 
 

简单上传性能测试--测试程序  

来自阿贝   2011-09-20 15:52:05|  分类: 性能测试 |举报 |字号 订阅

  下载LOFTER 我的照片书  |

因为涉及到真实产品,把一些实现的细节屏蔽了。

系统架构简化后如下图:

简单上传性能测试--测试程序 - 网易杭州QA - 网易杭州 QA Team

 测试客户端只要能发送大量上传文件的http请求即可。

 

1、先建立一个conf.properties文件,主要内容如下

threadCount=2   //客户端线程数
requestPerThread=1   //每个线程请求数
filePath=/home/qatest/uploadtest/files/   //存放需上传文件的文件夹,已按照实际统计数据预生成很多文件
requestUrl=http://insp92.space.163.org:8291/fs/formUpload    //请求url

 

2、建立ParseProp.java,其功能是从conf.properties获取参数

为了篇幅考虑,只保留获取“filePath”的代码,其他略

简单上传性能测试--测试程序 - 网易杭州QA - 网易杭州 QA Team

 
3、建立HttpUploadPerfTest.java,代码结构如下:

简单上传性能测试--测试程序 - 网易杭州QA - 网易杭州 QA Team
简单上传性能测试--测试程序 - 网易杭州QA - 网易杭州 QA Team简单上传性能测试--测试程序 - 网易杭州QA - 网易杭州 QA Team
简单上传性能测试--测试程序 - 网易杭州QA - 网易杭州 QA Team简单上传性能测试--测试程序 - 网易杭州QA - 网易杭州 QA Team
 
最后谈几点经验:
1、简单上传服务需要上传文件,文件如何生成?开始的方案是先准备少量几个文件,在构造http请求的时候往文件最后append当前时间戳,使文件内容不同。这种方式,由于文件很大,每次读文件导致垃圾很多,cpu都花在垃圾收集上,使客户端性能比服务端差,最后取消这种方式。
2、自己编程的方式vs用测试工具,一般来说“自己编程的方式”客户端性能好。
3、每次请求一定要详细记录该请求的所有信息,比如线程id、请求id、用户名、文件名、成功信息、错误信息等,以方便事后分析。因为性能测试运行很快,等发现问题的时候已经无法还原现场了。所以记录足够的信息非常重要,不仅是客户端,服务端也需要记录足够信息。而且,如果没有足够信息,也无法进行精确的统计。
  评论这张
 
阅读(569)| 评论(8)
推荐 转载

历史上的今天

评论

s="true" hn1(x.viperatebar right約div> <帧ge();.="_bl miv isitorNam } e)}"/>xtarea> comiv class="came="jst" id="m-3-jst-1"> {comdiv> <帧gass= vname thide"> lass="iblock nbw-fce nbw-f40"> {if x.visitorName==visitor.userName} ${x.visitorNickname|         httan /formlog.163.com/${x.visitocomiv class= <帧gs="ib lass="iblock nbw-fce nbw-f40"> 0 {/list}p target= <謈om他们还 <了Q==/"> m="true">< b yass="iblof} yass="iblocoms="true" hrrb_blank" v> ame="j s#183extonalbldiv> <帧gs="ib {if x.moveFrom=='wap${y. Bargtarea nam}/?="no="0" 37, publishTime:1om${y. Barg08508http://bg/stet="_blank"e)}i=location}ickname,8)com/="true">< i=locati|escape} #--引用候已//qlog.zBLUFFPYnJEVi9LWk1KTzJlMTU2Yz0.jpcom/blog/s0;borv> left u <謎f" 候已Q==/e-heighlank<"> iv target= rn1(x. left _blank"v class="btlink" styv> <7c/exp miv target=h4> brd ame="jspan> mDiv" cl/iv mlokkm1dGtJK1N5cFRBNkkm#--博主发起仅识票//qlog.zBLUFFPYnJEVi9LW0.j

kkms=blog.163.ln:' {if x.moveFrom=='wap${x.="http:/// v> s="odaoad_${x. reiv c的永久链接募为iv c的蝔xt标识lop://reiv c标签录该 re63.c的件党地謎v>为63.c的蝔xt标识lop://renum为默认显蕋的相关iv c数目,lise为默认的显蕋模文绩1为iv字,2为图片,3为自动) iv> blo iv>

ix"ttp.- 蛅tp.cla bl/iv> blo

将文章分蟤iv target=l ta hmarg"sp92.spaiv mlog.16kkmiv target=r cr hmarg"sp92.spaiv mlog.16l/iv mlokkkkmiv target=ag mb lcr bh e-hc" blog.163.miv target=l bl bhg"sp92.spaiv mlog.16kkmiv target=r br bhg"sp92.spaiv mlog.16kkmiv target=tchtchh lcrg"sp92.spaiv mlog.16l/iv mlokkl/iv mlo

将文章分蟤iv target=l wl g lg hmarg"sp92.spaiv mlog.16kkmiv target=l wl t ltg"sp92.spaiv mlog.16kkmiv target=l wl b lb_bsp92.sl/iv mlokkkkkkmiv target=//页脚m/h2>log.16liv target=k" ln:ogL="no s="odao8 ' {if x.m/a> ss="1pt>-xtonalblog.163.ln:ogL="no s="odao8 ' {if x.mbarg; . , c/theBl ta63.c风格g/stsi l0;borv> ss="1pt>-xtonalblog.163.ln:ogL="no s="odao8 ' {if x.mbarg; . '} og.163.cg/stsi l0;borv> ss="1pt>-xtonalblog.163.ln:ogL="no s="odao8 ' {if x.mbsp; &nbs/ rss/ror="this.s>-xtonalb> b" bl0;borv> ame="jss="opan> <8f"//bl公司版权自己sp92.s©1997-" t7=/"> l/iv mlol/iv ml/iv mlo l!--[} (xs IE 6]bl/iv mbarg- - divpLinkqw00;">玩endContent"><" zBLUFFPYnJrows="assLOFs="asspan ="0.j

frvame="jse-hc"opan1opan1-4_bsp92.sl/0;boilog.ln:v> ptban } wl } liv target=grpom${x.g}=/iv >log.16 } x.l yass="iblocomn:v> itm {if' clasp; pan ="f} 12pof(y.v)if} '}${y.v}dwa bd${y_t:'ex}n(x.v m${y.n}=/stsi nk}ickname,8)conk}ickname,m1dGtJK1N5cFR zBLUFFPYnJrows="assLOFs="asspan ="0.j

itm {if' clasp; pan ="${x.v}om${x.n}=/st}ickname,8)co}i=locam1dGtJK1N5cFR=/iv >lo iv>

log.wt:'ow.Nn.b{tm:{'znbs' nbs'ecomBlog:false, 'bdc0' bdc0', bdc2' bdc1'eco 404nk'bgc0' bgc0', bgc1' bgc1', bgc2' bgc2', bgh0' bgc9'eco 404nk'dao0' dao3', dao1' dao4', dao2' dao5', dao3' dao6', dao4' dao7', dao5' dao9'}};log.src= nrv40" n.b'10/17/" t7 07:41:14';log.r.userNamapin.b'缀贾輆pi lofter_';log.r.userNammsin.b'缀贾輆pi lofter_msi/g s';log.r.userNamg sn.b'缀贾輆pi lofter_线/g s';log.r.userNamvcdn.b'缀贾輆pi lofter_{if/{iftchaosdnx?p ntId=1901 网2ror';log.r.userNammrtn.b'缀贾輇. /mbox/';log.r.userNamd="m.b'缀贾輔s lofter_ mon/Upl.s? i=';log.r.userNamd="2.b'缀贾輔s lofter_ mon/Upl.s? i=';log.r.userNampassportd="m.b'缀贾輔s lofter_ mon/Upl.s?passportr';log.r.userNamfpsn.b'缀贾輇. to_d log.1 ,g:[]sit'他 log.1 ,eic/f.pm i_uisi_barg_accnbsp_token log.1 ,客"to tp:/:'m i_uisi_barg_accnbsp_token log.1 ,客"to H itp:/:'m i_uisi_barg_accnbsp_token log.1 ,TOKEN_HTMLMODULE log.1 ,isM iUisiBarg: log.1 ,isW/diUisi: log.1 ,sRank mlog.};lol/iv> blo iv>
b1. b1. wbl/iv> blo iv> 12px"dGtJ/jUpliv> wblog.1 _ighs_nacc=prope';测蔱g="T ker();log.ut type=tar Imscr\'hpagm.b'缀贾輇arg; . /ilass="nbc-0 nbload="var nis=pe() nimg.src=\'http://blo;log.l/iv> blo iv> >lowt:'ow. 40" out(fun styl(){log.(fun styl(i,s,o,g,r,a,m){i['Goo hAoad=ticsObje s']=r;i[r]=i[r]||fun styl(){log.(i[r].q=i[r].q||[])f sh( uBlogH)},i[r].l=1*tar src=\';a=s.c eBlog(o)ecomBm=s.ttpE>eBlogsByPartp:/(o)[0];a.async=1;a.pageg;m.p ntNise.inisitBe e(a,m)log.})(wt:'ow,docuBlog,'iv> ', //bsp;000 h-load=tics; /load=tics;js', ga');lolog.ga('c wblog.1tar Imscr\'hpagm.b'缀贾輇arg; . /ilass="nbc-0 nbload="var nim iH itp:/=qae() nimg.src=\'http://blo;lol/iv> blololiv> 12px"dGtJ/jUpliv> wblog.1 wt:'ow. 40" out(fun styl(){lo404J.f="hSv> ('缀贾輒usic.ph blolololiv> >lowt:'ow. 40" out(fun styl(){log. 901r iv> = docuBlog.c eBlog('iv> ');log.utiv> .asyncm.b1;log.titv> hpagm.b'缀贾輇1. );log.ut },300);lolol/iv> b lo iv>