性能测试怎么做

一、为什么做性能测试

1. for 用户:系统有多快;系统有多稳定

2. for 老板:硬件配置;成本

3. for 开发:系统容量;系统瓶颈;如何调优;架构是否合理

二、什么时候做性能测试

常规会在系统测试结束后开始做性能测试,但实际性能测试应该贯穿始终。需求设计时,pm就需要有预期流量 -> 代码设计时,rd就应该根据性能目标设计框架,包括时延、qps等 -> 开发过程中,rd需要逐个模块验证性能是否符合需求 -> 功能测试时,需要根据性能指标设计。

三、如何做性能测试

1. 识别系统瓶颈(内存、磁盘等),建立测试数据模型(数据量大小),确定测试维度(qps、时延)

2. 设计详细的测试计划,指导测试执行

3. 规划测试环境,避免环境瓶颈(机器环境与线上一致、如依赖上下游复杂,可以mock)

4. 测试工具使用:数据脚本、统计脚本

5. 执行测试环境,获取测试数据

6. 根据测试数据,调整投放的压力,持续测试(绘制曲线,获取极限、最优点)

7. 生成报告

四、性能测试指标

1. 处理速度:qps、tps、pps

2. 响应时间:平响、99值

3. 吞吐:网络、磁盘

4. thinktime:模拟人的操作,增加一定延时

5. 并发数:最高同时在线数 * 有效用户百分比

五、常用工具

1. linux 命令:top、iostat、iotop、vmstat、sar、mpstat

2. ab、jmeter、loadrunner:工具的原理基本相同,均可设置并发数、测试接口、最大响应时间、断言等。其中并发数原理,如ab的并发数是同时建立socket的连接数。1个并发建立1个socket连接,每个socket相当于1个管道,管道间相互独立,发一个请求收到响应后再进行下一个请求。

六、实战示例

【1】web 压测:要求支持300w在线用户。

1. 数据模型:20%用户是活跃用户(28原则或pm给出);晚上7-9点用户活跃;忙时每个用户每分钟平均浏览3个页面;页面平均大小 2kb;用户等待 < 2s

2. 确定压测指标:

qps = 请求数/忙时时长     qps = 300w*20%*3*60/(2*3600) 

网络带宽 = qps * 2kb * 8

响应时长 = 2s

3. 执行压测

阶梯式设置压力,例如并发数:10 -> 50 -> 100 -> 500 -> 1000。根据每个并发数下面得到的测试指标(cpu、qps、响应时间等)调整下次压测的压力数。

可能压测结果异常情况示例:内核sys态cpu占用高,可能是因为系统不停调度cpu,锁的力度过大,导致所有线程在等待同样的指令。

【2】mysql 压测

1. 数据模型:20%写请求;80%读请求;日均产生记录2000条;一年备份2次表;读写平均大小200b;响应时长 < 200ms;读tps>1000;写tps>500

2. 确定压测指标:

读写混合,所有响应时间 < 200ms,响应时间99值 < 60ms

数据量:2000*365(至少730w数据完成功能测试)

读tps > 1000,写tps > 500

3. 执行测试:

写请求测试执行 -> 读请求测试执行 -> 综合测试执行(20%写,80%读),关注tps

【3】调度系统压测

大部分服务都不止一个后台,看看上面这个服务,可能的瓶颈在哪呢?嗯,是调度和存储系统,因为是单点。压测类似服务步骤:单独测后台性能极限 -> mock后台,测调度系统的性能极限 -> 存储系统处理能力

七、系统调优

了解系统处理逻辑:多阅读研发的代码,了解代码逻辑

了解系统原理:tcp、内核等

了解测试工具原理:因为工具的设计往往体现了测试思维

多思考,可以参考研发如何分析瓶颈

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 综述 1.1 什么是性能测试 检验系统的性能是否符合要求的测试。包括压力测试、负荷测试、可靠性测试、稳定性测试...... 1.2 性能测试包括哪些方面的测试 速度:服务响应速度 容量:最大支持用户数 可靠性:高负荷运行、长时间运行 1.3 性能测试的目的 (举例) 测算系统的性能指标 系统的性能瓶颈 给出较适合的软硬件配置方案 检验硬件配置能否满足客户要求 系统优(硬件优、数据优) 出一份报告给客户看 1.4 性能指标 (举例) 平均响应时间(秒) 成功率(%) 系统最大处理能力(请求/秒) 系统支持的最大并发用户数 系统预期响应时间(秒) 1.5 性能测试过程 确定目的 设计方案 测试实施 数据分析 2 性能测试过程详述 2.1 确定目的 2.1.1 如何确定测试目的 问主管 问项目经理 问市场人员 问客户 看需求规格说明书 看系统设计文档 靠经验 2.1.2 确定分析方法 需要收集哪些数据 由这些数据怎样分析出测试目的 2.1.3 注意事项 并非所有目的都是合理的(典型例子:测一下所有用户同时点击某个功能) 要找到真正的目的,而不是光问出一句话,有时候,一个人说的并不是他真正要的 各种方法所收集到的目的很可能是不同的,要综合分析,并与相关人员确认 2.2 设计方案 2.2.1 选择具有代表性的功能 最常用的 最耗资源的 2.2.2 设计测试环境 各台机器软硬件配置 系统的各个程序运行在哪台机器上 2.2.3 选定测试工具 通常是选用现成的测试工具,例如loadrunner,但也可能需要自己编写 2.2.4 设计测试步骤 系统运行的步骤 测试数据(界面输入的数据数据库表中的记录数、索引情况) 2.2.5 确定要记录的原始数据 由测试目的决定 举例: 成功次数、失败次数 测试总时长 CPU占用率(平均、最大) 内存占用 磁盘I/O 2.2.6 注意事项 一般来说,系统的各个程序运行在哪台机器上,在这个阶段可以初步确定,但在测试实施阶段可能还要作出整 确定数据库表的记录数时,采用从严的原则,在客户实际使用可能产生的数据量的基础上乘以1.5到10倍 确定需要记录哪些原始数据时,采用从宽的原则,即不确定是否需要时,尽量记录下来 2.3 测试实施 2.3.1 搭环境 2.3.2 运行测试工具,记录原始数据 2.3.3 对原始数据进行初步分析 根据成功、失败次数确定本组数据是否有效(成功率大约95%,成功次数大于20) 根据成功、失败次数确定是否需要整一组数据的测试时长 根据数据的发散情况确定本组数据是否有效 根据前后数据的对比确定本组数据是否有效 根据前后数据的对比确定是否需要在同样情况下再次测试 根据CPU占用率确定下一步的负荷 ...... 2.3.4 重复上面2步 2.4 数据分析 根据原始数据计算出性能指标,对当初确定的目的作出一个结论 3 性能测试的误区 性能测试主要就是测试工具的使用 测试工具可以自动生成我所需要的报表 我不好性能测试,是因为对测试工具不熟悉 4 常见问题 主管要我性能测试(或压力测试、负荷测试),我该怎么办? 我用工具测了一些数据出来,我要怎样分析?我们的系统到底性能怎么样?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值