百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

「性能测试」如何设计企业交付级别的性能测试方案

mhr18 2024-11-12 11:15 13 浏览 0 评论

PS: 头条的不好调整word格式,有需要的自行copy+调整吧

用途:

即可用于质量团队自身的性能测试方案参考。

也可用于性能测试的验收,有些公司的性能测试是外包给了第三方。


性能测试简介:

性能测试包括的范围非常广泛, 简单来说可以分为后台性能测试(Linux服务器,mysql服务器,文件服务器等等), 客户端性能测试(WEB前端,移动端等)

一般企业的性能测试指的是狭义的后台性能测试,性能测试整个流程如下:

  • 1. 性能测试需求与调研
  • 2. 设计性能测试方案,并出具文档
  • 3. 审核方案,确定后准备性能测试数据, 测试环境
  • 4. 按照测试方案执行性能测试
  • 5. 出具性能测试报告

性能测试需要测试具备的能力(后续博客会持续更新):

  • 1. 常规性能测试工具的使用(Jmeter,Zabbix,jvisualvm,Monyog 等等)
  • 2. 对性能测试的各层进行测试的能力(一般指的是: OS层,应用层,DB层)
  • 3. 设计合理的测试方案的能力(熟悉性能基准指标验证, 逐步加压原则, 混合压测稳定性验证等方法)
  • 4. Linux等后台系统独立搭建后台测试环境的能力

下面是一个性能测试方案的实例:

目录

1 概述... 3

1.1 测试目的... 3

1.2 适用范围... 3

1.3 参考资料... 3

2 测试需求... 4

2.1测试架构... 4

2.2测试范围... 4

2.3相关人员... 5

2.4计划安排... 5

3 测试方案... 6

3.1 测试策略... 6

3.1.1 压测策略... 6

3.1.2 测试监控策略... 7

3.2 测试用例... 8

3.3测试准备... 8

3.3.1 测试环境... 8

3.3.2 相关工具... 9

3.3.3 测试脚本... 9

3.3.4 测试数据... 9

3.4达标出口... 10

3.4.1 软件达标出口... 10

3.4.2 阈值要求... 11

3.5过程准则... 12

4 附录... 13

4.1相关术语... 13

4.3其他... 13

1 概述

1.1 测试目的

本方案用以描述 XXX系统 的性能测试过程内容,用以指导测试人员准备并执行性能测试,发现系统中可能存在的性能问题,提出优化建议并解决,以降低或避免由于性能问题带来的系统风险,为系统的稳定运行提供保证。主要关注点如下:

  • 明确测试范围和目标。
  • 确认测试过程细则:测试环境、测试场景、测试策略、过程关注等。
  • 性能出口要求及风险预估。

1.2 适用范围

本文档适用于参与 XXXX系统 性能测试项目的相关人员。

1.3 参考资料


2 测试需求

2.1测试架构

  • 生产环境物理架构:未提供架构图,架构保证测试环境部署与生产一致(区别仅在机器的数量)


  • 压测环境架构:单机环境


2.2测试场景

本次测试包含6个场景,对应场景和TPS指标如下

场景

接口名称

接口描述

协议类型

生产指标

测试指标

备注

编号

TPS/RT

TPS/RT

S01

/XXX-info

获取会话

Http

112/0.3s

47/0.3s


S02

/XXX

获取XXX

Http

112/0.3s

47/0.3s


S03

/XXX

获取当前用户信息

Http

112/0.3s

47/0.3s


S04

/XXX/all?userId=123456

获取所有应用列表

Http

112/0.3s

47/0.3s


S05

/XXX/app/fixed

获取常用应用

Http

112/0.3s

47/0.3s


S06

home

访问首页

Http

112/0.5s

47/0.5s


Tips本次生产集群指标TPS=5万/3600秒x8倍系数=112tps

单机环境测试指标TPS=112/(3x0.8)=47tps;

2.3相关人员

角色

姓名

备注

架构



项目经理



开发



测试



2.4计划安排

序号

阶段

执行人

时间计划

1

性能调研和确认



2

性能方案产出


3

脚本和数据准备

4

执行性能压测


5

性能测试报告产出

3 测试方案

3.1 测试策略

3.1.1 压测策略

本次测试将采用Jmeter工具,通过控制线程数来模拟用户并发。

  • 压测策略说明

  1、指标验证: 验证被测交易在测试环境中是否能达到指标要求的TPS/RT,每个轮次持续10分钟。

  (单接口指标验证,如果单接口都无法达到指标,无需再进行负载和稳定性测试,不满足最基础的交付目标,需要重点优化。)

   注:如接口性能较差时,在压测指标前,先使用1个并发(不加thinktime)压测3分钟,得出一组基准数据,可作为参考依据。

  2、负载测试:在指标验证基础至上,对每个接口逐步增大并发,每个轮次持续10分钟。(阶梯性的加压测试,找出性能拐点,压测出当前系统下最大的处理能力,便于对后续容量和风险预估。)

  3、稳定性测试:对核心场景按照指标要求进行并发配比后压测,持续时长5-10小时。(混合场景稳定性测试,验证系统整体的资源使用情况、处理能力是否平稳。)

  • 测试执行策略如下

1、拿到基准数据后,先进行指标验证测试,查看是否可以达到目标TPS;

2、在达标基础之上,使用不同并发,进行多次阶梯性负载验证,找到性能拐点;

3、针对重点场景进行混合,进行稳定性验证。

3.1.2 测试监控策略

监控层面

监控工具

说明

OS层

Zabbix/top命令

关注硬件的实时使用情况

应用层

Zabbix/jvisualvm

关注java应用线程和堆内存情况

DB层

Monyog

关注mysql在压测过程中出现的慢查询和锁


3.2 测试用例

所属

用例

用例名称

并发

重点关注

策略

编号

配置


C01

session-info

47



C02

appkey

47


指标

C03

getUserCurrent

47

47并发,配置thinktime(控制QPS),压测结果满足47/0.3s。

验证

C04

list

47



C05

fix

47



C06

home

47

47并发,配置thinktime(控制QPS),压测结果满足47/0.5s。


C01

session-info




C02

appkey

逐步增加并发


负载

C03

getUserXXXX


基于指标验证用例,进行阶梯性并发压测(如50、100、150),每个阶梯压测10分钟,关注系统在各个并发下实际处理能力。

测试

C04

list all




C05

fixed




C06

home



稳定性

M01

C01-C06,6个场景,各47并发

282

根据指标要求将所有场景进行混合,持续压测10小时,关注整个压测过程中系统的稳定性和资源使用情况。


3.3测试准备


3.3.1 测试环境

测试环境布局如下:(同测试架构图),测试环境硬件信息如下:

类型

生产环境配置

测试环境配置

备注

应用1

x4

4C4G x1

Nginx,

应用2

x3

4C8G x1

IT门户

应用3

x4

4C8G x1

应用服务

应用4

x4

4C8G x1

租户服务

中间件

x1

4C8G x1

Redis

DB

x1

24C32G x1

Mysql

网络环境

公网

内网环境

所有测试应用在同一网段

Tips:应用配置相同,机器数量不同情况下,测试环境单机指标折算公式为

T测单=T生集/(N生产 x 0.8折算系数)

3.3.2 相关工具

性能测试工具:Jmeter

资源监控工具:APP--ZIBBIX、资源监控器(windows自带的)、Jmeter工具

3.3.3 测试脚本

此次测试的接口均为Http协议的(get方式),故采用Jmeter http请求sampler设计测试脚本。

  • 检查点配置:在脚本中设置合理的检查点,保证接口返回的正确性(事务成功率的统计)。
  • QPS控制(加thinktime):使用JMeter插件Throughput Shaping Timer控制QPS(LR的话配置pacing time),便于进行并发压测。

3.3.4 测试数据

类型

库名

表名

测试

预估生产

是否

说明

数据量

数据量

需要铺底

Mysql

XXX-service-XXXX-auth

XXX_user

1

20万

压测前铺底数据20万

XXX_app

18

18万

配置表无需铺底

XXX_user

1

15万

压测前铺底数据15万

XXX_user

1

15万

压测前铺底数据15万

XXX-service-user

user_info

1

15万

压测前铺底数据15万


3.4达标出口

3.4.1 软件达标出口

1、 指标验证:压测持续10分钟,达到目标TPS指标且成功率达到100%(成功率可根据实际业务场景调整),实际响应时间<=指标要求RT;

2、 负载验证:每个阶梯压测持续10分钟,成功率>=99.9%。

  n 指标阈值:指标响应时间要求内的最大处理能力,也是最优处理能力;

  n 资源阈值:资源占用(cpu/IO/mem)在80%左右时的处理能力;

  n 性能拐点值:随着并发增加TPS无法增加甚至出现下降时的点。

  (负载压测目的就是至少可以得到以上3个值中的某1个。)

3、 稳定性测试:运行5-10hours+,事务成功率要高于99.9%,硬件资源占用在阈值要求内。

3.4.2 阈值要求

监控类型

监控指标

阈值要求

资源监控

Load average

<CPU核数*2

CPU利用率

物理机<80%,虚机/容器<75%

系统内存使用

占用<80%

磁盘Util%

占用<80%

网络带宽

占用<70%

Java

Younggc

Younggc频率不超过1s

进程监控

Younggc时间不超过200ms


Fullgc

FullGC的频率不大于1小时,FullGC时间不超过2s。


线程状态

大量的线程blocked


currentThreadsBusy监控

数据库

慢查询

出现慢查询语句

死锁

出现死锁

中间件

Redis

Redis操作耗时<1ms

Memcache

缓存命中率>80%

日志监控

错误日志

出现严重级别的Error或Exception

业务指标

响应时间

测试结果RT<=指标要求

TPS

测试结果TPS>=指标要求

成功率

测试结果成功率>=99.99%

3.5过程准则

过程

条件

准入准则

压测环境和机器准备完成(压测机、待测应用服务和数据库、网络环境等)

待测流程的功能测试通过,版本稳定。

待测流程的测试数据和测试脚本准备完毕。

暂停准则

测试中发现问题,需要项目组修改代码或更换版本;

测试中发现服务规划及部署问题,需要重新调整部署方案;

需要调整测试环境资源配置,如加减CPU数目,增加存储等等。

测试环境使用受到干扰,如服务器被临时征用或非压测流量进入性能环境

准出准则

所有测试场景完成执行,对应各场景的测试过程数据和监控数据均已保存和记录。

性能指标达到《性能测试方案》的要求,无遗留性能问题(或评估后可暂时遗留)

测试报告完成。


4 附录

4.1相关术语

术语简写

说明

TPS/QPS

每秒事务数或每秒请求数,指服务器在单位时间内能处理的请求的数量。

如100tps,表示系统1秒处理了100个请求。

响应时间

指一个用户的从发起请求到收到响应所用的时间。

并发数

指某一时刻同时发起的请求数量(一般以秒为时间粒度)。

RT

响应时间英文简写,我们所说的RT都是指平均响应时间

PV

page view,即页面浏览量。用户对网站中的某个网页访问1次均被记录1PV。用户对同一页面的多次访问,访问量累计。一般对web测试时关注。

4.2其他

相关推荐

Spring Boot3 连接 Redis 竟有这么多实用方式

各位互联网大厂的后端开发精英们,在日常开发中,想必大家都面临过系统性能优化的挑战。当系统数据量逐渐增大、并发请求不断增多时,如何提升系统的响应速度和稳定性,成为了我们必须攻克的难题。而Redis,这...

隧道 ssh -L 命令总结 和 windows端口转发配置

摘要:隧道ssh-L命令总结和windows端口转发配置关键词:隧道、ssh-L、端口转发、网络映射整体说明最近在项目中,因为内网的安全密级比较高,只能有一台机器连接内网数据库,推送...

火爆BOOS直聘的13个大厂Java社招面经(5年经验)助你狂拿offer

火爆BOOS直聘的13个大厂Java社招面经(5年经验)助你狂拿offer综上所述,面试遇到的所有问题,整理成了一份文档,希望大家能够喜欢!!Java面试题分享(Java中高级核心知识全面解析)一、J...

「第五期」游服务器一二三面 秋招 米哈游

一面下午2点,35分钟golang内存模型golang并发模型golanggc原理过程channel用途,原理redis数据结构,底层实现跳跃表查询插入复杂度进程,线程,协程kill原理除了kil...

RMQ——支持合并和优先级的消息队列

业务背景在一个项目中需要实现一个功能,商品价格发生变化时将商品价格打印在商品主图上面,那么需要在价格发生变动的时候触发合成一张带价格的图片,每一次触发合图时计算价格都是获取当前最新的价格。上游价格变化...

Redis 中的 zset 为什么要用跳跃表,而不是B+ Tree 呢?

Redis中的有序集合使用的是一种叫做跳跃表(SkipList)的数据结构来实现,而不是使用B+Tree。本文将介绍为什么Redis中使用跳跃表来实现有序集合,而不是B+Tree,并且探讨跳跃表...

一文让你彻底搞懂 WebSocket 的原理

作者:木木匠转发链接:https://juejin.im/post/5c693a4f51882561fb1db0ff一、概述上一篇文章《图文深入http三次握手核心问题【思维导图】》我们分析了简单的一...

Redis与Java整合的最佳实践

Redis与Java整合的最佳实践在这个数字化时代,数据处理速度决定了企业的竞争力。Redis作为一款高性能的内存数据库,以其卓越的速度和丰富的数据结构,成为Java开发者的重要伙伴。本文将带你深入了...

Docker与Redis:轻松部署和管理你的Redis实例

在高速发展的云计算时代,应用程序的部署和管理变得越来越复杂。面对各种操作系统、依赖库和环境差异,开发者常常陷入“在我机器上能跑”的泥潭。然而,容器化技术的兴起,尤其是Docker的普及,彻底改变了这一...

Java开发中的缓存策略:让程序飞得更快

Java开发中的缓存策略:让程序飞得更快缓存是什么?首先,让我们来聊聊什么是缓存。简单来说,缓存是一种存储机制,它将数据保存在更快速的存储介质中,以便后续使用时能够更快地访问。比如,当你打开一个网页时...

国庆临近,字节后端开发3+4面,终于拿到秋招第一个offer

字节跳动,先面了data部门,3面技术面之后hr说需要实习转正,拒绝,之后另一个部门捞起,四面技术面,已oc分享面经,希望对大家有所帮助,秋招顺利在文末分享了我为金九银十准备的备战资源库,包含了源码笔...

“快”就一个字!Redis凭什么能让你的APP快到飞起?

咱们今天就来聊一个字——“快”!在这个信息爆炸、耐心越来越稀缺的时代,谁不希望自己手机里的APP点一下“嗖”就打开,刷一下“唰”就更新?谁要是敢让咱用户盯着个小圈圈干等,那简直就是在“劝退”!而说到让...

双十一秒杀,为何总能抢到?Redis功不可没!

一年一度的双十一“剁手节”,那场面,简直比春运抢票还刺激!零点的钟声一敲响,亿万个手指头在屏幕上疯狂戳戳戳,眼睛瞪得像铜铃,就为了抢到那个心心念念的半价商品、限量版宝贝。你有没有发现一个奇怪的现象?明...

后端开发必看!为什么说Redis是天然的幂等性?

你在做后端开发的时候,有没有遇到过这样的困扰:高并发场景下,同一个操作重复执行多次,导致数据混乱、业务逻辑出错?别担心,很多同行都踩过这个坑。某电商平台就曾因订单创建接口在高并发时不具备幂等性,用户多...

开发一个app需要哪些技术和工具

APP开发需要一系列技术和工具的支持,以下是对这些技术的清晰归纳和分点表示:一、前端开发技术HTML用于构建页面结构。CSS用于样式设计和布局。JavaScript用于页面交互和逻辑处理。React...

取消回复欢迎 发表评论: