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

2023-10-29

一、需求分析

1.测试目的

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

1)新项目上线

2)老项目优化

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

2.测试对象

要测啥?

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

有没有必要测?

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

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

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

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

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

4)使用人数多还是少

5)在线人数多还是少

3.拆分对象

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

举例:购买商品

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

4.指标分析

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

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

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

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

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

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

4)采样时间段内请求数

常用分析思路:

1)2/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

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

注意:

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

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

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

举例:

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

数据生命周期:

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

数据增长率:

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

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

预估3年后,数据增长率为3,需要测试数据量为(1+3)x 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文件位于如下:

Windows:C:\Windows\System32\drivers\etc\hosts

Unix/Linux:/etc/hosts

小常识:

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

2、hosts存放了域名和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)需要记录测试前各个性能指标数据,方便后续测试对比

十一、结果分析

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

技能提升

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走
在这里插入图片描述
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…….
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

性能测试—性能测试方案设计思路总结 的相关文章

  • 软件测试|Pydantic详细介绍与基础入门

    简介 Pydantic 是一个强大的 Python 库 用于数据验证和解析 特别是用于处理 JSON 数据 它的主要目标是使数据验证和解析变得简单 直观和可维护 本文将介绍 Pydantic 的基础知识 包括如何定义模型 验证数据以及处理错
  • 软件测试|深入了解Python中的super()函数用法

    简介 Python中的super 函数是一种强大的工具 用于在子类中调用父类的方法 它在面向对象编程中非常有用 可以让你轻松地扩展和重用现有的类 本文将详细介绍super 函数的用法 并提供一些示例来帮助你更好地理解它的功能 什么是supe
  • 软件测试|使用matplotlib绘制多种折线图

    简介 在数据可视化领域 Matplotlib是一款非常强大的Python库 它可以用于绘制各种类型的图表 包括折线图 本文将介绍如何使用Matplotlib创建多种不同类型的折线图 并提供示例代码 创建模版 在绘图之前 我们可以先创建我们的
  • 软件测试|Selenium StaleElementReferenceException 异常分析与解决

    简介 Selenium 是一个流行的自动化测试工具 用于模拟用户与网页交互 然而 当我们在使用 Selenium 时 可能会遇到一个常见的异常 即 StaleElementReferenceException 这个异常通常在我们尝试与网页上
  • 软件测试|sqlalchemy relationship

    简介 SQLAlchemy是一个流行的Python ORM 对象关系映射 库 它允许我们以面向对象的方式管理数据库 在SQLAlchemy中 relationship 是一个重要的功能 用于建立表之间的关系 在本文中 我们将详细探讨 rel
  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • 软件测试|pycharm关联GitHub的详细步骤

    简介 GitHub 是全球最大的开源代码托管平台之一 而 PyCharm 是一款强大的 Python 集成开发环境 将两者结合使用 可以提高团队协作和代码管理的效率 本文将详细介绍如何在 PyCharm 中管理 GitHub 账号 包括如何
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 软件测试|如何使用selenium处理iframe富文本输入框

    简介 在网页开发中 富文本框是常见的元素 用于输入富文本内容 如富文本编辑器或邮件编辑器 如果我们要使用Python和Selenium进行自动化测试或操作这种富文本框 可能会遇到一些挑战 本文将详细介绍如何使用Python和Selenium
  • 跨平台UI自动化框架:Airtest,游戏开发和应用测试的利器

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 测开和测试平台是否有存在的必要?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • Jmeter 性能-阶梯负载最终请求数

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 甜蜜而简洁 —— 深入了解Pytest插件pytest-sugar

    在日常的软件开发中 测试是确保代码质量的关键步骤之一 然而 对于测试报告的生成和测试结果的可读性 一直以来都是开发者关注的焦点 Pytest插件 pytest sugar 以其清晰而美观的输出 为我们提供了一种愉悦的测试体验 本文将深入介绍
  • Python常用的自动化小脚本!

    一 list转json string转json 可以使用Python内置的 json 模块将列表 List 和字符串 String 转换成JSON格式 List转JSON假设我们有一个列表 List my list apple banana
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • 软件测试/测试开发/全日制/测试管理丨Android WebView 技术原理

    Android WebView是一个内置的组件 允许在Android应用中嵌套显示Web内容 Android WebView的技术原理涉及到使用WebKit引擎来渲染Web内容 并提供一系列API和回调函数 使得开发人员可以控制和定制Web
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • 软件测试面试:还没有自动化测试项目经验,3个项目帮你走入软测职场!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 深入解析 YAML 配置文件:从语法到最佳实践

    一 认识YAML YAML YAML Ain t Markup Language 是一种人类可读的数据序列化语言 它的设计目标是使数据在不同编程语言之间交换和共享变得简单 YAML采用了一种简洁 直观的语法 以易于阅读和编写的方式表示数据结
  • 用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

    自动化关键数据记录 简介 关键数据记录是 Web 自动化测试中的关键部分 它们提供了关于系统行为和执行过程的详细信息 有助于验证用例的正确性 排查问题和确保应用程序的质量 行为日志 行为日志是一种用于记录系统或应用程序的操作和事件的技术 它

随机推荐

  • 【Python】群体智能算法优化支持向量机

    Python 群体智能算法优化支持向量机 本文主要介绍了基于流行智能算法Grey Wolf Optimizer GWO 来优化支持向量机模型的代码 from sklearn svm import SVR import pandas as p
  • 解决 TypeError: 'NoneType' object has no attribute '__getitem__'

    其实这个问题的出现一般是某个变量是空 也就是 NoneType 类型导致的 大致按照这个方向排错即可解决 最近在处理一个图片问题的时候 大致写的代码是把某个路径下面的图片找到 读到内存里面 在依据x1 y1 x2 y2四个坐标值把图片的RO
  • 一个优秀的C#开源绘图软件 DrawTools

    1 Extensions to DrawTools Author Mark Miller I develop software for a leading healthcare system in Northern Illinois Dow
  • jfrog artifactory 的使用

    jfrog artifactory 使用 Artifactory 仓库类型 Artifactory 仓库主要有四种类型 远程仓库 本地仓库 虚拟仓库及分发仓库 分别应用在如下不同的场景 远程仓库 Artifactory 仓库支持代理公网或内
  • WebPlusPro平台之(7)轮播图的导入和制作

    轮播图 WebPlusPro之轮播图 1 定义 2 使用方法 2 1 方法一 2 2 方法二 2 2 1 解决方法一 治标又治本 2 2 2 解决方法二 方便又快捷 2 2 3 解决方法三 前沿又美观 3 结语 WebPlusPro之轮播图
  • thymeleaf基本使用

    简介 thymeleaf是用来代替jsp的模板引擎 可以用th 表达式从后台获取数据 基本语法 th text 用来渲染一个文本 div request设置的msg值 div div session设置的msg div div applic
  • git深入理解(六):git checkout详解

    Switch branches or restore working tree files git checkout h usage git checkout
  • SpringMVC从入门到精通

    一 SpringMVC基础入门 创建一个HelloWorld程序 1 首先 导入SpringMVC需要的jar包 2 添加Web xml配置文件中关于SpringMVC的配置 1 2 3 4 5 6 7 8 9
  • Redis里的key过期了,为什么内存没有释放

    1 Redis过期策略定期删除和惰性删除 定期删除 Redis会每隔一段时间执行一次定期删除 但并不保证所有过期的key会被立即清理掉 惰性删除 当一个key被访问时 Redis会监测key是否过期 过期则删除并释放相应内存空间 2 解答
  • 什么是乐观锁,什么是悲观锁?

    在互联网公司面试中 很多小伙伴都被问到关于锁的理解 今天 我给小伙伴们来聊一聊我对锁的理解 不管我们互斥锁 自旋锁 重入锁 读写锁 行锁 表锁等等等等这些概念 我把他们都归纳为两种类型 乐观锁和悲观锁 彻底讲明白Java中眼花缭乱的各种并发
  • Bun v0.8.0 正式发布,Zig 编写的 JavaScript 运行时

    Bun 是采用 Zig 语言编写的高性能 全家桶 JavaScript 运行时 官方称其为 all in one JavaScript runtime 所谓 all in one 是因为 Bun 提供了打包 转译 安装和运行 JavaScr
  • 【推荐系统->统计学】辛普森悖论(Simpson‘s paradox)

    辛普森悖论 辛普森悖论 Simpson s paradox 也有其他名称 是概率和统计中的一种现象 即一种趋势出现在几组数据中 但当这些组组合在一起时 趋势就会消失或逆转 这个结果在社会科学和医学科学统计中经常遇到 并且当频率数据被过度地给
  • Zookeeper应用场景和底层设计

    一 什么是zookeeper Zookeeper是一个开源的分布式协调服务框架 它是服务于其它集群式框架的框架 简言之 有一个服务A 以集群的方式提供服务 只需要A专注于它提供的服务就可以 至于它如何以多台服务器协同完成任务的事情 交给Zo
  • eventEmitter.addListener与eventEmitter.on有什么区别

    eventEmitter addListener与eventEmitter on有什么区别 在 Node js 中 eventEmitter addListener 和 eventEmitter on 是等效的方法 它们都用于为事件注册监听
  • 面试官问“为什么应聘这个岗位”,应该如何回答?

    面试的时候 我们经常会被问到一个问题 为什么要来应聘这个职位 这是很多同学 不管是在校招还是社招里面都会碰到的一个场景 出现这种问题 一般来说有两种情况 一种是大学专业 或之前的实习经验 工作经验 跟这个职位的相关度不大 第二种情况是 跨越
  • mysql 可以承受多少人_mysql每秒最多能插入多少条数据 ? 死磕性能压测

    前段时间搞优化 最后瓶颈发现都在数据库单点上 问DBA 给我的写入答案是在1W 机械硬盘 左右 联想起前几天infoQ上一篇文章说他们最好的硬件写入速度在2W后也无法提高 SSD硬盘 但这东西感觉从来没证实过 故一时兴起 弄台虚拟机压测起来
  • HDLBits 系列(6)——Sequential Logic(Latches and Flip-Flops)

    目录 3 2 Sequential Logic 3 2 1 Latches and Flip Flops 1 D flip flop 2 D flip flops 3 DFF with reset 4 DFF with reset valu
  • AOP常用的几种增强方式,各自的特点(代码辅助)?

    1 前置增强 又称前置通知 前置增强使用 Befor注解标识 增强方法优先于目标方法执行 前置增强方法 Before execution int mul int int 执行方法之前执行下面的方法 public void before Jo
  • vue使用vant的list组件使用

    模板代码
  • 性能测试—性能测试方案设计思路总结

    一 需求分析 1 测试目的 为什么测 目的在于测试系统相关性能能否满足业务需求 通常分以下两种情况 1 新项目上线 2 老项目优化 如果是老项目优化 可考虑是否存有历史测试方案 如果有可以参考 或许可以省事很多 2 测试对象 要测啥 测试对