性能测试理论

2024-07-03  
0条评论   141浏览

性能测试

性能测试概念

性能测试就是测试在⼀定条件下系统⾏为表现是否符合需求规格的性能指标。

性能测试是一种对软件、系统或设备的性能进行评估的测试方法。与其他测试不同,性能测试的目的不是检查功能是否正常,而是评估它们在高负载或高压力下的表现。通过这种测试,我们可以了解系统的性能、稳定性和可靠性,以及在面对不同负载条件时的表现。

可以以一辆汽车为例,来帮助我们理解性能测试的概念。首先,一辆汽车必须满足它的基本功能,外观内饰、行驶、停车、油耗等等功能必须是正常的。在这个基础之上,我们会将汽车放在不同的路况下进行测试,例如在平坦的公路上、山路上或者高速公路上。我们会增加汽车的负载,比如加满油、带着多个乘客等等。这些测试可以帮助我们了解汽车在不同负载和路况下的表现,以及是否能够满足我们的需求。类似地,性能测试也可以帮助我们了解系统在不同负载和场景下的表现,从而提高系统的性能和用户体验。

总结:性能测试的目的是评估系统在高负载或高压力下的表现,同时发现系统中存在的性能瓶颈或问题。

在性能测试之前要做好系统的备份

性能指标

响应时间

  • 对请求做出的响应所需要的时间。

  • 响应时间是指系统在收到请求后,从接收请求到完成处理并返回响应所需的时间。在性能测试中,响应时间是一个非常重要的指标,因为它直接关系到系统的响应速度和用户体验。较低的响应时间可以提高用户体验,而较高的响应时间可能导致用户流失和不良口碑。

  • 案例:Web应⽤的⻚⾯响应时间

并发⽤户数

  • 并发用户数是指系统可以同时处理的最大用户数量。在性能测试中,并发用户数是一个重要指标,因为它能够反映出系统的并发处理能力和性能。测试人员可以通过增加并发用户数量来测试系统的性能。

  • 并发⽤户:指某⼀物理时刻同时向系统提交申请的⽤户数

    • 第⼀:并发强调所有的⽤户必须在同⼀时刻对服务器进⾏施压

    • 第⼆:强调要与服务器进⾏数据交互

  • 在线⽤户:指某段时间内访问系统的⽤户数,这些⽤户并不⼀定同时向系统提交请求。

吞吐量

  • 指在⼀次性能测试过程中,⽹络上传输数据量的总和。

  • ⼀般来说,在系统设计范围之内,吞吐量随系统的并发⽤户数的增加呈现增加趋势

  • 当超出了这个范围时有两种情况,⼀种是系统只能处理这么多,超过这个数系统就不接收了,最后随着并发⽤户数的增多吞吐量是⼀个⽔平的直线;还有⼀种情况是不管来多少系统都接收最后导致系统吞吐量下降甚⾄系统崩溃。

  • 吞吐量是指系统在单位时间内可以处理的请求数量。在性能测试中,吞吐量是一个关键指标,因为它能够反映出系统的处理能力和性能。测试人员可以通过增加并发用户数量或者请求量,来测试系统的吞吐量。

    可以使用以下公式计算吞吐量:

    吞吐量 = 总请求数 / 测试持续时间

    其中,总请求数指的是在测试过程中发送的请求数量,测试持续时间指的是测试的时间长度。

    例如,如果在一个测试过程中发送了10000个请求数,测试持续时间为60秒,则吞吐量为:

    吞吐量 = 10000 / 60 = 166.67 (每秒请求数)

    测试人员可以通过改变系统负载或者增加并发用户数量,来测试不同条件下系统的吞吐量。

性能计数器

  • 描述服务器或者时操作系统性能的⼀些数据指标,如使⽤内存数、进程时间等,在性能测试中发挥着“监控和分析”的作⽤

资源利⽤率

  • CPU占⽤率、内存占⽤率、磁盘占⽤率、⽹络等。
  • 资源利⽤率表现当前服务器资源使⽤的情况,它是分析服务器出现瓶颈和对服务器进⾏调优的主要依据,在配置调优测试的过程中,通过⽐较配置调优前后系统资源的使⽤率来判断调优的效果。
  • CPU 利用率是指系统 CPU 在执行任务时的占用率。在性能测试中,CPU 利用率是一个关键指标,因为它可以反映出系统的负载和资源使用情况。较高的 CPU 利用率可能导致系统的性能下降,甚至出现崩溃等问题。
  • 内存使用率是指系统内存在执行任务时的占用率。在性能测试中,内存使用率是一个重要指标,因为它可以反映出系统的负载和资源使用情况。较高的内存使用率可能导致系统的性能下降,甚至出现崩溃等问题。

思考时间

  • 也称为“休眠时间”,是指⽤户在进⾏操作时,"每个请求之间的时间间隔。

  • 对于交互系统来说,⽤户不可能持续不断地发出请求,⼀般情况下,⽤户在向服务端发送个请求后,会等待⼀段时间再发送下⼀个请求。性能测试过程中,为了模拟这个过程⽽引⼊思考时间的概念。

  • 在测试脚本中,思考时间为脚本中两条请求语句之间的间隔时间。当前对于不同的性能测试⼯具提供了不同的函数来实现思考时间,在实际的测试过程中,如何设置思考时间是性能测试⼯程师需要关⼼的问题。

点击率

  • 是指每秒钟⽤户向服务器提交的HTTP数量。

  • ⽤户每点击⼀次,服务器端就要对⽤户提交的请求进⾏⼀次处理;对于Web 系统来说,点击率是服务器处理的最⼩单位,点击率的值越⼤,说明服务器端所能承受的压⼒越⼤。

  • 通常情况下,Web 服务器都具有防刷新的机制,因为客户每刷新⼀次系统就要响应⼀次点击,如果不对服务器进⾏防刷新处理,当⽤户不停地单击刷新按钮,此时服务器将承受着巨⼤的压⼒。

性能测试方法

基准测试(Benchmark Test)

  • 基准测试是最基本的性能测试,其目的是测试系统在正常工作负载下的性能和表现。
  • 目标:衡量计算机系统、软件应用或硬件组件的性能,通过运行标准化的任务场景来测量系统的性能表现,帮助评估系统的各种指标如响应时间、吞吐量、延迟、资源利用率等。
  • 执行方式:运行一系列标准化的任务场景,记录和分析系统的性能数据。基准测试的结果可以用于比较不同系统、不同配置或不同实现之间的性能差异,或者在系统发生变化后评估性能的改进或下降。
  • 方法:在一定的软件、硬件和网络环境下,模拟一定数量虚拟用户运行一种或多种业务,将测试结果作为基准线数据,用于后续的调优或系统评测。
  • 工具:JMeter、LoadRunner等,这些工具能模拟多种业务场景并生成基准线数据。

并发测试

  • 并发测试是测试系统在同一时间内处理多个请求的能力的测试方法。在并发测试中,测试人员会模拟多个用户同时访问系统,并测试系统在处理并发请求时的表现。这种测试可以帮助系统管理员评估系统的并发处理能力,以便提高系统的性能和用户体验。
  • 目标:评估系统在多个用户同时访问或操作时的性能表现,确保系统能够处理高并发的用户请求。
  • 执行方式:确定测试目标,如性能评估、容量规划等;制定测试计划,确定测试范围、数据准备、测试环境等;选择适合的并发测试工具,如Apache JMeter、LoadRunner等;设置合适的测试场景,模拟真实的用户行为;执行测试并记录性能数据、错误日志等;分析测试结果,找出问题和改进方向。

联机测试(分布式测试,多机联合测试)

  • 目标:使用多台测试机联合产生更大的并发用户数,模拟真实环境下多个用户对系统的访问,以评估系统的性能和稳定性。
  • 执行方式:使用多台测试机模拟大量用户同时访问系统,测试系统的性能表现和稳定性。联机测试需要考虑网络条件、硬件配置、操作系统等多个因素。

综合场景测试

  • 目标:模拟真实环境中可能出现的各种复杂场景,对系统进行全面的性能测试,以评估系统在不同场景下的性能表现和稳定性。
  • 执行方式:根据实际应用场景设计多种测试场景,包括压力测试、负载测试、稳定性测试等,对系统进行全面的性能测试。在测试过程中,需要监控系统的性能指标和资源使用情况,并根据测试结果进行性能分析和优化。

负载测试

  • 目标:评估系统在不同负载下的性能和稳定性,确定系统的瓶颈和容量。
  • 执行方式:指定并发数对系统进行多次测试,或者是在系统不断增加压力的过程中,监控系统资源和各项指标,找出性能瓶颈。负载测试可以帮助确定系统可以处理的最大负载和容量,以便规划系统的容量和资源需求。
  • 方法:通过对系统不断的加压,直到超过预定的指标或者部分资源达到一种饱和状态不能再加压为止。主要用于找到系统最大的负载能力,为性能调优提供数据。
  • 工具:JMeter、LoadRunner、Gatling、WebLOAD等。

压力测试

  • 压力测试是测试系统在极限负载下的性能和表现。在压力测试中,测试人员会以最大负载来测试系统的性能。这种测试可以确定系统能够承受多大的负载,以及在超负荷状态下系统的表现。通过压力测试,可以发现系统的性能极限,并找到系统在高负载下的瓶颈和问题。

  • 目标:在超过系统正常负载的情况下,对系统不断施加压力,以评估系统的最大服务级别和恢复能力。

  • 执行方式:在超过安全负载的情况下对系统施加压力,确定一个系统的瓶颈或不能接收用户请求的性能点。压力测试可以帮助识别潜在的性能瓶颈、确保系统的可靠性和可伸缩性,并验证系统在极端条件下的恢复能力。

  • 方法:测试系统在一定饱和状态下(如CPU、内存等资源高负荷使用)的性能和稳定性,观察系统是否会出现错误。

  • 工具:LoadRunner、WebLOAD等,这些工具能模拟大量用户同时访问,以测试系统的抗压能力。

容量测试

容量测试是评估系统所能支持的最大用户量的测试方法。测试人员会测试系统在正常和极限负载下的表现,并确定系统所能支持的最大用户量。这种测试可以帮助系统管理员评估系统的扩展能力和容量,以便满足用户的需求。

稳定性测试

稳定性测试是测试系统是否具有稳定性、可靠性和可用性的测试方法。在稳定性测试中,测试人员会测试系统在长时间运行和不同负载下的表现,以确定系统是否具有稳定性和可靠性。通过这种测试,可以找出系统的稳定性问题,以便对系统进行改进。