某公司-某产品APP_Ver1.1.0_
性能测试方案_
2017-07-10_黄涛
文档修订记录
版本号 |
修订日期 |
修改内容 |
作者 |
审核人 |
审核时间 |
目录
1. 测试背景.................................................................. 6
2. 测试目标.................................................................. 6
3. 测试范围.................................................................. 6
4. 名词术语.................................................................. 6
5. 角色说明.................................................................. 6
6. 进度计划.................................................................. 6
7. 测试环境.................................................................. 6
7.1. 生产环境系统架构.................................................... 6
7.2. 测试环境系统架构.................................................... 6
7.3. 生产环境软硬件配置.................................................. 6
7.4. 测试环境软硬件配置.................................................. 6
7.5. 负载机软硬件配置.................................................... 6
8. 需求分析.................................................................. 6
8.1. 业务模型............................................................ 6
8.2. 性能指标............................................................ 7
8.2.1. 业务性能指标.................................................. 7
8.2.2. 硬件性能指标.................................................. 7
9. 测试策略.................................................................. 7
9.1. 测试执行策略........................................................ 7
9.2. 测试监控策略........................................................ 7
10. 测试场景................................................................. 7
11. 测试准备................................................................. 7
11.1. 测试工具准备....................................................... 7
11.2. 测试环境准备....................................................... 7
11.3. 测试脚本和程序准备................................................. 7
11.4. 测试数据准备....................................................... 7
12. 交付清单................................................................. 7
13. 项目风险................................................................. 7
1. 测试背景
公司准备借助本系统来推广公司业务,并以此系统来提升公司品牌的影响力。考虑到当前和未来用户量和数据量的增长趋势。因此需要对本系统关键功能模块进行性能测试,以此验证系统是否符合预期性能指标要求和未来大用户量、数据量增长的情况下,系统不会出现性能瓶颈,以此避免后期的风险。
2. 测试目标
1)基于系统的业务量要求,评估系统能否满足预期的性能指标要求。
2)针对系统进行稳定性、大容量下的性能测试。
3)测试并找出系统可能存在的性能问题,分析系统瓶颈风险。
3. 测试范围
通过对原型文档、需求文档进行熟悉和梳理,结合系统用户的操作行为和习惯及业务类型的分析,得出性能测试范围和测试点如下表。
4. 名词术语
1)基准测试(Performance Testing):按生产的业务压力和使用场景组合,模拟一定的用户量来压测系统,同时收集吞吐量、响应时间指标数据后,目的是评估系统是否满足预期的性能指标要求。
2)负载测试(Load Testing):按生产的业务压力和使用场景组合,模拟不断增加业务压力,在保证系统满足性能指标的情况下(如某项或多项指标达到安全极限值),从而发现系统处理业务的极限能力,以便收集系统的最优并发用户数,最优TPS及最优TPS下的资源(业务指标:TPS、RT,硬件指标:CPU使用率、MEM使用率)使用情况,目的是找到系统处理能力的极限、或是系统的处理的性能容量,或为后期的性能调优作参考。
3)压力测试(Stress Testing):按生产的业务压力和使用场景组合,通过高负载,在使系统超过性能指标的情况下(如某项或多项指标超过安全极限值),从而发现系统处理业务的能力,以便收集系统的最大并发用户数,崩溃点下的TPS及崩溃点TPS下的资源(业务指标:TPS、RT,硬件指标:CPU使用率、MEM使用率)使用情况,目的是发现功能测试中非功能性缺陷。
4)稳定性测试(Endurance Testing):按生产的业务压力和使用场景组合,通过一定负载,在保证系统满足性能指标的情况下,按1.5~2倍的负载量来压测系统的情况下,测试系统在下长时间运行是否稳定,持续时间一般为:8小时~3*24小时。
5)吞吐量(TPS):系统每秒成功处理完成的事物数或请求数。
6)点击量(PV):每秒用户访问系统页面的次数。
7)响应时间(RT):系统成功处理完成每个事物或请求所需要的时间。
5. 角色说明
角色 |
职责 |
说明 |
测试经理 |
1)制定各类型的测试的测试计划 2)完成人员任务分配 3)协调在测试系统时所需要的资源 |
|
开发工程师 |
1)协助性能测试工程师,解决测试过程中遇到应用服务器、程序代码、底层运行环境(如:JVM)方面的问题。 |
|
性能测试工程师 |
1)协助测试经理完成计划的制定 2)制定测试流程、策略、控制测试流程、跟踪测试任务 3)组织与开发、产品人员针对系统的业务需求进行沟通 4)执行性能测试工作(测试环境、数据的准备、测试脚本的开发和维护,测试任务的执行,测试数据的采集和结果数据的分析、调优,性能测试报告的编写) |
|
运维工程师 |
1)协助性能测试工程师,解决测试过程中遇到的网络、操作系统、数据库方面的问题。 |
|
配置管理员 |
1)负责将测试过程中各产出物进行备份和归档管理,包括(测试计划、测试用例、测试脚本、数据库脚本、性能缺陷报告、性能测试报告等)。 |
6. 进度计划
任务名称 |
计划开始时间 |
计划结束时间 |
交付清单 |
参与人员 |
需求分析 |
|
|
性能测试计划 |
|
测试进度计划 |
|
|
|
|
测试模型设计 |
|
|
|
|
编写测试计划 |
|
|
|
|
准备测试环境 |
|
|
测试环境搭建文档 |
|
开发脚本 |
|
|
测试脚本(数据库脚本、压测脚本) |
|
测试数据 |
|
|
|
|
基准测试 |
|
|
测试结果数据(数据库、linux、中间件、jmeter) |
|
负载测试 |
|
|
|
|
压力测试 |
|
|
|
|
系统调优 |
|
|
系统调优报告 |
|
性能测试报告编写 |
|
|
性能测试报告 |
|
7. 测试环境
7.1. 生产环境系统架构
7.2. 测试环境系统架构
7.3. 生产环境软硬件配置
硬件类别 |
数量 |
硬件 |
|
软件配置 |
|
(web应用服务器) |
|
配置项 |
配置项说明 |
配置项 |
配置项说明 |
|
CPU |
型号:PowerEdge R730 Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz |
操作系统 |
类型:Centos7 |
|
|
内存 |
容量:64GB |
JDK |
版本:JDK1.7 |
|
|
磁盘 |
容量:2TB |
Tomcat |
版本:tTomcat8 |
|
|
网络 |
千兆宽带 |
|
|
|
(数据库服务器) |
|
CPU |
|
操作系统 |
类型: |
|
内存 |
容量:200GB |
MySQL |
版本:MySQL5.7.18 |
|
|
磁盘 |
|
|
|
|
|
网络 |
20兆宽带 |
|
|
|
|
其他 |
|
|
|
7.4. 测试环境软硬件配置
硬件类别 |
数量 |
硬件 |
|
软件配置 |
|
Centos7虚拟机 |
16 |
配置项 |
配置项说明 |
配置项 |
配置项说明 |
CPU |
型号:PowerEdge R730 Intel(R) Xeon(R) CPU E5-2620 v4 @
2.10GHz |
操作系统 |
类型:CentOS7 |
||
内存 |
容量:64GB |
JDK |
版本:JDK1.7 |
||
磁盘 |
容量:2TB |
Tomcat |
版本:Tomcat8 |
||
网络 |
4个网卡 |
|
|
||
Centos7虚拟机 |
2+3=5 |
CPU |
型号:PowerEdge R730 Intel(R) Xeon(R) CPU E5-2620 v4 @
2.10GHz |
操作系统 |
类型:CentOS7 |
内存 |
容量:64GB |
MySQL |
版本:MySQL5.7.18 |
||
磁盘 |
容量:2TB |
|
|
||
网络 |
4个网卡 |
|
|
||
其他 |
无 |
其他 |
1)由于是在dell一体机上,安装到的tomcat应用服务器及数据库服务器,因此,CPU、操作系统、内存、网卡、磁盘的配置是一样的,只是在部署各系统时分配的资源不一样 |
|
|
7.5. 负载机软硬件配置
硬件类别 |
数量 |
硬件 |
|
软件配置 |
|
负载机器 |
4 |
配置项 |
配置项说明 |
配置项 |
配置项说明 |
CPU |
型号:Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz,3401 Mhz |
操作系统 |
类型:windows旗舰版 |
||
内存 |
容量:16GB |
JDK |
版本:1.7.0_13 |
||
磁盘 |
容量:300GB,模式:ADATA SP900 SCSI Disk Device |
JMeter |
版本:3.1 |
||
网络 |
数率:100Mbps |
|
|
||
其他 |
|
|
|
8. 需求分析
8.1. 业务模型
系统 |
模块 |
功能操作 |
具体的业务描述 |
某APP |
登陆 |
用户登陆APP |
用户注册APP成功,输入手机号和密码,进行登录APP的操作 |
|
|
8.2. 性能指标
8.2.1.业务性能指标
参考文档:
某公司_某APP_性能需求调研和分析_Ver1.1.0_2014-11-22_黄涛.xlsx
测试场景及业务性能指标工作薄
表中的未来业务量,是在预估未来3年的业务量,每天增长30%来计算得出的业务量。
8.2.2.硬件性能指标
性能测试通过标准 |
||||
类别 |
判断维度 |
不通过 |
通过 |
备注 |
通用互联网服务端性能 |
超时概率 |
>0.05% |
<=0.05% |
|
错误概率 |
>0.05% |
<=0.05% |
||
TPS |
<期望峰值TPS |
>=期望峰值TPS |
||
CPU利用率 |
>75% |
<=75% |
||
响应时间 |
>期望响应时间 |
<=期望响应时间 |
网页响应时间依据1s-优秀,3s-普通,5s-忍受极限,来判断 |
|
Load |
平均每核CPU负载>1 |
平均每核CPU负载<=1 |
||
JVM内存使用率 |
>80% |
<=80% |
||
FullGC频率 |
平均<半小时1次 |
平均>=半小时1次 |
||
性能测试通过标准可以作为在测试具体系统时具体分析,本表的指标标准可以作为参考 |
机器类别 |
监控类别 |
指标名称 |
指标范围(通过) |
Centos7虚拟机 |
应用服务器(jvm和配置) |
JVM |
jvm内存占用率<=70% |
线程池连接数 |
线程池连接数<=80%,没有出现线程阻塞、死锁现象 |
||
数据库活动连接数 |
数据库活动连接数<=85% |
||
full gc频率 |
大于平均半小时1次GC |
||
是否有异常日志 |
日志信息中,无错误信息如:OOM、及其他代码提示的错误 |
||
是否有OOM |
没有年老代、持久代堆异常、栈异常及内存不够造成的异常 |
||
内存泄露 |
多次GC后,内存没有呈线性增长 |
||
数据库服务器(MySQL) |
系统负载 |
系统负载(Load Average)<=系统中CPU的核数*个数*0.7 |
|
CPU占用率 |
总CPU占用率<=70%,其中%us<=50%或%sy<=50%,%wa<=20%,无热点CPU现象 |
||
内存使用率 |
使用的内存利用率<=70%,si so中值为0 |
||
磁盘 |
%util<=80%,await约等于svctm,r/s+w/s=iops根据磁盘来计算后来判断,%iowait<=30% |
||
数据库连接数 |
关注:(Max_used_connections/max_connections)*100/%<=85% |
||
是否有慢查询SQL |
没有出现执行较长时间的SQL语句 |
||
死锁 |
没有出现SQL死锁 |
||
操作系统(Linux) |
系统负载 |
系统负载(Load Average)<=系统中CPU的核数*个数*0.7 |
|
CPU占用率 |
总CPU占用率<=70%,其中%us<=50%,%sy<=20%,%id<=30%,无热点CPU现象 |
||
内存使用率 |
使用的内存利用率<=70%,si so中值为0 |
||
磁盘 |
%util<=80%,await约等于svctm,r/s+w/s=iops根据磁盘来计算后来判断,%iowait<=20% |
||
带宽 |
网络使用率 |
<=系统带宽的30%,无丢包,无延迟,无阻塞 |
9. 测试策略
9.1. 测试执行策略
开始时间 |
结束时间 |
测试类别 |
测试目的 |
|
|
基准测试 |
1)验证系统性能指标是否符合预期指标要求 |
|
|
负载测试 |
1)验证系统在什么样的压力量下,系统处于处理极限处理的能力 |
|
|
压力测试 |
1)验证系统在超过系统极限处理能力下,系统是否还可提供服务 |
|
|
稳定性测试 |
1)验证系统在一定峰值的压力量下,系统处理服务能力的表现 |
9.2. 测试监控策略
监控类别 |
监控指标 |
监控工具或命令 |
APP前端 |
响应时间、吞吐量、TPS、点击率、超时概率、错误概率、页面性能 |
工具:ddms25、 |
应用服务器(jvm和配置) |
JVM、最大线程数、DB连接数、full gc频率、是否有异常日志、是否有OOM、内存泄露、代码异常、线程死锁 |
工具:jvisualvm(基于JDK1.7) |
数据库(MySQL) |
系统负载、CPU占用率、内存使用率、磁盘、数据库连接数、是否有慢查询SQL、SQL死锁 |
命令:show processlist |
操作系统(Linux) |
系统负载、CPU占用率、内存使用率、磁盘、网络带宽(无丢包、无延迟、无阻塞) |
命令:top uptime free vmstat |
10. 测试场景
参考文档:
某公司_某APP_性能需求调研和分析_Ver1.1.0_2014-11-22_黄涛.xlsx
测试场景及业务性能指标工作薄
11. 测试准备
11.1. 测试工具准备
测试大块 |
测试子块 |
工具或命令 |
用途和说明 |
APP后端 |
同PC后端 |
同PC后端 |
同PC后端 |
PC后端 |
压力测试工具 |
工具:JMeter3.1或LoadRunner11 |
性能压力和负载测试工具 |
应用服务器(jvm和配置) |
工具:jvisualvm(基于JDK1.7) |
监控和分析应用服务器(如:Tomcat7、Apache2.4、Nginx1.1、WebLogic10、Redis3.2)中JVM的资源占用情况,参数文件配置项中是否有不合理的配置 |
|
工具:MemoryAnalyzer1.6 |
内存堆栈分析工具 |
||
命令:jps、jinfo、jstat、jstack、jhat、jcmd |
监控JVM的使用 |
||
数据库(MySQL) |
命令:show processlist |
检查数据库中执行的SQL语句是否存在死锁的情况 |
|
命令:mysqldumpslow |
分析和收集数据库中慢查询SQL语句数据 |
||
命令:explain |
分析数据库中SQL语句的执行计划 |
||
操作系统(Linux) |
命令:top free vmstat |
分析和收集CPU使用率、内存使用率、磁盘IO |
|
命令:iostat sar netstat |
分析和收集网络IO、进程数、系统负载等 |
||
命令:tcpdump dstat |
堆转出存储和综合指标数据收集工具 |
11.2. 测试环境准备
准备类别 |
具体说明 |
参与人员 |
完成日期 |
硬件设备准备完毕 |
测试真机准备完毕 |
测试人员(黄涛) |
|
必要软件准备完毕 |
性能测试工具安装部署完毕,并可正常使用 |
测试人员(黄涛) |
|
监控和分析性能的工具和命令安装完毕,并可正常使用(如:监控和分析APP前端、后端服务器、应用服务器、数据库、linux系统的工具和命令) |
测试人员(黄涛) |
|
|
系统部署完毕 |
系统冒烟通过,并在测试环境中部署成功 |
测试人员(黄涛) |
|
|
|
||
|
|
||
|
|
||
环境验证完毕 |
系统网络环境正常稳定 |
|
|
性能测试环境部署完毕,并可正常使用(数据库、linux、应用服务器) |
测试人员(黄涛) |
|
11.3. 测试脚本和程序准备
准备类别 |
具体说明 |
参与人员 |
完成日期 |
压测的业务脚本 |
编写和调试好,压测各业务功能的脚本。 |
测试人员(黄涛) |
|
构建存量业务数据脚本 |
编写和调试好,批量构建数据库存量数据的脚本,包括的业务有(登陆系统的用户账号数据)。 |
测试人员(黄涛) |
|
11.4. 测试数据准备
系统 |
数据说明 |
数据量 |
参与人员 |
完成日期 |
某APP |
可以正常登陆APP的用户 |
100万 |
测试人员(黄涛) |
|
12. 交付清单
1)《性能测试计划》
2)《测试环境搭建文档》
3)《测试脚本(数据库脚本、压测脚本)》
4)《测试结果数据(数据库、Linux、中间件、JMeter)》
5)《系统调优报告》
6)《性能测试报告》
13. 项目风险
分类 |
风险措施 |
风险级别 |
规避方法 |
人员风险 |
人员经验不足,人力不够 |
高 |
储备人员及针对人员进行技能知识方面的培训 |
软件风险 |
系统发生较严重的缺陷,需要较长时间的修复,导致测试进度延迟 |
高 |
协助开发定位缺陷,并提出解决的方案,同时增加测试人力 |
进度风险 |
开发未按进度交付待测系统或冒烟测试未通过 |
高 |
延长测试时间或增加测试人力,低优先级的功能延迟测试 |
变更风险 |
测试过程中需求发生变化,导致工作量增加 |
高 |
及时变更测试计划,延长测试时间,或增加测试人力 |
系统风险 |
测试过程中,系统瘫痪,无法继续测试 |
高 |
启用备份系统,及时修复系统 |
数据风险 |
测试数据有误或不符合业务操作要求 |
中 |
测试前验证测试数据 |
环境风险 |
系统部署、网络等方面的影响 |
中 |
测试前检查部署的环境和网络的是否可用,增加测试资源 |
某公司-某产品APP_Ver1.1.0_性能测试方案_2014-07-10_黄涛