改变测试思路,你的性能测试才能更值钱!(下)

普通BS架构的系统,一般都采用测试工具(如LR)直接录制手工操作的方式进行测试。这种方式简单有效,对测试人员要求不高。但在一些情况下,这种基于录制的方法可能无法完成,比如页面上有特殊控件、系统是CS架构、或者通讯的协议无法捕获等。这时就需要更复杂的测试方法,如手动编写模拟客户端的JAVA代码,而把测试工具当作一个调度控制台,去调度大量的虚拟用户线程执行编写好的代码

现在假设有一个简易版的12306网站,JAVA实现,中间件为TOMCAT,数据库为SYBASE,没有集群处理(一切从简,只有查询和订票功能)。如何对它进行性能测试呢?

按照上面的几个步骤来想一想吧,这里只简单写几点。

第一步,测试确认。海量并发,数据也应该是海量的,但基本都是简单查询,没有复杂的统计,所以主要困难还是在海量并发事务的处理上。中间件、数据库上都会承受巨大压力。此类高并发系统还需要对一些功能特别注意,比如一个车次有10张票,5个人同时购票,如何处理?如果是12个人同时点购票,又是如何处理?

第二步,通过标准。无非是系统能够满足多少人同时在线,一分钟内能处理多少订单,用户最大等待时间是几分钟。注意这个标准一定要是经过各方面确认过实际可行的啊,定一个订单响应时间不超过5秒有意义么?确认了以后,就要按照这个目标来设计测试和执行。

另一个需要注意的问题,按照预期的压力测试通过了以后,是不是就高枕无忧了?答案是否定的,因为很可能这个预期或者标准是不合理的。这个是非常可能的,只有长期的数据积累,才会一点点走向精确。

想想奥运订票系统,开通后短短五分钟,网站就瘫痪了,你们以为这种系统没有经过专业的性能测试么?据我所知,奥运订票系统性能测试时制定的标准是每分钟处理四百万访问(具体数据记不住了,就假设是这个数吧),出事后的检查发现,每分钟的访问量超过了八百万。这种事故责任在谁呢?

测试机构敢拍胸脯保证,每分钟处理四百万就是没问题的。而奥组委自己设定的每分钟四百万目标,和实际出现偏差也是正常的,毕竟这种系统是第一次上线。最后的处理方法就是,压力达到了预期最大值以后,再后来的访问就被排队了。好好体会这个案例吧,会有收获的。

第三步,测试设计。设计用户模型,设计测试场景,设计测试用例。一个典型的用户是如何使用系统的?登录、查询车次余票、订票、付款,这是理想化的情况。实际更可能是这样的,登录(一次登不进去,重复多次)、查询A车次(未到放票时间、不断重试,时间到无票)、查询B车次(无票)、查询C车次(有票)、订票、付款、查询订单。两种交互方式对系统产生的压力,差别是很大的。

将多个用户行动整合到一起,也就是用户模型,或者叫系统使用模型,是压力场景设计的依据。假设系统一天的访问量是一万个用户,这一万访问量是在24小时内平均分布的,还是分布在8小时内,还是在某一时间点上集中访问?这些具体到用例中也就是虚拟用户的加载策略,直接决定了压力的大小。

除了这个压力场景,针对此系统还需要进行绝对并发测试,参考第一步的分析。

第四、五步就不细说了,准备环境、数据,针对大量用户的并发进行一些预调优。按照第三步设计好的各个测试用例准备脚本、执行测试。

第六步,发现问题了怎么办?比如1000人的压力下,系统响应就比较慢了,查询车次需要1分钟,下订单需要2分钟,接下来要做什么?能把这些作为一个性能缺陷提起么?显然是不可以的,这只是通过你的压力测试场景产生的一个现象,可能是测试脚本有问题、也可能是测试环境有问题。作为一个性能测试人员,需要尽量深入的定位到问题产生的原因。

就像这个响应慢,只是一个表面现象,慢在哪?是中间件还是数据库?一些简单的测试方法就可以进行判断,如在页面上进行一些数据库无关的操作,如果依然比较慢,说明在中间件上压力就已经比较大了。

还可以部署另一套中间件测试环境,连接之前相同的数据库,在压力测试出现问题的同时,手动访问新部署的应用(只有一个用户),如果同样很慢,那说明慢在了数据库端的处理上。还可以通过日志的方式更准确的进行判断,如应用日志和数据库SQL执行日志。总之方法是多种多样的,但目的只有一个,就是不断的排除无关部分、缩小问题范围。

定位到了中间件和数据库之一,然后又该怎么办?此时恐怕就需要一些相关方面的专业知识了,但其实最常见的还是那些。中间件相关的一般是线程池、JVM、数据库连接池等,数据库相关的有锁、缓存、IO(一般就是SQL语句的问题)等。要进行全面的监控和分析,再做一些合理的调优并重复测试。

问题定位到什么程度才行?我认为是要让人看了知道改哪就可以了。比如提一个“这个SQL语句进行了大量的物理IO,性能不好”,这就不是个好问题,物理IO是什么?怎么改?如果这么说就好多了“这个SQL语句没有使用索引,导致了全表扫描,进行了大量的物理IO,性能不好。如果要避免全表扫描,需要调整SQL语句或者添加XX索引”,这才是定位问题。

当然了,上面只是一个非常简陋的举例,真实的性能测试要比这复杂的多。

总的来说,我认为,性能测试的难度主要不在技术手段上,互联网时代技术都是共享的,要善于去搜索利用他人的成果。即使自己搞不定,团队内一定还有专业的开发工程师、数据库管理员、系统管理员可以帮你搞定。真正的难点在于,你要想出来如何去测是有效的、有保障的,这才是测试工程师最重要的能力。

还是那个观点,思想才是根本。

原文地址:https://www.cnblogs.com/uestc2007/p/11275991.html

时间: 2024-10-16 07:12:01

改变测试思路,你的性能测试才能更值钱!(下)的相关文章

改变测试思路,你的性能测试才能更值钱!(上)

性能测试的目的,简单说其实就是为了获取待测系统的响应时间.吞吐量.稳定性.容量等信息.而发现一些具体的性能相关的缺陷(如内存溢出.并发处理等问题),我认为只是一种附加结果.从更高的层次来说,性能测试最想发现的,是瓶颈.如何能得到所需要的信息,就需要从多方面进行测试. 性能测试的内容 1 性能测试种类的划分与定义这里就不说了,各有各的说法,比如性能测试.负载测试.压力测试这三个词,在网上能找到N个版本的定义,大体理解就行了,没必要在文字层面上较这个真.以下的内容也只是我个人的理解,一些名词的定义可

让你更值钱的方法:培养稀缺(追逐新技术,淬炼已有技能、做到出类拔萃,寻找自己所在的行业痛点,App开发者是市场动态平衡的典型)

一个开发者,如何才能更值钱? 答案非常简单:掌握稀缺资源. 那么,怎样才能持续不断地掌握稀缺资源,让自己更值钱呢? 请看接下来介绍的 2 种识别稀缺的方法和 2 种培养稀缺的策略. 稀缺资源的秘密 资源有很多,比如知识.技能.关系.社会资源.信息.天赋等等,哪种资源才是稀缺的呢? 答案可能不在资源本身,而在于: - 合适的环境 - 合适的时机 举个例子,作为移动 APP 开发者,你可能拥有开发 Android APP 的知识.技能.这些知识.技能,在 2007 ~ 2015 年上半年,尤其是 2

如何对软件支付流程进行测试?才能更安全的买买买!

现在有不少测试朋友做的项目中,可能也会涉及到支付相关的功能.比如:做商城的,做游戏的以及其他在线交易的网站.APP等.如果支付出了问题,或者用户拿少的钱通过篡改请求数据购买大金额的商品,如果是实物的话,发货前还有可能被发现.如果是虚拟商品话费.游戏币等就有可能造成损失. 所以,不管是实物也好,虚拟商品也好,涉及到支付功能时,大家在测试的过程中一定要重视,否则,会造成很大损失. 前几天也有小伙伴在评论区留言问我:支付这一块如何进行测试? 那我们今天就来说说支付流程的测试点,废话不多说,来进入我们今

从川普胜选、双十一购物来看服务器性能的测试思路

导读 没有流量,产品烦恼:流量太大,开发人员困扰.川普胜选瘫痪了加拿大移民局网站,双十一的购物热潮也影响了众多网站服务的速度,每一次大事件都给服务器带来了无上的压力.在流量高峰的日子里,购物,狂欢,是其他人的事情:定位风险,预防风险,才是测试人员的使命. 北京时间2016年11月9日,周三,美国共和党参选人川普(Donald Trump)赢得了美国大选,成为了新的一届美国总统.然后,发生了一件有趣的事,加拿大移民局官网瘫痪了!  网站上写着:"使用该网站可能面临延迟现象,我们正尽力排除问题,感谢

DIV+CSS:如何编写代码才能更有效率

如何编写CSS代码才能更有效率?这是许多网页制作者与开发者都关心的问题.大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更清晰高效的代码,自然,样式表大小的缩减还能减少下载的时间. 一.排版: 1.关键词和操作符之间加适当的空格. 2.相对独立的程序块与块之间加空行 3.较长的语句.表达式等要分成多行书写. 4.划分出的新行要进行适应的缩进,使排版整齐,语句可读. 5.长表达式要在低优先级操作符处划分新行,操作符放在新

APP测试思路

APP测试的时候,建议让开发打好包APK和IPA安装包,测试人员自己安装应用,进行测试.在测试过程中需要注意的测试点如下: 1.安装和卸载 ●应用是否可以在iOS不同系统版本或Android不同系统版本上安装(有的系统版本过低,应用不能适配) ●软件安装后是否可以正常运行,安装后的文件夹及文件是否可以写到指定的目录里. ●安装过程中是否可以取消 ●安装空间不足时是否有相应提示 ●如果应用需要通过网络验证之类的安装,需要测试一下断网情况下是否有相应提示 ●是否可以删除应用(可通过桌面删除,也可以通

2017 VR市场变得更加理性才能更好的发展

原文标题:2017 VR市场变得更加理性才能更好的发展 2016上半年什么最火呢?那当然是VR虚拟现实了.在资本的市场疯狂的涌入下,VR虚拟现实成为人人口中的"风口",成为众多厂商追逐的新领域,随着潮水(资本)的退去,似乎整个虚拟现实产业又变得安静起来,而这正是虚拟现实产业"厚积薄发",等待全面爆发的前夕. 2016年被称为中国VR的元年,在资本的推动下,虚拟现实产业涌现出一大批创业公司.除此之外,一些大公司,如腾讯.阿里.乐视.酷开.小米.暴风科技等也都开始涉足V

多线程同步程序的测试思路

这里我有一个简单的思路,来源于去年应届生找工作做大量的名企笔试题里他人的技巧. 多线程的测试使用cout是不靠谱的,因为多个线程使用cout很容易产生混乱的输出,而且耗时. 多线程的测试往往需要知道多个线程同时运行的时候对某个共享区域的使用是否正确,为了检验正确性,比较好的测试用例就是:递增的整数序列 递增的整数序列中的每一个整数都对应一个线程的动作,最后我们将这些整数再当成另一个标记数组的下标,下标对应的值就是我们操作的动作执行的次数 只要用于标记的数组每一个元素都是1,即可. 比如: (1)

上班啦,软件测试的测试思路总结

清晰的测试思路会让工作更加流畅,先来看看进行初步软件测试时,一些测试思路: 模块测试 模块功能点检查 功能操作检查 页面链接.相关性检查.特殊字符.系统数据检查.测试数据检查等,这部分可以自行搜索.同时检查对之前bug的修复是否会影响到其他功能模块. 页面布局是否规范 测试进阶 掌握测试模块需求,及时和系统工程师确认系统需求 详细记录测试的功能点 针对单个模块测试,主要是测试以下: 1.UI界面测试 界面设计.提示框是否正确等,用自动化测试工具进行UI界面的功能测试. 2.易用性操作测试 主要是