工作中对项目压力测试的一些心得,先自我作一个小结吧!
(一)宏观与微观相结合
(1)宏观层面
即系统的一些关键性能指标,如:各进程所占CPU的百分比、内存消耗、网络包量、磁盘IO等等,详细指标列举如下:
名称 | 描述 | 参考值 |
CPU useage | CPU 的使用时间百分比。 | 平均值小于70% |
Process virtual memery size | 进程使用的内存空间总量,包括物理内存和swap内存 | 进程长时间运行后该值不能大幅度的改变,否则是内存泄露 |
Disk rate | 磁盘传输速率 | 一般少于2M/s, 日志级别太低时硬盘io会是瓶颈。 |
Bytes trans rate | 网络发送速率 | 少于200Mbps |
Bytes receive rate | 网络接收速率 | 少于200Mbps |
Pages swap in | 每秒钟读入到物理内存中的页数 | 长期大于0表示物理内存不足 |
Pages swap out | 每秒钟写入页面文件页数 | 参考上面 |
Context switches rate | 每秒钟在进程或线程之间的切换率。
| 少于5000*cpu个数 |
Interrupt rate | 每秒内的设备中断数。 该指标代表了本地向CPU引起的本地中断,例如IO端口引起中断,系统时钟引起中断。 | 一个巨大的中断值,同时伴随着缓慢的系统性能表现,指示存在硬件问题。 |
|
|
|
测试工具:nmon
(2)微观层面
这里是指具体到Server程序的逻辑功能模块,包括函数消耗CPU周期、函数调用次数等资源占用情况,以及系统内核哪一部分最忙等。
测试工具:oprofile、gprof
(二)黑盒与白盒相结合
(1)黑盒测试
我们目前的压力测试程序,其实是归于黑盒测试范畴的,它模拟玩家的一些行为,应用具体项目的实际协议与被测游戏Server通讯,通过同时产生大规模机器人,来模拟与实际运营中相似的场景。这里编写的测试用例,其功能就是要尽可能真实地模拟client的功能,并能方便的配置化和部署client行为;
(2)白盒测试
我理解的白盒测试包括两部分,一是单元测试,它能有效地解决BUG回归测试的问题,二是代码覆盖率检查,它能有效检查到每个函数分支的执行情况。前者可借助业界成熟的自动化测试框架,如:cppunit、gtest;后者也有许多第三方工具,比较方便的有GNU自带的gcov,只要在编译程序时,加入-fprofile-arcs -ftest-coverage编译选项即可。
如果要用一句话来概括两者的话,那就是:
白盒测试能极大的保障程序逻辑功能层面的正确性(正常与异常流程均能检测到),而黑盒测试则能有效保障程序运行的稳定性。