Loading

负载测试 & 压力测试

背景

在没有性能测试实践的情况下,压力测试和负载测试从字面上来看意思差不多,笔者也经常记不住这两个的区别是什么,因此写一篇文章来让自己加深印象。
然后由于找到的文章都是把性能测试相提并论(其实我一直觉得性能测试包含压力测试和负载测试),因此这里也提上一笔。

概念

性能测试

收集所有和测试有关的所有性能,测试软件在系统中的运行性能,度量系统与预定义目标的差距。
关注: how much and how fast

压力测试

通过 逐步增加系统负载,确定在什么条件下系统失效,以此获得系统能提供的最大服务级别;

负载测试

指数据在超负荷环境中运行,程序是否能够承担。通过逐步增加系统负载,确定在满足性能指标的情况下,系统所能承受的最大负载量。
关注:how much

举例:一个人背X斤
负载测试:200斤情况下,是否能坚持5分钟。
压力测试:200,300,400...斤情况下,他的表现,什么时候失败,失败之后什么表现,重新扛200是否正常。

这里提一下其他的性能测试: 强度测试(spike testing,extreme testing ,hammer testing,容量测试,压力测试);

  • 强度测试: 在系统资源特别低的情况下软件系统运行情况,找到系统在那里失效以及如何失效的地方;
  • spike testing: 短时间的极端负载测试
  • extreme testing: 在过量用户下的负载测试
  • hammer testing: 连续执行所有能做的操作
  • 容量测试: 确定系统可处理同时在线的最大用户数,使系统承受超额的数据容量来发现它是否能够处理。通常和数据库有关,关注大容量。

测试目的

压力测试

可以知道在什么极限情况下系统会崩溃,是否具有自我恢复性,更多是为了确定系统稳定性

负载测试

获得系统正常工作时所能承受的最大负载,也称为容量测试;

压力测试

可分为稳定性测试和破坏性测试。

稳定性测试

在选定的压力值下,持续运行24小时以上的测试。考察各项性能指标是否在指定范围内,有无内存泄漏,有无功能性故障等。
观察log日志等,查看监视系统,服务器等性能的日志文件,找出问题出现的关键时间或检查运行参数。

破坏性测试

在稳定性测试中可能会出现一些问题,如系统性能明显降低,但很难暴露出真实的原因。通过破坏性不断加压,往往能快速造成系统的崩溃或让问题明显暴露。

如何测试?

工具

  • 应用层 ,profilers 发现低效代码
  • 数据库层,数据库profilers 和 时间探查器(query optimizers)
  • 操作系统层,Unix(top,vmstat,iostat );windows(PerfMon监控CPU,内在,swap,磁盘I/O等硬件资源)
  • 网络层,报文探测器,网络协议分析器,netstat,MRTG,ntop,mii-tool
  • 负载测试开源工具: apache bench,siege,httperf,openSTA,the grinder

提高WEB应用系统性能的例子

  • 使用web缓存装置,如squid提供的装置
  • 将高访问量的网页静态化避免高访问量对数据库的大量调用
  • 通过负载平衡的方法来水平缩放web服务器的结构
  • 水平缩放数据库群及分为读写服务器和只读服务器,对只读服务器群负载平衡
  • 增加硬件资源
  • 增加网络带宽

压力测试方法

  • 并发用户/HTTP连接的基线数翻倍
  • 随机关闭重启集线器/路由器端口
  • 数据库断线然后重启
  • 系统运行中,重建RAID阵列
  • 运行消耗资源(CPU,内存,磁盘, 网络)的进程

参考:
负载测试、压力测试和性能测试的区别
性能测试、压力测试和负载测试
性能测试 vs 负载测试 vs 压力测试
性能测试VS负载测试VS压力测试 中文翻译

posted @ 2020-11-11 12:03  Tester-Dolores  阅读(260)  评论(0编辑  收藏  举报