性能测试方案的设计和最佳实践

性能测试方案的设计和最佳实践

1.明确压测目标

首先要明确压测的目标和目的,尽量让测试目标有量化的标准。对于一个系统,一般最核心的两个性能指标为响应时间和吞吐量,另外还需要对系统的并发数、伸缩性、稳定性以及异常情况下系统的健壮性等有特殊需求。
吞吐量=1s/响应时间

2.压测场景设计和压测方案制定

  • 业务模型分析
    首先,需要对业务模型进行分析,选择日常请求量比较大而且路径覆盖范围比较广的典型业务,建立性能测试的业务模型,确定各个接口的请求量的占比。
  • 确定测试类型
    1)基准测试
    基准测试指对单线程下单接口的测试,主要用于调试测试脚本的正确性,以及查看每个接口在无压力情况下对每个请求的响应时间,这个数据作为后续复杂压测场景的基础数据。
    2)容量测试
    容量测试指检查系统能处理的最大业务量,在测试过程中采用梯度加压的方式不断增加井发用户量,监控响应时间和系统资源的变化情况,响应时间曲线出现拐点时的业务量就是系统 能处理的最大业务量。
    3)负载测试
    负载测试用于测试单个接口在不产生任何错误的情况下能够提供的最佳的系统性能,从而得出单个接口在响应时间满足用户需求时的最大吞吐量和并发数。压力测试的目的是检查系统 能够支持的最大的用户井发量,在测试过程中采用梯度加压的方法,不断增加并发数,监控接口响应时间和状态,当出现连接数平稳且系统开始超时或出现错误时,便会出现系统性能指标 的衰退点。
    4)混合业务测试
    混合业务测试指按照业务流程的要求对接口调用按照比例进行编排,并采用一定的测试加压方式进行加压,获取系统对业务流程的最大处理能力,以及每个接口单独的处理能力。
    5)稳定性测试
    高并发的互联网系统,尤其是金融、支付、银行系统,对稳定性的要求比较高,因此需要对这些系统进行稳定性测试。在稳定性测试的过程中,按照混合测试的业务流程对系统施加合理的压力,井持续执行一定时间。 针对系统的运行情况,判断系统是否健壮、是否存在内存泄 漏、是否存在较多的上下文切换。最重要的是经过一定时间的稳定性测试,可以发现系统程序内隐藏的具有时间积累效应性质的 Bug。
    6)异常测试
    异常测试指在依赖服务中断、网络中断、硬件故障等异常情况下,系统对业务的影响情况, 例如系统对业务流程的处理是否产生不一致、系统设计的时效转移是否生效等。
  • 确定加压方式
    1)瞬间加压
    瞬间加压指通过测试工具模拟大量的并发请求,同时将全量负载加压到目标系统的接口,主要考验系统对突发流量的处理能力,也考验系统是否设计了消峰功能和对瞬间大量负载的熔断、限流、隔离、失效转移、降级功能,主要应用于类似秒杀、抢购、抢红包等场景中。
    2)逐渐加压
    逐渐加压指模拟通用的线上系统的压力。线上系统的压力在一定周期内大体为抛物线的趋 势,例如在一天内,从早上开始,系统的压力会逐渐增加,直到晚上的黄金时间达到最大,然后逐渐下降。逐渐加压可以最大限度地模拟这种负载压力的分布情况。
    3)梯度加压
    梯度加压与逐渐加压类似,但是加压目的不同,梯度加压的目的是通过逐渐增加用户并发 量,并观察系统的输出能力,找到最佳或者最大的系统负载。具体指在响应时间满足业务要求的情况下达到的最优或者最大的吞吐量和并发数。
  • 确定延时方式
    1)一个请求发送完毕立即发送下一个请求。
    2)一个请求发送完毕后间隔的时间再发下一个请求。
    3)以一定的时间间隔均衡地发送请求。
    上述第3种方式更易于控制系统的吞吐量,以方便设定合适的时间间隔,能够帮助我们快速找到最佳的系统吞吐量、响应时间和并发数。
  • 压测方案和压测场景
    首先,需要通过基准测试找到系统的各个接口在没有负载的情况下的响应时间,在得到基准测试的响应时间后,开始使用梯度加压方式,根据目标吞吐量和基准测试的响应时间,估算出需要使用的并发数。在实际测试的过程中,将基准长测试的响应时间作为客户端发送请求的步长,并将并发数作为客户端施加负载的线程数。根据梯度的计算,以此类推,找到响应时间满足业务方需求的情况下系统的最大吞吐量和并发数。由于现在的系统都是服务话系统或者微服务架构系统,所以找到系统最大的吞吐量和并发数后,需要验证系统是否具有可伸缩性。需要把服务部署在双节点上,对双节点同时加压,查看双节点的最佳吞吐量、响应时间和并发数。根据梯度测试的结果和制定的压测目标,通常认为CPU和内存利用率在70%一下为合理,然后使用这个最佳负载,让系统持续运行24小时来观察系统的稳定性,以确定系统没有出现超时、报错、内存溢出等错误,保证系统的稳定性。

3.准备压测环境

  • 压测环境的软硬件
    我们秉着与线上软硬件环境相同的原则搭建环境,如果因为某种原因不能与线上软硬件环境完全一致,则也需要尽量保持与其相似或者相近。这里要注意,压测环境的硬件配置不能高 于线上生产环境,否则测试数据不具备参考意义。
  • 压测脚本
    业务方的压测接口多种多样,由于压测时需要使用与接口兼容的客户端进行调用,因此需要开发脚本调用压测接口,并构建测试流程,在构建测试流程的过程中可能需要串联服务或者聚合服务,也可能需要对一些常量的参数进行配置,例如:用户名、密码等,这些都需要在测试脚本中实现。推荐一个测试脚本包含一个单独的业务流程,便于统计性能结果及在以后重用 。
  • 数据准备
    根据实际生产情况或者在前面进行的系统容量评估,我们可以确定测试的数据集大小。

4.压测的执行

压测的执行指根据我们制定的压测方案,执行各个压测场景的测试用例,井通过观察和监控系统资源、数据库、缓存和消息队列的使用情况,判断系统是否满足既定目标,井对测试过 程中的数据进行记录和分析,形成最终的压测报告。

  • 系统层面的指标: CPU、内存、磁盘 1/0、网络带宽、线程数、打开的文件句柄、 线程 切换和打开的 Socket 数量等。
  • 接口的吞吐量、响应时间和超时情况等。
  • 数据库的慢 SQL、 SQL 行读、锁等待、死锁、缓冲区命中情况和索引的使用情况等。
  • 缓存的读写操作的吞吐量、缓存使用量的增加数量、响应时间和超时情况等。
  • 消息列队的吞吐量变化情况、响应时间和超时情况等。

压测报告主要包含以下内容:

  • 压测过程中记录的压测数据。
  • 分析是否满足既定的压测目标。
  • 指出系统存在的瓶颈点。
  • 提出系统存在的潜在风险。
  • 对系统存在的瓶颈点和潜在风险提出改进意见。

5.有用的压测工具

  1. ab
    ab是一款准对HTTP实现的服务进行性能压测的工具。
  2. jmeter
    jmeter试Apache开发的基于java的性能压力测试工具。
  3. mysqlslap
    是mysql自带的一款性能压测工具,通过模拟多个并发的客户端访问mysql来执行压力测试,同时提供了详细的数据性能报告。可以自动生成测试表的数据,并且可以模拟读、写、混合读写、查询等不同使用场景,也能够很好地对比多个存储引擎在相同环境的并发压力下的性能差异。
  4. sysbench
    sysbench可以进行CPU、线程、磁盘随机I/O、内存进行测试。
  5. LoadRunner是惠普的一款商业话性能测试工具,通过模拟成千上万的用户同时对目标系统实施高并发负载, 井实时监测系统资源的使用情况及表现的性能指标等方式来发现和定位问题, 是一款专业的性能和负载压力测试工具。
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值