浅谈性能测试

测试划分

软件测试可以分为功能测试和非功能测试,功能测试根据测试金字塔可以分为单元测试、接口测试、UI测试、探索测试。更多的功能测试包含以下:

  • 单元测试(Unit testing)
  • 集成测试(Integration testing)
  • 系统测试(System testing)
  • 健全性测试(Sanity testing)
  • 冒烟测试(Smoke testing)
  • 接口测试(Interface testing)
  • 回归测试(Regression testing)
  • Beta/验收测试(Beta/Acceptance testing)

非功能测试包含以下:

  • 性能测试(Performance Testing)
  • 负载测试(Load testing)
  • 压力测试(Stress testing)
  • 容量测试(Volume testing)
  • 安全测试(Security testing)
  • 兼容性测试(Compatibility testing)
  • 安装测试(Install testing)
  • 恢复测试(Recovery testing)
  • 可靠性测试(Reliability testing)
  • 可用性测试(Usability testing)
  • 一致性测试(Compliance testing)
  • 本地化测试(Localization testing)

测试思维

不同的测试之间,使用到的测试思维是不同的。

功能测试是对输出结果的校验,都是模拟单用户的操作,对比预期结果和实际的输出结果。

性能测试是同时模拟多个用户同时操作,关注服务端的响应时间。

性能测试

通过工具模拟多用户发起请求的行为,获取性能指标值

常见模拟工具分类:

  • 使用线程
    • 线程是使用进程的资源。工具:Jmeter、LoadRunner
  • 使用进程
    • 资源拥有者,资源销毁会更大。工具:LoadRunner
  • 使用进程+ 线程
    • 工具:ngrinder
  • 使用协程
    • 虚拟线程。工具: python+locust

概念

  • 满意度指数

多用户同时访问登入接口,性能中的avgRT应该在1.5s可以被接受的。因为1.5秒 是APDEX 用户满意度指数。

  • 事务

一个请求行为,并不一定只有一个接口,所以,一个事务可能是多个接口。

注意:在Jmeter中,默认1个接口请求一次,即每次请求行为是一个事务,可以通过事务控制器,挂载多个接口请求,合并成为1个事务。

  • 性能指标:

    • 平均响应时间(avgRT)

      • 比如 rt90%,rt95%,rt99%
    • 服务器每秒处理的事务数(TPS)

      • 衡量服务器处理能力的最主要的指标
      • 50tps: 服务器每秒能处理50个事务,1小时是50 t/s * 60 * 60 = 18w
    • 用户请求频率(RPS)

      • 100个并发数发起请求,一秒钟会发起多少请求?

      如果每个并发都消耗1秒(即请求频率是是1),则请求总量是100。

      如果每个并发都消耗200毫秒(即请求频率是是5),则请求总量是500。

      当请求的频率不清楚时,无法计算1秒钟总请求量。

    • 每秒查询率(QPS)
      • 如果把1个事务,当做只查询1次,则QPS=TPS。
      • 实际请求可能是 1个TPS: N个QPS,即1 个完整事务请求会包含多个查询的请求。
    • 每秒用户点击率(HPS)
      • 更侧重页面上的点击。
  • 吞吐量

    • 网络中每秒传输的事务数
      • 没有网络瓶颈:tps 数值 = 吞吐量数值
      • 如果网络有瓶颈: tps 数值 != 吞吐量数值
  • 吞吐率

    • 每秒钟能通过多少kb数据
  • 服务器资源利用率

    • cpu、内存、io的利用率
  • 并发用户数:

    • 同一时间发起请求的用户数

      • 广义并发: 同一时间发起请求(相同和不相同)

        • 针对整个产品的请求
      • 狭义并发:同一时间发起相同请求

        • 集合点:集合多个人在同一时间发起相同请求

        • 比如秒杀接口。

性能测试流程

  • 性能测试准备
  • 搭建性能测试环境
  • 性能测试脚本开发
  • 性能测试脚本执行
  • 结果分析与调优
  • 测试报告与结果跟踪

负载测试

负载测试是通过逐步增加并发用户数,找出性能的最大拐点区间。

  • 逐步增加并发用户数
  • 区间判断
    • 有没有报错
    • tps下降
    • 响应时间变长

压力测试

使用一定量的并发用户数,持续比较长时间向服务器发起请求,查看服务器的稳定性

一定量访问会小于最大并发用户数 ,比如20% 或 80%。

前者20%为了更快收集数据便于统计分析。

后者80%是为了观测服务器的稳定性。

容量测试

比如测试环境和生成环境所使用的测试数据容量。

在性能测试时,如果数据库的数据量级是不一致的,性能指标值,也可能存在差异。 所以在测试中要使用和生产相应的数据量级。同时要保证机器资源配置是和生产完全一样(硬件配置一样、数量一样、网络一样、架构参数一样)。

测试顺序

在性能测试之前,最好先进行负责测试,分析性能的最大拐点。在根据拐点值进行性能测试,分析性能指标和调优。最后做压力测试查看服务器的稳定性。

  1. 负载测试
  2. 性能测试
  3. 压力测试

(本文完)


浅谈性能测试
https://maojun.xyz/blog/2023/09/浅谈性能测试.html
作者
毛 俊
发布于
2023年9月24日
许可协议