2020-软件测试-性能测试

性能测试

  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. 使用了一个监控服务器和性能测试控制服务器

2.1.1. 测试难点

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


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

2.1.2. 测试要求和方案

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

2.1.3. 无人值守性能测试

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

2.1.4. 测试环境

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

2.2. 淘宝Web性能测试

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

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

  1. 关注浏览器

2.2.2. 页面访问瀑布图

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

2.2.3. 前端优化



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

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

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

2.2.5. 性能测试指标

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

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

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


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

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

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


2.2.7. 通过标准

  1. 决定是否能发布

2.2.8. PTS介绍和架构





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

2.3. JMeter 使用


2020-软件测试-性能测试
https://spricoder.github.io/2020/07/07/2020-Software-Test/2020-Software-Test-%E6%80%A7%E8%83%BD%E6%B5%8B%E8%AF%95/
作者
SpriCoder
发布于
2020年7月7日
许可协议