性能测试 性能测试方案设计思路总结

本文涉及的产品
性能测试 PTS,5000VUM额度
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
.cn 域名,1个 12个月
简介: 性能测试 性能测试方案设计思路总结

性能测试方案设计思路总结


一、需求分析

1.  测试目的

为什么测?目的在于测试系统相关性能能否满足业务需求。通常分以下两种情况:

1)新项目上线

2)老项目优化

如果是老项目优化,可考虑是否存有历史测试方案,如果有可以参考,或许可以省事很多。

 

2.  测试对象

要测啥?

测试对象可以归结为“业务功能”。测试前,需要了解我们需要测试的业务功能(不深入细节)有哪些,比如“购买商品”、“寄送快递”。

 

有没有必要测?

需求来源哪里?,有没有数据支撑测试这个需求的必要性?

 

通常,可以从以下几个方面考虑:

1)是否核心功能,是否要求严格的质量

2)是否常用、高频使用的功能

3)可能占用系统较多资源的功能

4)使用人数多还是少

5)在线人数多还是少

 

3.  拆分对象

先从业务上来分,实现这个完整的功能包含哪些流程、环节

举例:购买商品

登录->搜索商品->提交订单->支付订单->退出

 

 

4.  指标分析

分析性能需求指标(如“支持300人并发登录”)是否合理

有必要测试这个需求,考虑需求指标是否合理?有没有数据支撑?

 

通常,支撑数据可以从以下方面考虑:

1)采样时间段内系统使用人数

2)采样时间段内系统在线人数

3)采样时间段内系统(页面)访问量

4)采样时间段内请求数

....

 

常用分析思路:

12/8法则

2/8法则:80%的业务量在20%的时间里完成。这里,业务量泛指访问量,请求数,数据量等

 

2)正态分布

 

3)按比例倍增

 

4)响应时间2-5-8原则

就是说,一般情况下,当用户能够在2秒以内得到响应时,会感觉系统的响应很快;当用户在2-5秒之间得到响应时,会赶紧系统的响应速度还可以;当用户在5-8秒以内得到响应时,会赶紧系统的速度很慢,但是还可以接受;而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟糕透了,或者认为系统已经失去响应。

注意:这个要根据实际情况,有些情况下时间长点也是可以接受的,好比12306

 

举例:

某公司后台监控,根据一段时间的采样数据,分析得出日高峰时段(11:00-14:00)用户下单请求数平均为1000,峰值为1500,根据这个计算并发请求数

 

时段:3个小时-> 3 x 60 x 60 = 1080s

业务量:1500

吞吐量:1500 * 80% / (1080 * 20%) = 5.56请求数/s

 

假设用户下单遵循正态分布,那么并发请求数峰值会肯定大于上述估算的吞吐量

 

注意:

12/8原则计算的结果并非在线并发用户数,是系统要达到的处理能力(吞吐量)

2、如果要求更高系统性能,根据实际情况,也可以考虑1/9原则或其它更严格的算法

3、以上估值只是大致的估算,不是精确值

 

举例:

想了下,暂时没想到啥好的例子,大致就说一些涉及到数据量的性能测试,比如报表统计,或者是大数据挖掘,查询等,怎么去估算数据量?

 

数据生命周期:

一般来说,数据都是有一定的生命周期的,时间的选取需要结合数据周期考虑。这里假设3年后系统性能仍然需要满足业务需求。

 

数据增长率:

如果是老项目,可以考虑对应功能主表历史数据存放情况

这里假设按年统计,比如第一年10000,第二年15000,第三年20000,第四年25000,那么我们得出,以第一年为基准,数据增长率分别为0.511.5,每年在上一年的基础上,以5000的速度增长

预估3年后,数据增长率为3,需要测试数据量为1+3x 10000 = 40000

 

注意:

1、实际数据一般是没上面举例那么规律的,只能大致估算数据增长率。

2、一些大数据量的性能测试除了和数据量相关,还涉及到数据分布等,比如查询,构造数据时需要结合实际,尽量贴近实际。

3、不同业务模块,涉及表不一样,数据量要求也是不一样的,需要有区别的对待。

 

如果是新项目,那就比较不确定了,除非能收集相关数据。

 

二、系统分析

结合需求分析中第3点,分析系统架构。从功能实现上来看,怎么实现这个完整功能的。通常这些业务功能操作都对应着一个或多个请求(可能能是不同类型的请求,比如http, mysql),我们要做的是找出这些:

1)请求顺序、请求之间相互调用关系

2)数据流向,数据是怎么走的,经过哪些组件、服务器等

3)预测可能存在性能瓶颈的环节(组件、服务器等)

4)明确应用类型IO型,还是CPU消耗性、内存消耗型->弄清楚重点监控对象

5)关注应用是否采用多进程、多线程架构->多线程容易造成线程死锁、数据库死锁,数据不一致等

6)是否使用集群/是否使用负载均衡

了解测试环境部署和生产环境部署差异,是否按1:1的比例部署

 

通常建议测试时先不考虑集群,采用单机测试,测试通过后再考虑使用集群,这样有个比较,比较能说明问题

 

参考阅读“浅谈web网站架构演变过程”:http://blog.csdn.net/qiaqia609/article/details/50809383

 

三、业务分析

1)明确要测试的功能业务中,功能业务占比,重要程度。

目的在于

<1>明确重点测试对象,安排测试优先级

<2>建模,混合场景中,虚拟用户资源分配,针对不同业务功能施加不同的负载。

 

2)明确下“需求分析-指标分析”中相关业务功能所需基础数据及数据量问题,因为那块需求分析时可能只是大致估算下,评估指标是否合理,需要认真再分析下

 

四、用例设计

1)用例设计

通常是基于场景的测试用例设计

<1>单业务功能场景

运行测试期间,所有虚拟用户只执行同一种业务功能某个环节、操作

 

<2>混合业务功能场景

运行测试期间,部分虚拟用户执行某种业务的某个环节操作,部分虚拟用户执行该业务功能的其它环节

或者

运行测试期间,部分虚拟用户执行某种业务功能,部分虚拟用户执行其它业务功能

 

注:这里用例没说到多少用户去跑,跑多久等,这里只是把他当作相同场景用例下的的一组组测试数据了。

 

2)事务定义

根据用例合理的定义事务,方便分析耗时(特别是混合业务功能场景测试),进而方便分析瓶颈。

比如,购买商品,我们可以把下订单定义为一个事务,把支付也定义为一个事务。

 

3)场景监控对象

针对每条用例,结合“系统分析”第4)点,明确可能的压力点(比如数据库、WEB服务器),需要监控的对象,比如tps,耗时,CPU,内存,I/O

 

五、测试策略

1)先进行混合业务功能场景的测试,在考虑进行测试单业务功能场景的测试

 

2)负载测试->压力测试->稳定性测试->强度测试

 

注:如果测试稳定性,时间建议至少8小时;

 

3)逐步加压

比如开始前5分钟,20个用户,然后每隔5分钟,增加20个用户。

好处:不仅比较真实的模拟现实环境,而且在性能指标比较模糊,且不知道服务器处理能力的情况下,可以帮我们确定一个大致基准,因为通常情况下,随着用户数的不断增加,服务器压力也会随着增加,如果服务器不够强大,那么就会出现不能及时处理请求、处理请求失败的情况下,对应的运行结果图形中,运行曲线也会出现对应的形态,比如从原本程一条稳定直线的情况,到突然极限下降、开始上下波动等,通过分析我们就能得出服务器大致处理能力,供后续测试参考。

 

4)单点并发

比如使用集合点,单独针对某个环节的并发测试,通常是针对某个环节的性能调优时使用。

 

常识:

a)负载测试

保证系统能正常运行(通常是满足某些系统性能指标)的前提下,让被测对象承担不同的工作量,以评估被测对象的最大处理能力及存在缺陷而进行的测试

 

b)压力测试

不保证系统能否正常运行的前提下,让被测对象承担不同工作量,以评估被测对象能提供的最大处理能力及存在缺陷而进行的测试

 

c)稳定性测试

测试系统的长期稳定运行的能力。同疲劳强度测试的区别是,稳定性测试的压力强度较小,一般趋向于客户现场日常状态下的压力强度,当然在通过时间不能保证稳定性的状态下,需要加大压力强度来测试,此时的压力强度则会高于正常值。

 

d)强度测试

通常模拟系统在较差、异常资源配置下运行,如人为降低系统工作环境所需要的资源,如网络带宽,系统内存,数据锁等等,以评估被测对象在资源不足的情况下的工作状态

注:疲劳强度测试是一类特殊的强度测试,主要测试系统长时间运行后的性能表现,例如7x24小时的压力测试。

 

六、工具选取

1)协议分析

一般性能测试工具都是基于协议开发的,所以先要明确应用使用的协议

 

2)工具选取

1)类型

开源工具、收费工具、自研工具

 

2)分析工具

<1>理解工具实现原理

<2>采用用异步还是同步

常识:

1.同步请求:发出一个调用请求,在没有得到结果之前,该调用就不返回。

2.异步请求:发出一个调用请求,在没有得到请求结果之前,该调用可立即返回。该调用请求的处理者在处理完成后通过状态、通知和回调等来通知调用者。

 

<3>使用长连接还是短连接

 

七、软件配置

1)操作系统

内核版本、32 or 64?

 

2)应用版本

应用版本要和线上保持一致,特别是中间件、组件等的版本,因为不同版本,其性能可能不一样

 

3)参数配置

<1>负载均衡、反向代理参数配置

 

<2> Web服务器参数配置

 

<3>数据库服务器参数配置

 

 

八、网络分析

1)网络路由

通常为了排除网络型瓶颈,通常建议在局域网下进行测试。

通常,这里我的分析思路是这样的:

<1>检查hosts文件的配置

从终端压测机(负载生成机)开始,到请求目的服务器器,机器的hosts文件配置

 

通常,hosts文件位于如下:

WindowsC:\Windows\System32\drivers\etc\hosts

Unix/Linux/etc/hosts

 

小常识:

1、通常域名访问站点,首先要通过DNS域名服务器把网络域名(形如www.xxx.com)解析成XXX.XXX.XXX.XXXIP地址,然后继续后续访问。

2hosts存放了域名和ip地址的映射关系,如下

 


使用hosts可以加快域名解析,在进行DNS请求以前,系统会先检查自己的hosts文件中是否有这个地址映射关系,如果有则把域名解析为映射的IP地址,不请求网络上的DNS服务器,如果没有再向已知的DNS服务器提出域名解析。也就是说hosts的请求级别比DNS高,可加快域名解析。

 

<2>检查DNS配置

不同DNS,其速度和准确率是不一样的,比如114.114.114.114速度远比8.8.8.8快,如果有用到DNS(特别是压测机),需要考虑下是否适当

 

<3>确保路由正确设置

 

2)网络带宽

如果没条件在局域网下测试,可能需要估算所需大致带宽。

如果测试时是基于UI层操作的操作,那么得估算页面平均大小,这个可以通过浏览器自带工具查看打开单个页面服务器返回的请求数据大小。如果是测试时是基于接口层的请求测试,可以通过工具查看服务器响应数据大小。

 

然后根据采集的页面PV峰值、请求数峰值进行计算。

假设在PV峰值、请求数峰值= 1000,峰值时段:8:00 - 12:00,平均页面、请求大小200k

带宽= 1000 x 80% / (20% x 4 x 3600s) x 200KB x /1024 x 8bit ,单位MBps

 

注意:这里涉及到浏览器缓存等因素,估值可能不准,大致估算。

 

九、硬件配置

1)CPU

型号,频率,核数

 

2)内存

 

3)磁盘

不同磁盘类型,读写速率不一样

 

4)网卡

不同网卡,其传输速率也不一样

 

注意:硬件配置最好和生产环境的配置保持一致

 

 

十、性能监控

注意:

1)这里监控不仅仅是服务器自身性能指标监控,如cpu,还包括事务耗时监控等

2)需要记录测试前各个性能指标数据,方便后续测试对比

 

十一、   实施测试

 

十二、   结果分析

如果是性能调优,还需同上一个版本的性能测试结果对比

 

pdf版下载:性能测试方案设计思路总结.pdf

 

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
5天前
|
数据采集 缓存 测试技术
性能测试中,除了迭代次数,还有哪些因素会影响测试结果?
性能测试中,除了迭代次数,还有哪些因素会影响测试结果?
12 2
|
5天前
|
测试技术 数据库连接 数据库
测试脚本的编写和维护对性能测试结果有何影响?
测试脚本的编写和维护对性能测试结果有着至关重要的影响,
12 1
|
9天前
|
缓存 监控 测试技术
全网最全压测指南!教你如何测试和优化系统极限性能
大家好,我是小米。本文将介绍如何在实际项目中进行性能压测和优化,包括单台服务器和集群压测、使用JMeter、监控CPU和内存使用率、优化Tomcat和数据库配置等方面的内容,帮助你在高并发场景下提升系统性能。希望这些实战经验能助你一臂之力!
24 3
|
20天前
|
缓存 监控 数据挖掘
C# 一分钟浅谈:性能测试与压力测试
【10月更文挑战第20天】本文介绍了性能测试和压力测试的基础概念、目的、方法及常见问题与解决策略。性能测试关注系统在正常条件下的响应时间和资源利用率,而压力测试则在超出正常条件的情况下测试系统的极限和潜在瓶颈。文章通过具体的C#代码示例,详细探讨了忽视预热阶段、不合理测试数据和缺乏详细监控等常见问题及其解决方案,并提供了如何避免这些问题的建议。
44 7
|
16天前
|
Web App开发 定位技术 iOS开发
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
Playwright 是一个强大的工具,用于在各种浏览器上测试应用,并模拟真实设备如手机和平板。通过配置 `playwright.devices`,可以轻松模拟不同设备的用户代理、屏幕尺寸、视口等特性。此外,Playwright 还支持模拟地理位置、区域设置、时区、权限(如通知)和配色方案,使测试更加全面和真实。例如,可以在配置文件中设置全局的区域设置和时区,然后在特定测试中进行覆盖。同时,还可以动态更改地理位置和媒体类型,以适应不同的测试需求。
17 1
|
1月前
|
机器学习/深度学习 存储 测试技术
从0到1:如何规划一套流量回放自动化测试方案
本文介绍了流量回放自动化测试的完整方法,从企业战略到交付的四个关键环节:Discovery(深度挖掘)、Define(定义目标)、Design(详细设计)和Delivery(交付与反馈)。通过这些步骤,帮助企业优化系统性能和稳定性,确保产品的高质量。
54 4
|
1月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
33 3
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
2月前
|
监控 中间件 测试技术
『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!
该文章指出软件测试工程师不仅需要掌握黑盒和白盒测试,还应该了解性能测试的重要性及其实现方法,包括负载测试、压力测试等多种性能测试类型及其在保证软件质量中的作用。
『软件测试5』测开岗只要求会黑白盒测试?NO!还要学会性能测试!