我怎么做性能测试

今天和同事交流关于性能测试的东西,以前也做过性能测试,突然想写点自己关于如何做性能测试的认识。

基于B/S架构的系统,利用loadrunner做性能测试,利用nmon监控系统资源(用linux自带的top,vmstat等命令也可以,写一些简单的shell脚本就行了)。

那么到底该怎么去做性能测试呢?

1、首先要了解被测系统的结构和有关知识的储备。

 了解了被测系统,在后期性能出现异常的时候,定位就相对容易一些;而且知道在测试的过程中需要监控什么。

一个简单B\S系统结构图:

该系统有一下及部分组成:

APP:一台nginx,兼做web和应用服务器

Memcached:负责做数据缓存

lucene:负责做搜索

RabbitMQ:负责某些业务的队列处理

mysql:数据库服务器,一个主库,一个从库

从以上系统结构来看,要搭建和维护性能测试环境,需要的一些必要的知识。

对于APP:需要了解nginx的相关知识,怎么修改配置,在哪里看日志

对于Memcached:怎么搭建Memcached,怎么查看命中率,Memcached的作用是什么

lucene:这个lucene是干什么用的,要怎么配置

RabbitMQ:MQ要如何配置,都那些业务用到了MQ。

Mysql:如何配置主从,为什么要配置主从,主从如何同步等等

在搭建环境的过程中肯定会遇到这样或那样的问题,要自己找资料,或者相关的开发人员一起解决,并注意做笔记,防止以后同样的问题再出现。

 

2、了解了系统结构,开始搭建测试环境,并准备数据。

测试环境尽量要和生产环境的结构保持一致,还有配置文件等也要保持一致,这样能保证性能测试的结果更加真实和接近生产环境。

数据准备一定要充足,而且数据量要大于等于生产环境,这样能更真实的模拟生产环境。比如对一个select语句而言,10W的数据,和1000W的数据,查询时间肯定有差别。如果数据量太小就不能反映真实情况下性能了。(可以把线上的数据导入到测试环境,但是要注意把用户比较隐私的数据都替换掉)

如果有可能的话,测试环境的数据要比生产环境多出20%,做一些性能上边的冗余,防止发生突然的性能尖峰。

3、了解需求,找出测试点

和产品、技术沟通需要做性能测试的业务;并了解相应的业务的性能指标,如页面的响应时间,TPS(事物处理)或者系统期望能承受多少并发等。

4、设计性能能测试用例

根据业务编写相应的性能测试用例。

功能

在线用户达到高峰时,用户可以正常发帖,保证200个以内用户可以同时发表帖子。

目的

测试系统200个以内的用户同时在线发帖。

方法

采用LoadRunner的录制工具录制一个邮件发送过程,然后对脚本进行优化,加上事物点,检查点等。过程中监视B端的响应,还有网络传输,web服务和数据库服务器的性能,并观察服务器相应服务的日志,检查MQ的状态,memcached服务器的状态和性能

 

 

预期结果

符合业务的预期,日志木有异常等(不详细列举)

5、编写并优化脚本

 根据测试用例录制发帖的脚本,加入事物点、检查点、参数化,并回放,确保脚本没有问题,可以正常运行。

6、设计性能测试场景

设置一个渐进的场景10-30-60-100-150-200,这么做的目的防止一下子上去就是200个并发,出了问题,不知道系统最佳的并发是多少。

(上边的渐进场景不一定合理,只做示意)

7、启动监控,并开始跑性能测试场景

设置场景完毕后,开始在服务器端启动监控,然后开始启动场景。

8、监控场景执行,监控服务器的资源

loadrunner可以搜集一些性能测试数据,事物的pass数,fail数,error数,都要做统计。

监控服务器的资源,可以利用nmon,也可以是用linux自带的命令top,vmstat等。

也要监控服务器的日志输出,看是否有异常出现。例如:查看mysql的慢日志,nginx的日志等。

9、搜集结果数据,分析探讨

最后对性能测试搜集的数据进行分析,找出性能测试的拐点。

10、对系统进行优化,并重复7-9步,直至测试结束

 

PS:性能测试不是一个人的事情,中间设计了,开发,产品,运维,QA,DBA,要大家共同协作,才能做好性能测试。

 

限于水平有限,用疏漏之处,多多包涵。

 

posted @ 2014-02-20 22:37  liuweiqiang2v  阅读(2549)  评论(6编辑  收藏  举报