• Java测试(12)---性能测试


    1.常见的性能问题

    (1)内存泄漏

    软件运行的时候没有回收内存,导致系统运行越来越慢

    (2)CPU使用率达到百分之百

    (3)线程死锁,阻塞,造成系统运行越来越慢

    (4)查询速度越来越慢

    (5)受外部系统的影响越来越大

    2.为什么要进行性能测试

    (1)获取系统性能的指标,作为性能基准指标

    一个新系统,你不熟悉这个系统的性能指标;

    (2)验证系统的性能指标是否符合需求

    应用系统是否能够满足系统的各项性能指标;

    应用系统是否可以处理预期的用户数量,并且是否有盈余能力;

    应用系统是否可以处理预期的事务数量;(事务-->一系列密切相关的操作)

    在预期和非预期的情况下,系统是否可以稳定的运行;

    在预期或者非预期的情况下,用户使用软件时是否可以获得舒适的体验;

    (3)看系统是否有内存泄漏等瓶颈问题

    (4)系统在正常工作下能处理的用户的数量

    (5)了解系统的性能,让运维部门更好的规划系统的各种配置

    3.确定性能测试的需求(性能指标,量化)

    (1)关键性能指标的分析

    例子:某电商交易系统,业务要求支持2亿用户(同一时刻1%的用户在线),每天支持2000万次交易量(交易的时间集中在早上8点到凌晨2点),交易响应时间要求在1s中之内。此外,高峰期系统的处理能力要求是平均值的3倍;本地交易响应时间正常低于1s,在高峰时可以高于1s,但是要在3s内。正常及交易成功率100%,在高峰期不能低于99.9%
    这样的业务要求,作为测试人员,如何转化为可以性能测试可以验证的指标呢?

    • 同一时刻支持200万用户在线;
    • 18个小时要处理20000000次交易(平均每秒要处理309次请求);
    • 高峰期时平均每秒要处理927次请求

    (2)关键业务的分析’

    系统出问题,一般不是系统所有的功能出问题,而是一些关键的业务或者功能出了问题导致的。

    1>在分析性能指标的时候,要选择用户频繁使用的功能;

    2>计算量比较大的业务

    4.常见的性能指标

    (1)系统/事务的平均响应时间

    (2)事务处理效率TPS

    (3)吞吐率

    (4)每秒点击次数

    (5)服务器资源占用情况,内存和CPU使用率

    (6)软、硬件配置是否合适(容量规划/硬件选型)

    5.不同的维度衡量系统的性能

    (1)研发人员

    系统的架构是否合理,是否支持多线程并发这类操作

    数据库设计是否合理(合理放入索引和合理的关联表关系)

    算法,核心算法是否高效

    设计和代码:是否存在不合理的线程同步方式和不合理的资源竞争

    (2)系统运维人员

    系统对资源的利用率,服务器(CPU,内存,磁盘,网络带宽等)的利用率和数据库的使用状况;

    系统的容量:系统支持的最大用户数;

    系统的稳定性:是否可以稳定运行,一天24小时;

    系统的可扩展性,如果要进行扩容操作,系统可以支持;

    (3)用户

    使用起来是否舒适,响应是否速度快,稳定性好;

    (4)性能测试人员

    以上层面都需要关注

    当系统性能无法达标时,关注引起系统性能的瓶颈;

    6.性能指标

    (1)并发用户数

    业务层面的并发数:同一时刻向后端服务器发送请求的用户的数量;

    后端服务器的并发数:同一时刻向后台服务器发送请求的数量;

    (2)响应时间

    指的是用户发送请求,到用户所期待的响应完全展示到前端所需要的时间;

    前端响应时间

    系统响应时间,服务器之间通信处理请求所需要的时间

    (3)事务的响应时间

    事务:指的是一系列密切相关的操作的集合

    系统中完成一个事务的平均响应的时间

    (4)每秒事务通过数

    TPS  平均每秒处理的事务的数量

    例子:过地铁检票机器,一台机器一秒可以通过一个人,一共有10台机器。

    当有5个乘客的时候,每秒可以通过多少个人--->10(机器自己的能力,就是每秒通过是个人)

    当有10个乘客的时候,每秒可以通过多少个人--->10

    当有100个乘客的时候,每秒可以通过多少个人--->10

    (5)点击率

    每秒点击数代表用户每秒向web服务器提交的HTTP请求的个数

    点击率越大,服务器的压力越大

    (6)吞吐量

    指的是单位时间系统处理的信息量

    TPS,HPS(HTTP  Per  Second) ,bytes/Second

    (7)思考时间

    模拟用户实际操作的停顿时间

    (8)资源利用率

    系统在运行的时候资源的使用情况,包括CPU(一般不超过70%),内存,硬盘,网络等

    7.模型

    目的:当系统的性能不满足需求的时候,我们需要扩展系统的性能

    #某地铁站进站只有3个刷卡机。

    #人少的情况下,每位乘客很快就可以刷卡进站,假设进站需要1s。#乘客耐心有限,如果等待超过30min,就暴躁、唠叨,甚至放弃。
    场景一:只有1名乘客进站时,这名乘客可以在1s的时间内完成进站,且只利用了一台刷卡机,剩余2台等待着。
    场景二:只有2名乘客进站时,2名乘客仍都可以在1s的时间内完成进站,且利用了2台刷卡机,剩余1台等待着。
    场景三:只有3名乘客进站时,3名乘客还能在1s的时间内完成进站,且利用了3台刷卡机,资源得到充分利用。
    场景四: A 、 B 、 C 三名乘客进站,同时 D 、 E 、 F 乘客也要进站,因为 A 、 B 、 C 先到,所以 D 、 E 、 F 乘客需要排队。那么, A 、 B 、 C 乘客进站时间为1s,而 D 、 E 、 F 乘客必须等待1s,所以他们3位在进站的时间是2s。
    场景五:假设这次进站一次来了9名乘客,有3名的"响应时间"为1s,有3名的"响应时间"为2s(等待1s+进站1s),还有3名的"响应时间"为3s(等待2s+进站1s)。
    场景六:如果地铁正好在火车站,每名乘客都拿着大小不同的包,包太大导致卡在刷卡机堵塞,每名乘客的进站时间就会又不一样。刷卡机有加宽的和正常宽度的两种类型,那么拿大包的乘客可以通过加宽的刷卡机快速进站(增加带宽)。
    场景七:进站的乘客越来越多,3台刷卡机已经无法满足需求,为了减少人流的积压,需要再多开几个刷卡机,增加进站的人流与速度(提升 TPS 、增大连接数)。
    场景八:终于到了上班高峰时间了,乘客数量上升太快,现有的进站措施已经无法满足,越来越多的人开始抱怨、拥挤,情况越来越糟。单单增加刷卡机已经不行了,此时的乘客就相当于"请求",乘客不是在地铁进站排队,就是在站台排队等车,已经造成严重的"堵塞",那么增加发车频率(加快应用服务器、数据库的处理速度)、增加车厢数量(增加内存、增大吞吐量)、增加线路(增加服务的线程)、限流、分流等多种措施便应需而生。
     

    8.性能测试的方法

    (1)基准测试

    系统的新版本,或者新接手的系统,需要进行基准测试,获得系统的性能指标,作为以后改善系统性能,或者保持系统性能d额基准。

    进行基准测试不仅可以获取系统的基准性能指标,也可能会发现新系统的一些性能问题

    (2)并发测试

    同一时刻,向后端服务器发送请求,测试系统的表现,看系统是否会因为以后量大而出现资源竞争、死锁等问题。

    (3)压力测试

    压力测试一般指后端压力测试,不断向系统施加压力,看系统在长期处于临界饱和情况下,系统的稳定性以及系统性能指标的变化。

    进行压力测试的时候会不断向系统增加符负载,使得系统长期处于高负荷情况,看系统在极限的情况下是否稳定,确定系统在极限情况下的CPU利用率,内存使用情况等其他指标。

    (4)配置测试

    系统配置在不同的配置上进行测试,找出能够使得系统的性能发挥最优的配置。

    1>操作系统的配置 ---> linux Ubuntu  Redhat

    2>数据服务器的配置  ---> 读写,存储容量大

    3>JVM配置

    4>网络环境

    5>服务器--->内存、磁盘等

    (5)可靠性测试

    验证系统长时间运行的稳定性

    系统实际负载的70%左右,长时间运行,看系统是否运行稳定,指标是否稳定

  • 相关阅读:
    Webpack/Babel/⼯程化 笔试题精讲1
    微信公众号、支付
    通讯网关软件026——利用CommGate X2ORACLE-U实现OPC UA数据转入ORACLE
    Codeforces Round 860
    K8S-PV与PVC
    OpenShift 4 - 部署 RHODS 环境,运行 AI/ML 应用(视频)
    16. 最接近的三数之和 - 力扣
    英特尔会是下一个诺基亚吗?
    redis搭建集群-多实例快速搭建
    【示波器专题】示波器带宽对测量的影响
  • 原文地址:https://blog.csdn.net/m0_58272200/article/details/132755396