性能测试教程

一、什么是性能测试

通俗地讲,性能测试就是检查一个系统或软件在承受各种工作负载时,它的表现如何。这就像你买了一辆新车,不仅要看它的外观和内饰,更想知道它在高速行驶、爬坡、满载等情况下的表现,比如油耗、速度、稳定性等。

在软件或系统领域,性能测试会模拟用户在实际环境中可能遇到的各种场景,比如高并发访问、大数据量处理、长时间运行等,然后观察系统的响应时间、吞吐量、资源占用率等指标,从而评估系统的性能是否满足预期。

具体来说,性能测试可能包括以下几个方面:

  1. 基准测试:在没有任何负载的情况下,测试系统的基本性能。
  2. 负载测试:逐渐增加系统的负载,观察系统在不同负载下的性能表现。
  3. 压力测试:模拟系统可能遇到的最大负载,测试系统的抗压能力。
  4. 稳定性测试:长时间运行系统,观察系统是否会出现性能下降、崩溃等问题。
  5. 并发测试:模拟多个用户同时访问系统,测试系统的并发处理能力。

通过性能测试,开发者和测试人员可以了解系统的性能瓶颈,优化系统设计,确保系统在实际使用中能够稳定、高效地运行。

 

二、如何开展性能测试?

1、明确测试目标和需求

比如,我们6.18做活动,需要测试大批量用户进入百度网站首页的性能情况,一般实际情况下,产品经理或者项目经理在提需求之前,都会制定测试目标指标,如果没有制定,那么就需要自己去分析项目背景后去制定。

目标,可以通过接口清单来识别,或者自己去扒代码,后者自己去抓包,要尽可能的全面,都可以。梳理出来需要压测的目标接口以后,再去梳理接口的业务功能、依赖的上下游服务调用链路、数据库配置和库表等等。根据需求背景和接口功能,科学制定每个接口的通过指标,指标包含了平均响应时间、TPS等。比如,登录接口比较重要,可以指定为TPS>3000,95RT<1S,自己制定的目标和指标,还需要跟产品和开发讨论,避免错漏。

如下图:

 

 

2. 测试准备

2.1,首先要准备好压测机,目前大部分公司都有JumpServer这样的机器,如有,最好就用这种机器,因为网络和配置相对稳定。如没有就视情况准备1台或者多台电脑(分布式压测);

2.2,制定扩容方案(一般先纵向扩容,再横向扩容)。准备对测试环境应用服务、数据库、网关等进行扩容,扩容可以扩到与生产环境一致,或者按照比例扩,总之要在压测前扩好;

2.3,准备脚本,脚本一般使用JMeter编写,脚本的编写要尽量使用参数化,这一步这里不单独讲,作者另外有文章专门讲脚本的编写。

2.4,准备压测数据,为了保证压测结果的准确,我们需要将测试环境的数据量保持与生产环境一致,造数据,我们可以通过前置接口去造,或者依赖数据库的存储过程,存储过程造数据,另外也有文章教程。造的数据记得要做好标记,压测完需要清理掉。

2.5,提前准备监控,目前很多公司都上云了,可以通过阿里云的RDS数据库监控、kubernetes容器监控、云监控、ARMS监控,等手段来监控各服务的性能情况,ARMS需要提前打桩;如果没有上云,那就远程连接linux服务器,通过命令来监控了。

2.6,一般的大型压测或者比较重要的业务压测,我们需要把压测时间、服务等信息,告知有关联的开发和测试团队,运维团队,避免压测时影响到其他人的使用,以及人员的支持。特别是压测生产环境时,一定要提前邮件告知各方团队,严格按照计划压测。

 

3. 选择测试方法和工具

  • 负载测试:逐渐增加系统的负载,观察系统性能的变化情况。
  • 压力测试:在系统达到饱和状态下,测试系统的稳定性和错误处理能力。
  • 工具选择:根据测试需求选择合适的性能测试工具,如JMeter、LoadRunner、Gatling等。

4. 执行测试

4.1压测时,我们需要随时观察:上下游服务、数据库、网关服务的性能表现,主要关注服务的CPU、内存、TPS、JVM等。以及JMeter中聚合报告的吞吐量、响应时间等关键性能指标;

4.2,通过以上性能表现,我们需要实时调整压测的并发数,最终把性能瓶颈找到。

 

5. 分析测试结果

  • 对比预期目标:将测试结果与预期的性能指标进行对比,评估系统是否满足需求。
  • 定位性能瓶颈:分析测试结果,找出系统中的性能瓶颈,如数据库查询、网络传输等。

6. 报告和调优

  • 编写测试报告:详细记录测试过程、结果和发现的问题。结论要准确、问题要清晰直接表现。如以下3图。
  • 系统调优:根据测试结果对系统进行优化,如调整配置、优化代码、升级硬件等。调优问题比较复杂,后续再单独刨析。
  •  

     

     

7. 重复测试

  • 每一个性能问题,测试人员需要提交优先级较高的BUG,并在在系统调优后,重复执行性能测试,验证优化效果。

8.注意事项

  • 确保测试环境与生产环境一致:性能测试应在与生产环境尽可能一致的环境中进行,以确保测试结果的准确性。
  • 充分模拟实际场景:测试场景应尽可能贴近实际用户的使用情况,以发现潜在的性能问题。
  • 注意测试数据的保密性:在测试过程中可能涉及敏感数据,应确保数据的保密性和安全性。

 

posted @ 2024-06-26 20:42  xiaodi888  阅读(42)  评论(0编辑  收藏  举报