网站首页 > 技术文章 正文
至此关于系统资源监控、apache监控调优、Tomcat监控调优、JVM调优、Mysql调优、前端监控调优、接口性能监监控调优的知识已分享完,今天开始学习性能测试流程知识。后续文章都会系统分享干货,带大家从0到1学会性能测试,另外还有教程等同步资料,小编VX(flyhappy111)领取即可。
很多人认为性能测试只需要学好性能测试工具即可,但实际测试过程中性能测试工具LoadRunner只是将性能测试策略转化为可执行的脚本并产生压力,但在进行性能测试前还需要确定性能测试策略,这个过程很重要,即性能测试设计和性能测试构建,只有正确的性能设计能可以保证性能测试的正确性,否则测试出来的数据不一定正确,所以有必要对性能测试的整个过程有一个详细的理解,性能测试的过程主要包括四个阶段:性能测试设计、性能测试构建、性能测试执行和性能测试分析、诊断、调节。
01性能测试过程概述
性能测试过程分为四个阶段:【设计】、【构建】、【执行】和【分析/诊断/调节】,如图13-1所示
四个阶段的任务如下:
1)设计阶段定义待测试的业务流程、业务的平均处理量、业务处理量的最高峰值、组合业务流程、系统的整体用户和响应时间目标。
2)构建阶段涉及设置和配置测试系统及基础设施、使用自动化性能测试解决方案构建测试脚本和负载方案。
3)执行阶段包括运行负载方案和测量系统性能。
4)分析、诊断和调节阶段主要测量系统性能并使负载测试进入下一级别,重点查找问题原因以帮助开发工程师迅速解决问题,并实时调节系统参数以提高性能。
02性能测试设计
设计阶段是性能测试团队与业务领域的经理合作以收集性能要求的主要业务响应时间。可以将需要关注的问题分为四个方面:业务需求、技术需求、系统要求和团队要求,分析时主要从五个方面分析:需求调研、业务模型、场景模型、数据设计和环境设计,其中业务模型是该阶段工作中最重要的一项工作。
01需求调研
需求调研主要是确定本次性能测试活动需要测试的对象以及被被测试对象的一些属性,在需求调研过程中需要完成以下几部分工作:
-- 测试系统预研;
-- 与项目经理访谈;
-- 与业务专家访谈;
-- 与技术专家访谈;
-- 与数据库管理员访谈
-- 与客户代表访谈;
测试系统预研
根据被测试系统的资料,尽可能多的了解被测试系统相关知识,通常包括系统建议目的、系统的技术架构、系统的业务架构等。在该阶段主要完成的工作内容如下:
1)确定被测试系统的开发组织和组织负责人;
2)向项目经理申请被测试系统相关资料;
3)一些其它的例外情况沟通;
与项目经理访谈
与项目经理访谈主要是需要获取性能测试实施工作开展的相关信息、当前开发状态和期望的性能目标,包括性能测试实施起止时间和被测试系统所处的生命周期。
与业务专家访谈
与业务专家访谈主要是为获取性能测试业务模型设计的相关数据,如被测试系统的关键业务、主要用户场景、用户交易发生概率、期望响应时间等业务层面信息,除此之外还需要从业务团队中获得相关的业务工程师来支持后续脚本的开发,以避免脚本开发失败或出现错误。
那么什么样的业务才是关键业务呢?分析关键业务主要考虑三个方面:该业务使用频率、业务的优先级和业务占用资源情况。
业务使用频率:是指客户操作该业务的频率,操作频率越大说明失效的概率越大。
业务的优先级:业务的优先级是指业务的等级,优先级越高说明客户操作该业务的概率越大,一般的从业务的角度来说,核心业务和基本业务的优先级比较高,所以性能测试时需要关注这两类业务。
业务占用资源情况:操作一次该业务对系统资源消耗的情况,如果业务对系统资源消耗高的,那么可能让系统处于高负荷的运行状态,这样业务失效的风险就变大了。
所以综上,关键业务是那些使用频率高、优先级高和消耗资源高的业务,这也是性能测试过程中需要重点关注的业务。
与技术专家访谈
与技术专家访谈需要确定以下内容:
-- 获取关键业务的技术路径,完善被测试系统的关键业务和用户场景;
-- 从技术经理处获取合适的技术支持工程师;
-- 请技术经理确定关键业务是否覆盖到被测试系统的所有业务请求点;
-- 确定这些业务所使用到的关键数据库表;
-- 监控阶段,技术支持人员配合实施监控配置工作;
-- 一些特殊技术的支持,如加密、压缩等;
与数据库管理员访谈
与数据库管理员访谈主要需要获取数据准备和测试数据建模的建议,主要包括以下几个方面的内容:
-- DBA辅助进行数据库的备份与恢复工作;
-- 为数据建模提供建议;
-- 为建基础数据模型做准备;
与用户代表访谈
与用户代表访谈主要是需要获取用户在业务建模上的支持,保证业务流程的正确性。
02业务模型
业务模型主要是用于指导如何将具体的业务变成可重复运行的代码,主要从三个方面分析:业务流程列表、交易列表、百分比模型和交易量评估。
业务流程列表:创建关键业务流程列表,以反映最终用户在系统上执行的活动,见表13-1。业务流程表需要反映每个业务在高峰期时操作的用户数,这些问题主要是通常后台的历史数据来获取,获取这些历史数据的目的是做为新一轮测试的参考数据。
交易列表:交易业务流程需要确定关键业务(如“登录”或“转移资金”等)的负载情况、交易量等相关信息,见表13-2
通交易列表可以确定确定业务的优先级,这样在性能测试过程中可以确定哪些业务是需要优先测试的。如上例登录、更新订单、发货是优先级最高的业务。
如何获得这些指标是很重要的:
日常业务:可以通过后台数据来统计,可以分析三个月、半年或一年的数据,得到这些业务每小时或每秒钟操作的笔数。
高峰期业务:选择峰值情况下,单位时间内业务操作的笔数。
Web服务器和数据库服务器负载情况,这个测试很难得到,需要与开发工程师进行沟通,确定每个业务对Web服务器和数据库服务器负载的情况。
风险:是指当该业务失效或发生错误时,对客户的影响。
百分比模型:是指被测试的业务交易的笔数所占整个业务交易笔数的百分比,见表13-3
表13-3描述的是银行业务的百分比,但只是摘取了部分业务,在业务中可以看到一些业务名称一样但业务编号不一致,这是因为操作的方式不同,如查询,同样是查询有的是在柜台机上查询,有的是在ATM自动取款机上查询,所以都统称为查询,但业务的编号不同。
如果在场景设计过程中使用的是百分比模型那么在场景设计之前就必须先确定待测试业务的百分经模式,否则无法确定每个业务所占的百分比。每个业务操作的笔数主要是通过后台日志文件来获取,如果该系统是第一次测试那么可以参考其公司类似的系统,或者试上线运行一段时间,这样可以得到一个粗略的百分比模型。
交易量评估:通常历史数据来估算系统负载能力,通常使用的方法为80~20原理。
80~20原理是指每个工作日中80%的业务在20%的时间内完成。每年业务量集中在8个月,每个月集中在20个工作日中完成,每个工作日8小时,每天80%的业务在1.6小时完成。
实例:如去年全年处理业务约100万笔,其中15%的业务处理中每笔业务需对应用服务器提交7次请求;其中70%的业务处理中每笔业务需对应用服务器提交5次请求;其余15%的业务处理中每笔业务需对应用服务器提交3次请求。根据以往统计结果,每年的业务增量为15%,考虑到今后3年业务发展的需要,测试需按现有业务量的两倍进行。
每年总的请求数为:
(100x15%×7+100×70%x5+100×15%×3) ×2=1000万次/年
每天请求数为:1000/160=6.25万次/天
每秒请求数为:
(62500×80%)/(8x20%×3600)=8.68次/秒
即服务器处理请求的能力应达到约9次/秒,如果需要满足3年后的业务增长,那么服务器处理请求的能力应达到约18次/秒。
03场景模型
场景模型主要是用于指导在控制器中如何进行场景设计和场景监控。故关于场景模型包括两部分内容:场景设计和场景监控两部分。
场景设计需要确定的内容主要包括:使用的场景设计类型(手动场景或目标场景)、并发用户数、虚拟用户加载过程、脚本持续运行时间、虚拟用释放过程、使用的负载机、IP欺骗技术和RTS的设置。
关于使用的场景设计类型(手动场景或目标场景)、并发用户数、虚拟用户加载过程、脚本持续运行时间、虚拟用释放过程、使用的负载机、IP欺骗技术的设计见表13-4所示
在场景设计完成后,一定需要记住还需要设置RTS的策略,关于RTS策略设置主要包括:迭代数、迭代时间间隔、日志收集方式、脚本运行的方式(进程或线程),见表13-5
场景设计模型确定后还需要确定场景监控模型,场景监控包括:监控对象、服务器和相关计数器,见表13-6
04数据设计
数据设计主要是确定在整个性能测试过程中需要使用的数据,关于这部分的数据有两个方面的含义:
一是性能测试前需要准备的基础数据;
二是性能测试过程中参数化需要使用到的数据;
关于基础数据是指测试前数据库应该准备好的数据,准备数据的不同直接影响到性能测试的结果,例如,查询功能,数据库中已存在100条记录和已存在100万条记录,查询的响应时间肯定是不同的,所以在测试前一定要确定数据的所拥有的基础数据。基础数据设计见表13-7
参数化的过程中需要使用的数据来源也分有两种:
一是:自己构建的数据;
二是:历史数据;
构建数据是测试过程中通过一些方法生成批量数据,制作数据的方法通常包括:Ultraedit结合Excel制作数据、数据库、Shell编程和Java编程等。
历史数据则是真实存在的数据,是调用客户的真实数据,一般历史数据都存储在数据库中,所以在使用真实数据时,需要确定相关的查询语句,否则在脚本开发过程中就无法从数据库中获取历史数据。
数据设计见表13-8
不管是自己构建数据还是使用历史数据,获得的数据都应该遵守以下原则:
1) 全面性
全面性是指设计的数据应该包含所有类型的数据,需要覆盖客户操作过程中所有类型的数据,如测试移动BOSS系统中的计费功能,那么在测试过程中参数化的数据就不能仅仅使用某个网段的手机号(如135段的手机号),使用的数据应该包含所有网段的手机号(如135、136、138等)。
2) 无约束性
无约束性是指数据与数据之不能存在相互约束的现象,如测试银行系统的存取款业务,如果一张银行卡正在存款,这样就必定不能同进进行取款操作,如果设计的数据恰好同时进行存取款操作,那么取款就一定需要等待存款结束后才可以进行,这样取款的响应时间就包括了存款的时间,而这个响应时间显然不是真实的取款时间。
3) 正确性
正确性是指设计的数据应该保证业务能被正确的运行,因为性能测试的目的是测试业务的响应时间,而非测试功能(有一些朋友容易将性能误解为验证功能测试)测试,所以设计数据时,不能因为人为的原因导致业务操作失败,如果是由于数据导致业务失败,那么在结果分析过程中分析事务的成功率时就不准确,导致影响性能测试的结果。如测试移动BOSS系统计费功能,如设计一个已注销的手机号进行计费结算,这样必然导致业务失败,而这个业务失败是人为原因引起的,不是系统性能测试导致的。
4) 数据量充足
准备的数据是否充足也会影响到性能测试结果,在一些业务场景中,如果准备的数据不够多,即准备的数据比脚本迭代的次数少,那么当数据不够用时,将会重新循环或一直使用最后一个数据,这样很容易导致一些业务失败,如注册功能,假设共准备了100条数据,但迭代了150次,那么第100到第150次迭代即没有数据可用,必须重新循环一次或一直使用最后一条数据,而同一个数据不可能注册多次,这样导致第100到第150次注册业务失败。
5) 无敏感数据
软件的安全性是软件特性中一个很重要的维度,在设计数据进行性能测试时,需要注册避免一些敏感数据,即使使用敏感数据也应该是密文显示而非明文显示。
05环境设计
环境设计主要是确定性能测试执行过程中服务器和测试机所处的环境,关于环境设计包括三部分内容:系统运行的拓扑结构图、服务器和测试机环境、环境的备份与恢复。
系统运行拓扑结构图主要用于指导如何搭建测试环境,如图13-2所示的实例图
服务器和测试机环境包括两部分内容:
一是:服务器和测试机的硬件配置;
二是:服务器和测试机的软件配置;
服务器的硬件配置是一个基准环境,而负载机的硬件测试配置则受每个虚拟用户运行时所消耗的内存资源的影响,服务器和测试机环境配置见表13-9
环境备份和恢复是必须要注意的,在执行性能测试之前为了避免出现错误需要先将环境进行备份,当执行完成后需要恢复测试前的环境,之所以需要这样做主要有以下原因:
第一:测试前如果环境不确定那么可能导致一些数据运行失败,进而导致一些业务运行失败;
第二:如果不即时恢复环境,可以会影响到手工测试的数据;
具体如何备份与恢复可以与数据库管理员一起确定。
下期分享性能测试构建知识,敬请关注!
- 上一篇: Web测试浏览器调试实战简介
- 下一篇: 前端必备技能!教你如何高效渲染十万条数据,提升页面性能
猜你喜欢
- 2024-11-30 阿里内部资料外泄!P8大牛的前端面试题本(飞书文档版)
- 2024-11-30 0到1学会性能测试第91课-性能测试过程执行、分析、诊断、调节
- 2024-11-30 前端性能优化之请求优化
- 2024-11-30 涨薪技术|0到1学会性能测试第93课-生产系统性能测试
- 2024-11-30 前端性能优化系列——DNS预解析和优化
- 2024-11-30 涨薪技术|0到1学会性能测试第90课-性能测试构建
- 2024-11-30 Web前端培训:前端测试有哪些类型?
- 2024-11-30 11月份最新高频前端八股文面试题汇总!
- 2024-11-30 腾讯文档在线表格卡顿指标探索之路
- 2024-11-30 Web性能的计算方式与优化方案(一)
你 发表评论:
欢迎- 07-08记oracle日志挖掘实操&查询归档不正常增长情况(一)
- 07-08Oracle 伪列!这些隐藏用法你都知道吗?
- 07-08orcl数据库查询重复数据及删除重复数据方法
- 07-08重大故障!业务核心表被truncate删除,准备跑路……
- 07-08oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复
- 07-08Oracle-rac 修改scanip(oracle 修改sequence cache)
- 07-08ORACLE RAC CDB和PDB切换(oracle数据库rac切换)
- 07-08Oracle rac haip作用(oracle rac的典型特征)
- 596℃几个Oracle空值处理函数 oracle处理null值的函数
- 590℃Oracle分析函数之Lag和Lead()使用
- 578℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 573℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 569℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 562℃【数据统计分析】详解Oracle分组函数之CUBE
- 549℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 542℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- 记oracle日志挖掘实操&查询归档不正常增长情况(一)
- Oracle 伪列!这些隐藏用法你都知道吗?
- orcl数据库查询重复数据及删除重复数据方法
- 重大故障!业务核心表被truncate删除,准备跑路……
- oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复
- Oracle-rac 修改scanip(oracle 修改sequence cache)
- ORACLE RAC CDB和PDB切换(oracle数据库rac切换)
- Oracle rac haip作用(oracle rac的典型特征)
- 新手小白怎么学UI设计 推荐学习路线是什么
- 超实用!0基础UI设计自学指南(0基础学ui设计好就业吗)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- 前端获取当前时间 (50)
- 前端接口 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)