1.性能测试必要性评估
常见关键评估项
监管单位要求性能报告
涉及财产、生命安全的系统
首次投产的大型系统
核心数据库、软硬件升级
用户量、业务量增长30%以上
单版本单业务评估权重
是否平台核心位置
是否存在部署方式调整或优化
是否增加了性能风险较高的调整
是否存在客户要求必须测试的业务流程
是否涉及多个功能缺陷的修复且流程发生较大变化
2. 性能测试需求分析
业务层面
用户大量使用的功能
日常占比80%以上的业务
特殊交易日或峰值80%的业务
核心业务发生流程重大调整的业务
项目层面
曾经测试过性能调整了架构的业务
逻辑复杂、关键的业务
可能消耗大量资源的业务
与外部系统存在接口调用、大量交互的业务
调用第三方业务组件且逻辑复杂的业务
性能测试需求评审
可测性
可搭建相对真实的环境
一致性
用户需求、生产需求(真实性)、运营需求(规划未来发展要求)
正确性
3.性能测试用例设计
测试模型建模
举例:登陆业务操作流程(思维导图)
打开首页
输入用户名、密码登陆
退出系统
场景用例设计
分类
单业务基准测试:是否满足系统设计和用户期望的性能指标
单业务压力测试:最大负载下,持续服务的时长
单业务负载测试:系统能够承受的最大负载
综合业务压力测试
综合业务负载测试
综合业务稳定性:核心业务基准负载下长时间运行系统稳定服务的能力
线程数计算
场景用例
![](http://upload-images.jianshu.io/upload_images/13281670-0ef09b09d290f95c.png?imageMogr2/auto-orient/strip|imageView2/2/w/857/format/webp)
脚本用例设计
![](http://upload-images.jianshu.io/upload_images/13281670-db00b88390eebf58.png?imageMogr2/auto-orient/strip|imageView2/2/w/1154/format/webp)
4.测试数据构造
BadBoy创建用户注册脚本
录制脚本导出为jmx
Jmeter迭代生成账号
${username}变量要导入CSV
![](http://upload-images.jianshu.io/upload_images/13281670-012346e18b388f49.png?imageMogr2/auto-orient/strip|imageView2/2/w/869/format/webp)
![](http://upload-images.jianshu.io/upload_images/13281670-d147fabaf47ae13a.png?imageMogr2/auto-orient/strip|imageView2/2/w/896/format/webp)
5. 测试脚本开发
BadBoy录制登陆与购买脚本
Jmeter配置
添加->定时器->固定定时器:设置间隔时间
添加->断言->响应断言:检查登陆成功
![](http://upload-images.jianshu.io/upload_images/13281670-43e78c4c899d675d.png?imageMogr2/auto-orient/strip|imageView2/2/w/888/format/webp)
添加->监听器->查看结果树/聚合报告
Fiddler的使用
若BadBoy未录制到商品添加到购物的请求,需要用Fiddler抓包手动添加
![](http://upload-images.jianshu.io/upload_images/13281670-5f2fa188282d817e.png?imageMogr2/auto-orient/strip|imageView2/2/w/874/format/webp)
添加->Sample->HTTP请求
![](http://upload-images.jianshu.io/upload_images/13281670-2a0becc4aba09306.png?imageMogr2/auto-orient/strip|imageView2/2/w/871/format/webp)
6.场景设计与实现
并发线程数与调度器配置
![](http://upload-images.jianshu.io/upload_images/13281670-dc72c9fec9d122fa.png?imageMogr2/auto-orient/strip|imageView2/2/w/457/format/webp)
如果是Badboy录制的脚本,循环设置在Step1设置 永远
监听结果
![](http://upload-images.jianshu.io/upload_images/13281670-6993ea701e9be169.png?imageMogr2/auto-orient/strip|imageView2/2/w/554/format/webp)
资源监听器gc-perfMon Metrice Collector
下载:
地址https://jmeter-plugins.org/downloads/all/,下载plugins-manager.jar
把给文件放到apache-jmeter/lib/ext目录下
增加插件:
选择,重启
![](http://upload-images.jianshu.io/upload_images/13281670-70a30223be1973a6.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
添加监听器:
重启后可以 添加-监听器-@gc-perfMon Metrice Collector
增加CPU、内存等指标后保存
![](http://upload-images.jianshu.io/upload_images/13281670-48128bc64f80bef9.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
7. 用例执行
环境
注意客户端性能
注意服务器最好能够独占测试
注意时间的选择,测试环境/生产环境最好是少人使用的时候
记录服务器配置
测试服务端配置:
应用服务器-机型-台数-CPU-内存-IP
数据库服务器-机型-台数-CPU-内存-IP
测试客户端配置:
客户端-机型-台数-CPU-内存-IP
运行任务
8.结果分析
响应时间
![](http://upload-images.jianshu.io/upload_images/13281670-41ee580eaaece08d.png?imageMogr2/auto-orient/strip|imageView2/2/w/554/format/webp)
Apdex
![](http://upload-images.jianshu.io/upload_images/13281670-1ad2b96b7742ce68.png?imageMogr2/auto-orient/strip|imageView2/2/w/488/format/webp)
业务成功率(看断言)
测试脚本中设置了断言,判断用户登录后是否出现“登录成功”字样,并设定“断言结果”查看器,通过查看断言结果,全部通过表示业务成功率100%
![](http://upload-images.jianshu.io/upload_images/13281670-27a3f3b94cc4185d.png?imageMogr2/auto-orient/strip|imageView2/2/w/681/format/webp)
并发数
CPU与内存
![](http://upload-images.jianshu.io/upload_images/13281670-e2d216d72e1e0fd8.png?imageMogr2/auto-orient/strip|imageView2/2/w/554/format/webp)
数据库
![](http://upload-images.jianshu.io/upload_images/13281670-18a6febf8d1054a4.png?imageMogr2/auto-orient/strip|imageView2/2/w/553/format/webp)
结果统计
![](http://upload-images.jianshu.io/upload_images/13281670-f31ab104d047b383.png?imageMogr2/auto-orient/strip|imageView2/2/w/554/format/webp)
9.性能调优
性能问题表现特征
响应时间平稳但较长
响应时间逐步变长
响应时间随着负载变化而变化
数据积累导致锁定
稳定性差
响应时间长,系统越来越慢,出现业务错误,通常原因
物理内存资源不足;内存泄露;资源争用;外部系统交互;业务失败频繁重启,无终止状态;中间件配置不合理,数据库连接设置不合理;进程/线程设计错误