大部分的人都知道有性能测试这么一回事,但是性能测试到底是怎么一回事以及又都有哪些具体分类就不是常人所能了解的,以下简单按我对性能测试的理解做下分类:
更多内容可以学习《测试工程师 Python 工具开发实战》书籍、《大话性能测试 JMeter 实战》书籍
1. 性能测试:
背景:在不了解服务端的性能测试前提下,希望通过性能测试摸清该服务端所能达到的性能数据
实践方式:通过从 1 并发开始不断增加并发数的方式收集性能数据,并反复验证
输出:服务端的性能测试数据,主要如 tps、平均响应时间、错误率、最佳用户并发数、最大用户并发数等
2. 负载测试
背景:在了解服务端的性能测试数据的前提下,希望通过负载测试求出该服务端的性能瓶颈问题所在,以及如何去优化
实践方式:通过从 1 并发开始不断增加并发数的方式,一边收集性能数据一边收集瓶颈问题,并反复验证
输出:服务端性能测试数据、对应数据下的瓶颈问题以及解决/优化方案
3. 压力测试 (高负载的负载测试)
背景:在确定服务端出现性能问题 (如内存泄漏) 或者希望通过高负载测试验证服务端是否会存在未知性能问题
实践方式:通过给予超过最大用户并发数的测试压力,长时间地对测试对象进行压力测试,并通过监控系统资源收集测试结果
输出:服务端性能测试数据、压测问题、原因、解决方案等
首先学会设计测试计划。使用 JMeter 或者 lr 进行性能测试计划的设计,多参考下别人设计的性能测试计划,将每个控件的使用方法掌握,尤其是线程组、定时器等。
学会监控性能数据。需要监控的数据包括:CPU/内存/缓存/IO 读写/网络/响应时间/吞吐率 (TPS) 等,应清楚监控方法/命令。
学会定位性能瓶颈。性能瓶颈可能出现的地方有:网络 (波动、延迟等/硬件资源 (CPU/内存/缓存/IO 读写)/数据库慢查询/线程死锁/异常等
网络 (波动、延迟等):nmon 网络监控,一般来说只需监控事务接入组件服务器的网络数据即可,其他内部组件一般都是属于局域网类型网络。
硬件资源 (CPU/内存/缓存/IO 读写):nmon 硬件资源监控,需监控所有服务器资源 (业务组件服务器/数据库服务器/MQ 服务器等),经验上看最有可能出现问题的是业务组件服务器.
数据库慢查询:数据库慢查询配置
软件问题:先分析日志,查看大概的问题所处业务逻辑位置,再借助工具 jstack(java 后台) 或者 pstack(其他后台)记录各线程运行堆栈信息,查看分析线程等待 (WAITING) 状态原因
- 网络 (波动、延迟等)
- 运维优化网络环境
- 硬件资源 (CPU/内存/缓存/IO 读写)
- 优化软件程序,重构复杂逻辑、递归,优化日志级别等
- 增加硬件配置
- 分布式部署
- 数据库慢查询
- 优化 sql 语句
- 重构业务逻辑
- 软件问题
- 优化程序逻辑
- 异步模式
性能测试是一门很深的学问,想要快速学好是不可能的,必须经过各种实践以及尝试才能够真正成长起来。