软件测试火的一塌糊涂的时候,大家心里估计在颤抖。不就是点点系统嘛,能有什么大出息,软件测试做几年以后大家水平都差不多,如何才能不被快速取代,去做性能测试呀。
测试做久了就会知道,性能测试是测试人员的终极梦想,这是为什么呢?工资高呀。我有朋友做了3年功能测试,感觉太机械,然后报培训班学习性能测试,目前从事性能测试工作。
万事开头难,我从想做性能测试到现在5个年头过去了,现在把做性能测试过程中的迷茫、坚持、到后来的被认可写下来,纪念下那年的加班岁月。
我一直认为自己很幸运,在校期间就找了份实习工作,做金融方面的测试。银行系统涉及到钱,所以从公司到银行很重视测试。当然了现在互联网时代,性能测试就更重要了。
大三暑期实习时做了软件测试,培训老师说软件测试分为功能测试和性能测试,最牛逼的是做性能测试,那简直是受万人敬仰。
刚好学校开始选毕设课题,看到了loadrunner性能测试题目,带着想成为行业的大拿,受到膜拜的幻想,于是乎选择了这个课题,仿佛看到了未来做性能测试的样子。
由于在学校老师没教过这个,所以得自学,就连loadrunner工具也得自己在网上下载,loadrunner是大型商业软件,小公司用的大都是开源工具,公司做银行系统,所以性能测试是重中之重,正好有此软件。
第一次听培训老师讲性能,特别认真的带着本和笔坐第一排听。培训老师在公司待10多年了,讲的很好。“80%的交易是20%的时间完成的、tps、tps拐点、脚本、并发用户数、最大并发用户数、单交易场景、混合交易场景等”听的云里雾里。
实习时在公司培训班待了一周,做了个小型银行系统,大概只有账户查询、开户、存款贷款等小模块。系统用于是乎我就在电脑里安装了这个系统做性能测试。
公司有配置库,文档包括各种类型,恰好有性能测试文档。由于公司有2人做性能测试,常年在客户现场出差,所以一切都得自学,带我毕设的老师也是没做过这方面的工作。
度娘里找答案,清一色全是loadrunner的工具使用,如何设置参数、如何录制脚本、脚本参数化等。到了这步就木有下文了,宝宝心里苦。
我最想看到的是录制脚本后脚本运行成功(数据库里有条成功数据)、如何设置场景、如何获取有用的数据、以及如何测出瓶颈、以及如何解决瓶颈、最后出份漂亮的性能测试报告。心理想着等我哪天做完性能测试一定和大家分享有用的知识。
现在回想起来,当初真是太可怜了,录制脚本后,回放录制的视频,界面一直显示登录超时,登陆脚本都无法登录系统,更别提之后的测试脚本了。
大四毕设做的很不好,没人指导,自己在瞎琢磨,没有写过测试脚本,毕设答辩内容很空洞,勉强通过。
由于一直有做性能测试的心思,离开了第一家公司。之后找工作时拒绝了二包公司、拒绝了单纯的界面测试,找了家功能测试、性能测试都涉及的。然后就一直待这家公司。
我主要做理财项目,涉及功能测试、接口测试、压力测试、稳定性测试。
2014年银行理财忽然卖的很火,某城商行,系统承受不了压力,然后要做压力测试。我作为项目组唯一的测试员,这项工作落在我头上。真是又紧张又兴奋,开心的是可以亲手做性能测试了,紧张的是之前只有点基础。
就像如开发人员初次学习写代码,运行helloworld一样,我首先得录制登录脚本,只要这个调通其他的也就迎刃而解。
web系统,基于web(HTTP/HTML)脚本很快录好了,可是运行显示登录超时,百思不得其解,领导下命令今晚必须出结果,怎么办,打电话求助公司的性能测试部门,他让我在脚本里做了个关联就可以了。
脚本调通后,运行脚本,查看日志显示交易成功。保险期间我写了个select语句查询流水表,金额、账户都正确,就是刚执行脚本后插入的那条数据。
终于成功了一把,最终熬到凌晨2点,设置了系统运行8小时,回家睡觉去了。第二天查询数据库,成功了10万多条没有报错,简直好惊喜。
由于知识有限,第二天买了本性能测试书,那段时间,只要闲下来就会录制其他交易的脚本,学习到了脚本参数化、关联等。那年别的项目也做性能,所以我学习了web、socket、xml协议的脚本。
测试脚本
做性能测试第一步就是写测试脚本,一个完美的脚本是成功的一半。
脚本分为2种模式:录制、手动编写。
由于系统是web类型的,所以直接用工具录制,关键是当初也不会写啊。
图片发自简书App
脚本参数化:
添加事务
图片发自简书App
loadrunner11以上版本不添加事务,场景执行后tps无值。
关联
关联分为自动关联、手动关联,适合复核交易,通过流水号查询交易,适用于http协议。
测试数据参数化
图片发自简书App
测试脚本中为了保证流水号的唯一性,添加时间数字+时间毫秒设置。
日志设置
f4设置log,选择参数等。
图片发自简书Ap
脚本运行后,日志框会显示交易状态,遇到有参数时写print语句,日志里可以看到参数取值是否正确。
socket脚本模版
xml脚本,保证发起报文和接收报文都是明文,接收端如果是密文,测试时先解密再测试。
图片发自简书App
发送报文,报文长度必须正确,接收报文内容可以为空,长度数字写大点,确保大于实际的报文长度。
公司针对测试接口有模拟工具所以可以直接录制,也可以写脚本。首先明白接口用的是什么报文然后再写脚本。
现在给大家一份性能测试报告
1、测试背景
首先确保功能测试覆盖率达到100%,缺陷通过率大于95%,其次做性能测试。银行理财产品有银行兜底,所以卖的很火,银行发产品后客户集中在一段时间抢购,导致系统压力,出现大量失败的交易,所以为了保证系统长期运行的稳定性,针对典型交易做性能测试。
2、测试目标
获取系统的处理性能指标,满足当前生产系统及未来3年的业务发展需要。
发现性能瓶颈,协助开发人员进行性能调优。
3、测试指标
平均事物响应时间ART:
响应时间遵循2、5、8s原则,本次测试响应时间小于等于8s;
并发用户数:
现在高峰日操作人数500人,20%的并发量计算,高峰日并发用户数大于等于100
规划未来2年高峰操作达到600人,20%的并发量,并发用户数大于等于120
规划未来三年操作人数达到700人,20%的并发量,用户数大于等于140。
资源使用指标:
cpu使用率小于等于80%
内存使用率小于等于80%
磁盘交换率小于等于80%
tps值:
每秒处理的业务笔数,80%的交易在20%的时间完成,每天交易量10万笔,一天8小时
tps=80%*100000/(8*3600*20%)=13.89
并发交易成功率:大于等于95%
4、选取典型交易
性能测试主要针对交易量大的交易,如购买、赎回、份额查询。
5、测试工具
loadrunner8.1
nmon监测资源使用率,磁盘、cpu、内存等。
6、测试类型
基准测试
单交易单用户测试,典型交易在无压力情况下获取单笔交易处理的耗时,为之后的并发测试提供一个数据参考,一个用户跑5分钟。
验证测试脚本及测试参数的正确性。
获取单笔交易的性能数据,主要是单笔交易平均响应时间、TPS。
并发测试
主要分为:单交易多用户测试和混合交易多用户测试,由于最后要跑稳定性,本次只做单交易多用户测试。
每个典型交易通过单交易多用户迭代执行,获取性能指标,比如TPS、ART、系统资源使用情况,根据需要进行性能调优。
tps出现拐点时,继续测2组数据,如果这2组数据tps明显下降,此时就测出了最大并发用户数。
备注:交易数据库有当前流水表和历史流水表,所以每次跑场景前删除当前流水表的数据。
稳定性测试
多交易多用户的并发混合模式,对被测系统进行长时间的稳定测试,获取持续加压下的性能指标。考察是否会出现宕机、响应时间变长、交易成功率下降、资源使用率达99%的情况。
选取单交易并发时的最大用户并发数取中间值跑稳定性。
7、测试总结
目前我遇到的瓶颈和解决方式
1、磁盘交换率达到99%;
2、内存使用率5%左右;加大系统进程数并增加并发用户数。
3、内存使用率高达99%;经查看系统实时刷日志,原因是某个可有可无的参数没配置。
4、单交易sql执行时间2s;增加索引。
5、单交易执行时间过长;每次sum金额时,交易太多,执行时间过长,增加一张表每做一条交易sum一次,分担了压力。
6、tps值明显在某个时间点降低,经查询当前流水表数据大于100万条;这个目前无解得对数据库进行调优。
实践出真知,知识有限,就分享这么多了,写这篇文章已经用尽了我的荒洪之力。
小白测试系列连载中…
原文链接:http://mp.weixin.qq.com/s?__biz=MjM5OTI2MTQ3OA==&mid=2652177938&idx=1&sn=e0547a30965037422ccf440d791b4a2c&scene=0&ptlang=2052&ADUIN=313075032&ADSESSION=1472708596&ADTAG=CLIENT.QQ.5491_.0&ADPUBNO=26609#wechat_redirect