性能测试

  1. 例子:北京奥运会的售票宕机

1. 什么是性能测试

  1. 验证产品的性能在特定负载和环境条件下使用是否满足性能指标
  2. 进一步发现系统中存在的性能瓶颈,优化系统

1.1. 性能测试的度量方法

  1. 不同的关注对象采用不同的性能的度量方法
  2. 服务端性能采用CPU、内存等使用率来度量
  3. 客户端性能通常根据系统处理特定用户请求的响应时间来度量

1.2. 响应时间

  1. 系统对请求作出响应所需要的时间
  2. 响应时间的细划分
  1. 服务端响应时间:请求发出开始到客户端接收到最后一个字节数据所消耗的时间
  2. 客户端响应时间:客户端收到响应数据后呈现/响应用户所需的时间。

1.3. 并发用户数

  1. 并发用户数取决于测试对象的目标业务场景
  2. 先确定业务场景,然后基于场景采用某些对应方法计算并发用户数。
  3. 并发用户数与同时在线数是有区别的

1.4. 吞吐量

  1. 单位时间内处理的用户请求数量
  2. 访问人数/天,页面数/秒,请求数/秒,处理业务数/小时等等

1.5. 性能计数器

  1. 性能计数器是描述系统性能的一些数据指标
  2. Eg.内存使用率、CPU使用率、进程时间等都是常见服务器性能计数器
  3. 性能计数器与系统配置情况、系统架构、开发方式都有密切联系。

1.6. 负载测试

  1. 负载测试用于验证系统在正常负载条件下的行为
  2. 两种方式:负载数:并发用户数,事务数
  1. 直接到达负载数
  2. 逐步增加负载数

1.7. 压力测试

  1. 压力测试是评估应用系统处于或者超过预期负载时的行为。
  2. 压力测试关注的行为不一定是性能行为,可能是某种Bug,比如同步问题,性能泄露
  3. 压力级别逐渐增加的时候,系统性能应该按照预期缓慢下降,但是不应该崩溃。(系统性能能不能回来)
  4. 压力测试还可以发现系统崩溃的临界点,从而发现系统的薄弱点。

2. 具体实践

  1. 测试后期管理和测试。

2.1. 趋势IWSaaS+AWS性能测试

  1. IWSaaS:部署在云上的安全网关,部署在Amazon云平台,为全球提供服务(发布周期是1-2星期)
  2. Auto Scaling:动态调整实例
  3. 使用了一个监控服务器和性能测试控制服务器

软件测试-4-性能测试_压力测试

2.1.1. 测试难点

  1. 十万级用户支持
  2. 20 + 安全网关实例
  3. 20 + Jmeter实例
  4. 动态实例:安全网关的数量是动态的,IP地址是动态的
  5. Jmeter多机联合不适合:负载会比较重

软件测试-4-性能测试_压力测试_02


软件测试-4-性能测试_性能测试_03

  1. 动态网关策略:
  1. CPU负载>70%,多开
  2. CPU负载<40%,少开

2.1.2. 测试要求和方案

  1. 基本测试要求:平均页面响应时间<2s
  2. 测试方案:
  1. Jmeter模拟用户产生HTTP流量来通过安全网关
  2. 初识用户数,逐渐增加用户数,直到找到符合条件的最大用户量和吞吐量
  3. 不断测试到大于2s为止

软件测试-4-性能测试_压力测试_04

2.1.3. 无人值守性能测试

  1. 部署自动化
  2. 性能测试自动化
  1. 控制服务器
  2. 自动上传测试脚本
  3. 自动上传测试报告
  1. 持续集成
  1. Jenkins集成,自动触发
  1. 及早发现和快速定位问题

软件测试-4-性能测试_性能测试_05

2.1.4. 测试环境

  1. 公网测试和本地测试
  2. splunk:管理系统
  1. 对于大量的服务器的log汇总到一起来查看
  1. Zenoss:自动组机测试

2.2. 淘宝Web性能测试

2.2.1. 页面加载事件的重要性

  1. 大多数用户期望的网站加载时间是3s,如果时间长于3s,网站就开始流失用户
  2. Amazon加载事件每多1s,收入少16亿收入

软件测试-4-性能测试_响应时间_06

  1. 关注浏览器

2.2.2. 页面访问瀑布图

软件测试-4-性能测试_运维_07

  1. 大量的时间浪费在了前端绘制上

2.2.3. 前端优化

软件测试-4-性能测试_压力测试_08


软件测试-4-性能测试_性能测试_09


软件测试-4-性能测试_响应时间_10

  1. 前端的优化是性价比很高的工具

2.2.4. 服务器端性能测试流程

软件测试-4-性能测试_响应时间_11

  1. 性能测试需求采集
  2. 性能方案评估
  3. 性能测试计划制定
  4. 性能测试方案的编写
  5. 性能测试方案的评审
  6. 开发脚本
  7. 数据准备
  8. 环境准备
  9. 执行性能测试
  10. 性能调优
  11. 编写性能报告
  12. 录入界限库
  13. 知识沉淀

2.2.5. 性能测试指标

软件测试-4-性能测试_响应时间_12

  1. PV:压测方法和重要决策依据

软件测试-4-性能测试_响应时间_13

  1. 前3个是重要的性能指标

软件测试-4-性能测试_服务器_14

  1. CPU消耗一定要注意不同核之间的负载均衡
  2. 保证CPU的满负荷运行

软件测试-4-性能测试_响应时间_15


软件测试-4-性能测试_服务器_16

  1. 我们关心Java虚拟机中老生带(Old Generation)和内存变化情况
  1. 老生代GC在一小时以上

软件测试-4-性能测试_响应时间_17

  1. 考虑网卡的瓶颈:
  1. 减少请求返回数量
  2. 缓存数据在本地
  3. 增大网卡带宽

2.2.6. 性能测试压力变化模型以及测试类型

软件测试-4-性能测试_性能测试_18


软件测试-4-性能测试_性能测试_19

2.2.7. 通过标准

软件测试-4-性能测试_响应时间_20

  1. 决定是否能发布

2.2.8. PTS介绍和架构

软件测试-4-性能测试_响应时间_21


软件测试-4-性能测试_压力测试_22


软件测试-4-性能测试_运维_23


软件测试-4-性能测试_压力测试_24


  1. PTS 对于阿里云用户免费,第一次会有引导。
  2. 测试脚本
  1. 域名绑定:绑定好域名
  2. 登录模块:保证只需要登录一次。
  3. 支持上传参数(在请求连接里面选择右键从文件中进行选择变量)首先上传本地CSV,之后快速启动即可以完成测试
  1. 场景:
  1. 三种不同测试
  2. 施压器:乘以并发数得到最后的总数
  1. 任务:
  1. 持续时间
  2. 开始时候晚于当前则会排机测试,不然则需要手动触发
  3. 计费以实际为准
  1. 实时监控:查看更多的信息
  2. 可以查看服务器的日志情况

2.3. JMeter 使用