性能测试
2025-03-26 23:05:42 0 举报
AI智能生成
性能测试
作者其他创作
大纲/内容
性能测试的方法论
-SEI 负载测试计划过程
SEI 负载测试计划过程(SEI Load Testing Planning Process)是个关注于负载测试计划的方法,其目标是产生“清楚、易理解、可验证的负载测试计划”。SEI 负载测试计划过程包括6 个关注的区域(Area):目标、用户、用例、生产环境、测试环境和测试场景。
SEI 负载测试计划过程将以上述6 个区域作为负载测试计划需要重点关注和考虑的内容,其重点关注以下几个方面的内容:
1.生产环境和测试环境的不同:由于负载测试环境和实际的生产环境存在一定的差异,因此,在测试环境上对应用系统进行的负载测试结果很可能不能准确反映该应用系统在生产环境上的实际性能表现,为了规避这个风险,必须仔细设计测试环境。
2.用户分析:用户是对被测应用系统性能表现最关注和受影响最大的对象,因此,必须通过对用户行为进行分析,依据用户行为模型建立用例和场景。
3.用例:用例是用户使用某种顺序和操作方式对业务过程进行实现的过程,对负载测试来说,用例的作用主要在于分析和分解出关键的业务,判断每个业务发生的频度、业务出现性能问题的风险等。
从SEI 负载测试计划过程的描述中能够看到,SEI 负载测试计划过程给出了负载测试需要关注的重点区域,但严格来说,其并不能被称为具体的方法论,因为其仅仅给出了对测试计划过程的一些关注内容,而没有能够形成实际的可操作的过程。同功能测试相同,性能测试也必须经历测试需求、测试设计、测试执行、测试分析等阶段,但由于性能测试自身的特别性(例如,需要引入工具,分析阶段相对重要),性能测试过程又不能完全套用功能测试过程。
SEI 负载测试计划过程在负载测试需要关注的具体内容上提供了参考,但其并不是个完整的测试过程。
-RBI 方法
RBI(Rapid Bottleneck Identify)方法是一种用于快速识别系统。
性能瓶颈的方法。该方法基于以下一些事实:
1. 发现的80%系统的性能瓶颈都由吞吐量制约;
2. 并发用户数和吞吐量瓶颈之间存在一定的关联;
3. 采用吞吐量测试能够更快速定位问题。
RBI 方法首先访问服务器上的“小页面”和“简单应用”,从应用服务器、网络等基础的层次上了解系统吞吐量表现;其次选择不同的场景,设定不同的并发用户数,使其吞吐量保持基本一致的增长趋势,通过不断增加并发用户数和吞吐量,观察系统的性能表现。
在确定具体的性能瓶颈时,RBI 将性能瓶颈的定位按照一种“自上而下”的分析方式进行分析,首先确定是由并发还是由吞吐量引发的性能表现限制,然后从网络、数据库、应用服务器和代码本身4 个环节确定系统性能具体的瓶颈。
RBI 方法在性能瓶颈的定位过程中能发挥良好的作用,其对性能分析和瓶颈定位的方法值得借鉴,但其也不是完整的性能测试过程。
性能测试的门槛
软件生命周期与性能测试
不论哪种软件生命周期模型,需求分析、设计、编码、测试和运行维护这几个阶段都是其中的基本要素,只是在不同的软件生命周期模型中可能迭代、合并、拆分或重组这几个阶段,在此不做过多的描述。与其他几个阶段相对应,测试从软件开发过程按阶段可以划分为:单元测试、集成测试、系统测试,在其他的书上可能还能见到诸如确认测试、验收测试等名词,但是前3种测试确实是最基本的测试活动,而其他的测试活动只是在某些软件开发过程中会发生。
值得注意的是,通常在谈论单元测试、集成测试和系统测试时,其实仅仅谈论的是不同阶段的功能测试;而当讨论性能测试时,绝大多数的情况是,一个已经开发完毕或基本开发完毕的软件,测试人员用一种或几种性能测试工具,以尽量模拟真实用户行为的方式对该软件进行并发操作,收集并比较不同场景的结果,然后对软件的性能进行分析,这个活动通常发生在系统测试阶段,甚至更往后的阶段,如运行维护阶段。
把测试划分为单元测试、集成测试和系统测试,而不仅仅是在最后关头做一个系统测试,其主要原因有两点:
1.同样的缺陷在不同阶段被发现,其修复成本差异极大,而越早发现缺陷,修复成本越小;
2.某些缺陷几乎只能在某个阶段被发现,即在其他阶段需要投入巨大的人力才能发现这些缺陷或根本不可能发现这些缺陷。
在不同阶段进行性能测试的好处
1.在单元性能测试中运行一遍后就能发现的内存泄漏问题,如果这个问题遗留到系统测试阶段,可能需要花费几天的时间才能找到问题的所在,尤其是当Dump 内存信息后发现大量对象是到处都在使用的基本对象时,欲哭无泪可能是性能优化人员此时的真实写照,这点笔者曾有幸体验过;而实际上运行一遍单元测试的时间可能也就几分钟,此时发现问题极易解决。
2.异构系统之间的接口,通常是先完成接口,而调用接口的系统可能过很久才会完成。当然,可以等完成调用接口的系统后直接对该系统进行测试,接口的性能自然被测试到了,但是万一很不幸——性能测试结果不佳,再花费一番力气后终于确定是接口性能不佳,那可能就得大费周折地重新写接口了。更倒霉的是别的系统已经在用新的接口了,而不巧的是新老接口又不兼容(比如差一个参数什么的),那代价可就大了;如果进行过接口性能测试,问题早就发现并解决了,这时候真是想想都会笑了。
3.越早开始性能调优,调优工作就会越容易。当组件小规模的集成后即可运行并调优时,由于系统复杂度低,自然而然地性能调优的难度会比较低。很显然,性能调优是以性能测试为基础的,那么较早阶段的性能测试就很有必要了。
4.在运行维护阶段,系统已经在稳定地为用户提供服务了,这时候还需要进行性能测试吗?需要。因为生产系统可能会表现出疑似性能问题的症状,这时候性能测试是查找问题的有效手段,有助于为用户提供更好的服务;性能再好的系统也会有极限,当用户数不断增长的时候,通过性能测试来评估系统的容量,以确定系统应如何进行扩容或者需要更换新的架构,通常这称之为容量评估。
性能测试包括以下几种
单元性能测试
集成性能测试
系统性能测试
多系统性能测试
容量评估
接口性能测试。
性能测试的目标
在进行性能测试之前,测试目标的明确是非常重要的。在一般软件的测试流程中,测试人员需要首先收集软件需求,阅读并理解业务需求,并且将业务需求转换为测试目标。对于性能测试来说,非常重要的一个需求文档就是 NFR(Non-Functional Requirements)。NFR 描述了除功能性需求以外的其他需求,包括性能需求,系统安全性、可用性以及可扩展性的需求。在 NFR 中,对于性能需求定义了关键的性能指标 KPI(Key Performance Indicator, 关键性能指标),能够帮助性能测试人员更好地去理解性能需求。在软件开发周期中不同的阶段,性能测试的目标也不完全相同。尤其对于基于 SOA 的应用程序,在开发早期并没有性能基准时,测试的目标与已有基准时有着很大的不同,因此测试目标根据是否已有性能基准而不同:
有基准:性能测试的目标更多地是通过测试以获得合理的基准测试结果,用来作为与以后应用改变后性能测试结果比较的基准。
无基准:此时的性能测试目标是通过测试保证应用能够在一定测试环境下满足已定义的性能能力。
在 NFR 文档中定义了一些关键性能指标,这些性能指标能够帮助测试人员检测应用程序是否能够满足性能需求。下面将介绍几个比较重要且常见的在 NFR 中定义的关键性能指标:
响应时间(Response time)
响应时间定义为从发送事务请求到收到该事务请求回应的时间间隔。响应时间的需求定义并不是一个固定的数值,这是因为对于一个 SOA 应用程序,事务的复杂程度以及使用频率是完全不同的,如果要求所有事务的响应时间都达到同一指标,这是非常不合理的。因此需要对不同复杂程度和不同使用频率的事务定义相应的响应时间需求。下面为响应时间需求的实例:
性能测试时间
第一章 测试准备
建立性能目标
选取关键用例(重要程度/频率)
Mission-Critical
Heavy throughput
Dynamic content
并发用户数 (系统级/应用级/事务级)
系统体系架构( b/s,c/s,三层)以及核心framework
系统的并发性/安全性
采用的开发语言
通信协议(rmi,web,socket,oracle…)
通信端口分工以及是否动态端口
加密/解密/签名算法
SOCKET协议消息数据结构
错误特征码
网络包的keepalive or http session timeout
当前所处的应用阶段(未测试/已功能测试…)
事务吞吐率需求
响应时间需求 (从用户习惯推算或估算)
系统资源占用需求
高可用性需求(如故障转移/OS集群/数据库集群/中间件集群)
可扩展性需求(如能否支撑未来几年的吞吐)
任务性质(关键路径/历时)
了解应用软件状况
系统体系架构( b/s,c/s,三层)以及核心framework
系统的并发性/安全性
采用的开发语言
通信协议(rmi,web,socket,oracle…)
通信端口分工以及是否动态端口
加密/解密/签名算法
SOCKET协议消息数据结构
错误特征码
网络包的keepalive or http session timeout
当前所处的应用阶段(未测试/已功能测试…)
了解应用部署平台
物理部署 (异地?数据中心?)
硬件架构(机型/CPU/MEM/IO/网络)
操作系统(版本/补丁/关键内核参数)
Sysctl
/proc/*
数据库 (类型/版本/专用or 共享/启动参数/存储布局)
中间件 (产品模式/线程数/内存参数)
软件部署模式
建立系统负载模型
业务层面
关键用例吞吐率以及行为习惯
用户体验
系统负载
高峰/平常场景吞吐率
CPU/IO/MEM/NETWORK,瓶颈资源?
建立容量模型 :TeamQuest(可选)
数据来源:服务器端监控/数据库日志/专家估算
自顶向下估算
制定项目计划
组织架构及各自职责
测试资源(人力/工具)
搭建测试环境(SCM或者开发组建,QA验证)
进度计划
沟通管理(例会,工作规范)
风险规避(技术攻关先行)
制定测试方案
测试需求
测试方法与策略
测试环境
测试场景与用例
异常处理流程
第二章 开发调试脚本
选取协议
依赖Client/Server 消息通信机制
优先采用上层协议(如rmi > socket)
交互过程采用底层协议优先采用API
变长网络包,加密解密优先采用API
为了测试,变更程序适应测试回放 (如DOS攻击/随机验证码/控件回送应答码,或者工作流去处人工参与环节)
为了测试,部分变更流程(增加/删除事务成对出现)
增强脚本
参数化用户输入
关联数据
增加验证点 (如特征字)
增加函数提高可重用性
为提高性能封装函数成DLL
调试脚本
#include “LR_INSTALL_PATH\include\*.h”
LIB: lrun50.lib
DLL:lrun50.dll
工程options path:LR_INSTALL_PATH
工具: dependency walker
函数格式
#define LRDLLEXPORT _declspec(dllexport) __stdcall
int LRDLLEXPORT foo(int count)
{
}
Func.def文件: EXPORTS foo
试运行脚本
VuGen 单次回放
VuGen 多次回放
Controller 单脚本多用户(并发性)
Controller多脚本多用户(验证是否脚本依赖)
打开extend log。关注http/1.1响应码,socket mismatch,oracle ora-*等关键字
调试脚本_验证工具
Winpcap/Ethereal
Tcpdump/Windump
利用SQL查询插入/更新/修改效果
或者sql_trace,p6spy截获sql
第三章 测试执行
监控操作系统/网络/数据库多个层面
监控应用运行状况/日志
确认施压机资源充分,确保尽力施压
抽查关键功能确认可用
建议运行12小时以上,确认无内存泄露/任务累积
监控工具
Loadrunner/Sitescope/TeamQuest
UNIX: top,sar,vmstat,iostat,netstat,以及HP-UX glance ,AIX topas
Oracle: OEM/statspack/ quest toad/ quest central for Oracle
Mysql:mysql administrtor
WebLogic: http://IP:7002/console/
JBoss:http://IP:8080/web-console/
JVM: JRockit Memory Leak Detector
第四章 测试结果评估
收集LR测试数据
收集应用日志
收集系统日志 (如/var/log/*,oracle: *.trc)
分析LR性能结果与OS/DB/中间件/APP参数之间的匹配度(little定律)
评估测试用例覆盖度对测试结论的影响面
编写测试报告 (技术与格式审核)
第五章 测试后跟踪
项目总结 (技术以及过程改进)
如何提高脚本重用率
调优与硬件扩容的平衡
实际运营与系统负载建模的差异度
第六章 最佳实践
测试方编制需求框架,需求方或运营方明确需求细节
关键点结对审核
技术攻关先行
重视数据异常,数据分析结合SA/DBA专家意见
结合知识栈,提取系统调优的合理建议
小结
Loadrunner对高层协议支持良好,但对底层协议与加密/随机算法/异步通信支持较差
性能测试难点不在Loadrunner工具本身,难在技术攻关以及对系统的全局把握
建立软件各个层面的知识库/工具箱
Loadrunner学习资源
MI KB: http://support.mercury.com/cgi-bin/portal/CSO/index.jsp
Loadrunner.info:http://www.wilsonmar.com/1loadrun.htm
51testing:http://www.51testing.com/
性能测试的准备
针对企业级Java环境的性能测试方法论
描述了如何按照性能的需求从架构设计开始,进行单元测试,集成测试,和生产分段(productioin staging)测试等。描述了实现正规容量评估(capacity assessment)所需的过程,该量化过程可以明确指出你何时需要向你的计算环境增加额外资源。此外,该方法论还阐述了验证你的测试场景是否很好地模拟了你的最终用户的操作行为所需的必要步骤。
通过提供的一套全面的解决方案, 本文描述Quests Application Management Suite for Java and Portals是如何与该方法论相集成,从而在应用开发生命周期的每个阶段保证您的成功。运用这套方法论和Quest的应用管理解决方案,您将充满信心地把符合性能规范的应用展现给您的用户。
1 量化性能需求
为了量化性能要求,我们假设您已经定义了SLA。在深入分析问题之后,关键的负责人员应该系统地定义SLA。SLA 的主要推动者应该是应用业务负责人和应用技术负责人。 应用业务负责人,有时是应用产品经理,他负责分析商业案例并把客户的需求转化为SLA。其实, 只要满足SLA, 客户的需求也会满足。应用技术负责人,有时是应用构架师,分析必要的技术需求,解释用例并'真实地检验'SLA。因此,技术业务负责人的责任就是确保服务等级是可达到的。有效的SLA具有三个关键特性:
1.具体的。
2.灵活的。
3.现实的。
一个有效的SLA 必须是一个具体的值。一个用例必须在大约五秒内完成是不准确的,因此很难检验--5.25秒钟是否是大约的五秒。一个具体的值便于QA在应用上线前进行测试,当应用上线后,SLA将提供对主动监测和被动监测两种警报(Alert)的规范。同时,一个有效的SLA在分布式的变化环境中必须也是灵活的。考虑到一些未预料到的情况,我们需要对灵活性进行测量,因此用例必须采用预先定义的时间百分比的方式满足具体的SLA值。例如,您每天使用的常用搜索引擎。当您执行一次查寻,在95%的时间里可以在2秒内完成;在每20次查询中,有一次的响应时间是7秒;通常这种变化的范围是可以接受的。但是如果每20次查询中,有10次超过7秒,你可能就会考虑换个搜索引擎了。SLA不仅必须是具体的, 也要灵活,同时必须也是现实的。你可以通过要求应用业务负责人和应用技术负责人共同制定SLA的方式保证SLA是现实的。这是一个有效用例的特别关键的特性,这是因为在大多数情况下,SLA只由应用业务负责人单方面确定,没有考虑应用技术负责人的意见。当技术小组接到这些性能需求时,他们往往会忽略,一个不现实的SLA比根本没有还要糟糕。
2 了解你的用户
为了保证调优努力的成功你能做的最重要的事就是安排时间了解你的用户和理解他们在使用你的应用时的行为情况。很少会在生产环境中调优应用服务器,而更多的情况是,通过写测试脚本再现为虚拟用户,在上线前的环境中执行负载并进行调优。当在上线前环境中完成调优后, 就可以安全地把配置信息应用到生产环境中。多数公司无法在上线前的环境中充分地再现生产负载。如果您在这些公司中工作,没必要失望。多数大型的公司并没有对他们的用户行为有很好的理解并且在测试环境中不能产生有代表性的负载。
有两个共同的似是而非的理由:
1. 生产负载太大,在上线前无法模拟。
针对第一点,我们可以在上线前环境中建立一个按比例缩减的生产版本,当在生产环境中部署时,再按比例放大。虽然没有做一个生产环境的镜像有效,但是有时并值得那么做。
2. 我没有任何办法知道我的最终用户到底是如何操作的。
针对第二点,下面将说明如何采集最终用户的操作行为。
由于我们需要在投入生产之前设法在上线前的环境中调优我们的应用系统,这样才能验证配置,所以一个随之而来的问题就是我们需要在这个环境中执行的负载测试脚本。对一个企业应用进行调优的步骤包括实施一些最佳实践设置,负载测试应用,观察应用的行为,以及适当调整配置参数等。这是一个叠代过程,我们需要不断调整以达到最优的配置。一些调整可能会提高性能,而一些会降低性能。这也是为什么性能调优不应该放在开发周期后期的一个原因。
3 使用工具分析
编写一个典型用户负载脚本的困难之处是发现你的用户是怎么使用的应用的。 这不是一门精确的学问。但是为得到一个合理的可靠的结果,第一步是看看您的访问日志。现在,我不会推荐手工做这件事,因为对于一个中型的Web应用,工作量也是巨大的。现在有大量商业或免费工具可为您分析访问日志。
这些工具将告诉你有关你的服务请求的一些情况:
a) 将服务请求按时间的百分比排序,并显示百分比。
b) 放大或缩小分析时间间隔,便于以粗粒度或细粒度方式显示结果。
c) 识别每天,周,月,年的高峰使用时间。
d) 跟踪字节传输和请求的平均时间。
e) 按照你的应用的内部,外部或地理位置,识别和分类请求的用户。
f) 汇总成功请求的百分比。
g) 汇总HTTP发生的错误。
h) 汇总顾客忠诚度, 譬如回头客和平均会话长度。
i) 跟踪从其他站点的转入情况。
无论你选择哪种软件分析访问日志,重要的是你应该做这些分析工作并且把这些信息作为编写测试脚本的基础。有时访问日志的作用是有限的,在某些情况下不能提供足够的信息。例如前端应用只使用一个URL发出请求,而通过在请求中嵌入不同的参数区分业务功能。在这种情况下,就需要高级一些的工具根据不同的请求参数监测应用的使用情况和划分业务功能。
访问日志只能提供部分解决办法。接下来需要对应用本身有更深入的理解。例如,当发出一个特定的服务请求时,你应该知道其不同的选项所控制的相应行为。这些信息的最好来源是应用的用例和负责该功能的架构设计人员。这些工作的目标是识别出真实世界中用户的使用行为,所以应该彻底和全面地完成此阶段任务。这里发生的错误将导致上文提到的'苹果和香蕉'搜索引擎的问题。
为了全面获得更可靠和更详尽的最终用户行为信息,可以考虑Quest公司的User ExperienceMonitor(UEM)。UEM在最终用户和WebServer之间,实时捕获向你应用环境发出的每个请求,可提供有关真实用户所做的详尽数据,包括连接速度,浏览器版本,按地理位置汇总等信息。由于采用了被动的网络Sniff技术,所以对应用的性能影响为零。
4 用户如何退出系统
最后,有一个值得重视的问题,我们了解到目前客户在编写负载测试脚本时最大的错误是:用户不知道怎样退出应用系统。不管你把退出按扭作的多大,至多只有20%用户会使用。这是由于现在将Web作为主要业务平台的必然结果。商业Web站点正式基于此而得以快速发展并统治了Internet.
因此,现在用户习惯以下面方式退出网站:
1. 离开当前网站,转到其他网站
2. 关上浏览器窗口。
性能测试
自学
第一章
职业
职位技术要求
测试工具
jmter
loadrunner
测试基础
性能测试理论
自动化测试理论
测试开发
服务器性能诊断
cpu
磁盘
内存
网络
优化技能
代码
架构
中间件
操作系统
数据库
SQL
配置
设计
协议
http/https
websock-socker
webservice
其他rpc实现
自动化
接口自动化
web自动化
移动app自动化
持续集成
jenkins
maven/ant
git/svn
基础
测试工具
常见难点
(1)用户和业务模型分析搭建;
(2)合适的脚本开发(大部分初学者不根据用户和业务模型来开发脚本,认为要回归成功即可):
(3)合适的需求分析转化为场景设计(大部分初学者不知道如何根据需求进行场景设计);
(4)大容量系统的数据生成和使用;
(5)大型系统的性能压力负载和实施;
(6)云计算的负载生成和实施。
常见难题
评估需求
负载建模(用户与业务模型)
性能压力生成的原理和并发等之间的关系
性能测试用例
新系统需求分析
容量规划
性能测试策略
服务器性能诊断知识
常见难点
(1)进程、线程任务之间的区别?
(2)线程的中断优先和原理?
(3)进程的生命周期?
(4)上下文切换?
(5)i/0密集型和 CPU 密集型工作负载之间有什么区别?
(6)生产环境和测试环境之间换算?
(7)关系型数据库体系结构和逻辑优化与非关系型数据库体系结构和逻辑优化?
(8)事务数据库和分析数据库的使用?
(9)数据关系建模与设计?
(10)TOP N SQL 诊断和优化(执行路径、索引和表链接优化等)?
(11)阻击和根治阻塞和死锁?
(12)热点防范和定位优化?
(13)业务数据批量缓存化异步化?
(14)数据库配置优化?
性能调优技能
常见难点
(1)系统硬件资源(CPU、网络、内存、)相之间的关系及原理
(2)选择可靠性能指标及指标之间的关联和判定方法
(3)永不宕机的实现原理和常见错误
(4)排队系统与延迟及缓存的优化关系
(5)优化的成本和性价比
(6)业务优化的操作实施
(7)多系串联原理及测试隔离
第二章
性能测试初体验
2.1.性能测试的价值
2.2测试流程
子主题 1
性能测试流程
需求分析-》性能指标制定-》脚本开发-》场景设置-》监控部署-》测试执行-》性能分析-》性能调优-》测试报告
流程
子主题 1
(1)业务学习:通过查看文档,手工操作系统来了解系统功能。
(2)需求分析:分析系统非功能需求,圈定性能测试的范围,了解系统性能指标。
(3)工作评估:工作量分解,评估工作量,计划资源投入(即需要多少人力,多少工作日来完成性能测试工作)。
(4)设计模型:圈定性能测试范围后,把业务模型映射成测试模型。什么是测试模型呢?比如一个支付系统需要与银行的系统要进行交互(充值或者转出),由于银行不能够提供支持,我们会开发程序去代替银行系统功能(这就是挡板程序,Mock程序),保证此功能的性能测试能够开展;这个过程就是设计测试模型。再比如,后面要讲到的实例项目 Jforum论坛,根据需求我们了解到一般大家发帖或回帖前都会先登录,那么我们在开发脚本时就要把登录与发帖或回帖场景绑定在一起进行测试这就是测试模型。通俗点说就是性能测试用例设计加性能测试实现方案,用例只关注业务,模型还需关注如何实现,是否具有可操作性,可验证性等问题最后我们还得根据不同的测试目的组合成不同的测试场景。
(5)计划编写:计划测试工作,在文档中明确列出测试范围、人力投入、持续时间、工作内容、风险评估、风险应对策略等。
(6)脚本开发:录制或者编写性能测试脚本(现在很多被测系统都是无法录制脚本的,我们需要手工开发脚本),开发测试挡板程序,开发测试程序等。有时候如果没有第三方工具可用,甚至需要开发测试程序或者工具。
(7)测试环境准备:性能测试环境准备包括服务器与负载机两部分,服务器是被测系统的运行平台(包括硬件与软件,比如应用服务器需要8Core32G 内存中间件是Jboss7等),负载机是我们用来产生负载的机器,用来安装负载工具,运行测试脚本。
(8) 测试数据准备: 根据数据模型来准备被测系统的主数据与业务数据(主数据是保证业务能够运行畅通的基础,比如菜单、用户等数据;业务数据是运行业务产生的数据,比如订单;订单出库需要库存数据,库存数据也是业务数据。我们知道数据量变会引起性能的变化,在测试的时候往往要准备一些存量/历史业务数据,这些数据需要考虑数量与分布)。
(9)测试执行:测试执行是性能测试成败关键,同样脚本不同执行人员得出的结果可能差异较大。这些差异主要体现在场景设计与测试执行上。
(10)缺陷管理:对性能测试过程中发现的缺陷进行管理。
(11)性能分析:对性能测试过程中暴露出来的问题进行分析,找出原因
(12)性能调优:性能测试工程师与开发人员一起来解决性能问题。
(13)测试报告:测试工作的重要交付件,对测试结果进行报告,主要包括常见的性能指标说明 (TPS、RT、CPUUsing······),发现的问题等。
性能测试主要的交付件
测试计划
测试脚本
测试程序
测试报告或者阶段性测试报告
2.3性能测试成功与失败要素
性能测试有几大难题
1,需求分析
2,场景设计
3,性能诊断调优
4,环境搭建和模拟
性能测试重要关注点
1,评估系统,需求分析
2,场景设计,用例设计
3,测试执行,是否通过
判断是否通过
响应时间RT
吞吐量
实物成功率
硬件指标
cpu
内存
存储
网络
稳定性
内存有无泄漏
其他
数据库
中间件
缓存
jvm
2.4不同角色看性能
子主题 1
1.黑盒测试的角度
2.开发角度
架构合理性
数据库设计合理性
代码
系统里内存的使用方法
系统里线程使用的方法
系统资源是否有恶性,不合理竞争
3,系统管理员角度
硬件资源利用率
jvm
db
换那些硬件提高系统性能
系统能否支持7*24
扩展性,兼容性,最大容量,可能的瓶颈
4,性能测试的角度
(1)服务器硬件性能
(2)根据需求和历史数据制定性能目标
(3)建立性能通过模型
(4)对开发代码框架和硬件框架进行性能分析
(5)针对开发发布版本的基准测试
(6)执行软件性能验收及稳定性测试
(7)生产环境的配置和优化
(8)制定性能测试的测试用例
(9)制定性能测试的场景设计
(10)协调各部门配合
(11)特定的性能分析
2.5性能测试工具的得选择
loadrunner
jmeter
grinder
2.6测试相关术语
(1)负载:模拟业务操作对服务器造成压力的过程,比如模拟 100 个用户进行发帖
(2)性能测试(Performance Testing):模拟用户负载来测试系统在负载情况下,系统的
响应时间、吞吐量等指标是否满足性能要求。
(3)负载测试(Load Testing):在一定软硬件环境下,通过不断加大负载(不同虚拟用户数)来确定在满足性能指标情况下能够承受的最大用户数。简单说,可以帮我们对系统进行定容定量,找出系统性能的拐点,给予生产环境规划建议。这里的性能指标包括 TPS(每秒事务数)RT(事务平均响应时间)CPUUsing (CPU利用率) 、MemUsing(内存使用情况)等软硬件指标。从操作层面上来说,负载测试也是一种性能测试手段,比如下面的配
置测试就需要变换不同的负载来进行测试
(4)配置测试(Configuration Testing):为了合理地调配资源,提高系统运行效率,通过测试手段来获取、验证、调整配置信息的过程。通过这个过程我们可以收集到不同配置反映出来的不同性能,从而为设备选择、设备配置提供参考。
(5)压力度测试(Stress Testing): 在一定软硬件环境下,通过高负载的手段来使服务器资源(强调服务器资源,硬件资源)处于极限状态,测试系统在极限状态下长时间运行是否稳定,确定是否稳定的指示包括TPS、RT、CPUUsing、Mem Using等。
(6)稳定性测试(Endurance Testing):在一定软硬件环境下,长时间运行一定负载,确定系统在满足性能指标的前提下是否运行稳定。与上面的压力度测试区别在于负载并不强调是在极限状态下(很多测试人员会持保守观念,在测试时会验证极限状态下的稳定性),着重的是满足性能要求的情况下,系统的稳定性、比如响应时间是否稳定、TPS 是否稳定。一般我们会在满足性能要求的负载情况下加大 1.5到2倍的负载量进行测试
(7)TPS:每秒完成的事务数,通常指每秒成功的事务数,性能测试中重要的综合性性能指标。一个事务是一个业务度量单位,有时一个事务会包括多个子操作,但为了方便统计我们会把这多个子操作计为一个事务。比如一笔电子支付操作,在后台系统中可能会经历会员系统、账务系统、支付系统、会计系统、银行网关等,但对于用户来说只想知道整笔支付花费了多长时间。
(8)RT/ART(Response Time/average Response Time):响应时间/平均响应时间,指一个事务花费多长时间完成(多长时间响应客户请求),为了使这个响应时间更具代表性,会统计更多的响应时间然后取平均值,即得到了事务平均响应时间(ART),为了方便大家通常会直接用 RT 来代替 ART,ART 与 RT 是代表同一个意思。
(9)PV (Page View): 每秒用户访问页面的次数,此参数用来分析平均每秒有多少用户访问页面。
(10) Vuser 虚拟用户(Virtualuser):模拟真实业务逻辑步的虚拟用户,虚拟用户模抄的操作步骤都被记录在虚拟用户脚本里。Vuser 脚本用于描述 Vuser 在场景中执行的操作。
(11)Concurrency 并发,并发分为狭义和广义两类。 狭义的并发,即所有的用户在同-时刻做同一件事情或操作,这种操作一般针对同一类型的业务,或者所有用户进行完全一样的操作,目的是测试数据库和程序对并发操作的处理。 广义的并发,即多个用户对系统发出了请求或者进行了操作,但是这些请求或操作可以是不同的。对整个系统而言,仍然有很多用户同时进行操作。 狭义并发强调对系统的请求操作是完全相同的,多适用于性能测试、负载测试、压力测试、稳定性测试场景:广义并发不限制对系统的请求操作,多适用于混合场景、稳定性测试场景。
(12)场景(Scenario):性能测试过程中为了模拟真实用户的业务处理过程,在 LoadRunnet中构建的基于事务、脚本、虚拟用户、运行设置、运行计划、监控、分析等的一系列动作的集合,称之为性能测试场景。场景中包含了待执行脚本、脚本组、并发用户数、负载生成器测试目标、测试执行时的配置条件等。
(13)思考时间(Think Tme):模拟正式用户在实际操作时的停顿间隔时间。从业务的角度来讲,思考时间指的是用户在进行操作时,每个请求之间的间隔时间。 在测试脚本中思考时间体现为脚本中两个请求语句之间的间隔时间。
(14)标准差 (StdDeviation): 该标准差根据数理统计的概念得来,标准差越小,说明波动越小,系统越稳定,反之,标准差越大,说明波动越大,系统越不稳定。包括响应时间标准差、TPS 标准差、Running Vuser 标准差、Load 标准差、CPU 资源利用率标准差、WebResources 标准差等。举例响应时间标准差。
2.7性能测试通过的标准
子主题 1
常见系统应用分层架构
显示层
web
andriod
ios
h5
逻辑控制层
api
数据存储层
mysql
redis
MongoDB
oracle
性能测试指标定义
性能测试的需求分析
分析的目的
明确测试指标
明确测试场景
新系统
同行业比较
业务逾期
老系统
对比以往的用户使用行为以及用户量
第三章
JMeter体系结构
3.1简介
高性能分类
缓存
使用场景
缓存分类
使用模式
回收策略
崩溃与修复
缓存实践
分片
分片策略
二级索引
路由策略
动态平衡
分库分表
任务分片
存储
读写分离
动静分离
冷热分离
重写轻读
数据异构
列队
一步处理
流量削峰
系统解耦
数据同步
柔性实物
无锁化
串行无锁
结构无锁
零拷贝
内存映射
零拷贝
序列化
分类
性能指标
选型考量
池子化
内存池
线程池
连接池
对象池
并发化
请求并发
请求冗余
异步化
调用异步化
流程异步化
工具说明
测试分析工具
visualvm
yourkit
jps
性能测试类型
1、负载测试(可置性测试)
定义:
在被测系统上不断增加压力,直到性能指标(如响应时间)超过预期指标或者某种资源使用已经达到饱和状态。可以找到系统的处理极限,为系统调优提供数据
特点:
1):该方法主要目的是找到系统处理能力的极限
2):该方法在给定的测试环境下进行,通常需要考虑被测系统的业务压力量和典型场景
3):该方法一般用来了解系统的性能容量,或者是配合性能调优来使用
性能容量:
系统在保证一定响应时间的情况下能够允许多少并发用户的访问
2、压力测试
定义:
系统在一定饱和状态下,例如CPU、内存等饱和情况下,系统能够处理的会话能力,以及系统是否会出现错误
特点:
1)该方法的主要目的是检查系统处于压力情况下是应用的性能表现
该方法通过增加访问压力,是系统资源使用保持在一定水平,检验此时应用的表现,重点在于有误出错信息产生,系统对应用的响应时间等
2)该方法一般通过模拟负载等方法,使得系统的资源使用达到较高的水平
3、验收性能测试
定义:
特定条件下验证系统的能力状况
特点:
1)该方法主要目的是验证系统是否具有系统宣称的能力。
方法包括:确定用户场景,给出需要关注的性能指标,测试执行,测试分析几个步骤
2)该方法需要事先了解被测系统的典型场景,并具有确定的性能目标
3)这种方法要求在已确定的环境下进行
4、配置测试
定义:
通过对被测系统软硬件环境的调整,了解各种不同环境对系统性能影响的程度,从而找到系统各项资源的最优分配原则
特点:
1)该方法主要目的是了解各种不同因素对系统系能影响的程度,从而判断出最值得进行的调优操作
2)该方法一般在对系统性能状况有初步了解后进行
需要在确定的环境、操作步骤和压力条件下进行
3)该方法一般用于性能调优和规划能力
5、并发测试
定义:
模拟多用户并发访问同一个应用、模块或者数据记录时是否存在死锁或者其他性能问题
特点:
1)该方法主要目的是发现系统中可能存在的并发访问时的问题
2)该方法主要关注系统中可能存在的并发问题。比如:内存泄漏、线程锁和资源争用等问题
3)该方法可以在开发的各个阶段使用,需要相关的测试工具的配合和支持
常用工具:商业软件loadrunner:功能完整强大,内存占用大,需要收费
开源工具jmeter:开源免费,自由,操作较简单,能辅助完成日常的一些测试工作
6、可靠性测试
定义:
给系统施加一定的业务压力,让其持续运行一段时间,测试在这种条件下能否稳定运行
又称之为稳定性测试或疲劳测试。是指系统在高压情况下,长时间的运行系统是否稳定。如cpu使用率在80%以上,7*24小时运行,系统是否稳定
特点:
1)该方法的主要目的是验证系统是否支持长期稳定的运行
2)该方法需要在压力下持续一段时间的运行
3)测试过程中需要关注系统的运行情况
比如:内存使用或者其他资源的使用以及响应时间有无明显变化
7、失效恢复测试
针对有多余备份和负载均衡的系统设计
定义:
检测如果系统局部发生故障,系统能否继续使用
特点:
1)该方法主要目的是验证局部故障下系统能否继续使用
2)该方法需要指出:问题发生时“能支持多少用户访问”和“采取何种应急措施”
一般只有对系统持续运行能力有明确指标的系统才需要该类型测试
负载测试:通过不断加压使系统达到瓶颈,为调优提供参考数据
压力测试:
1)稳定性压力测试:在不同的给定的条件下(比如内存的使用,一定时间段内有多少请求等),系统表现出来的处理,反应能力(这里会考虑系统的容错能力,恢复能力)
2)破坏性压力测试:不断加压,直至系统崩溃,挂掉,来得出系统的最大承受能力在哪儿
并发测试:简单理解就是业务场景短时间内有大量的请求需要处理,一般出现在登陆或者某些比较重要的模块,按钮。
8,容量测试
容量测试:通常是指数据库层面的,目标是获取数据库的最佳容量的能力。又称之为容量预估。具体测试方法为在一定的并发用户,不同的基础数据量下,观察数据库的处理能力,即获取数据库的各项性能指标
9,异常测试
又称之为失败测试。是指系统架构方面的测试。如在负载均衡架构中,要测试宕机、节点挂掉等情况系统的反映
性能测试case
1、具体的性能指标分为以下几类:
①.系统容量(数据容量、用户量、用户并发量)
②.系统并发度指标(注册用户、在线用户、并发用户)
③.响应度指标(正常压力下响应能力、峰值压力下响应能力、异常压力下的响应能力)
2、熟悉并且理解整个系统的业务逻辑、实现原理,然后进行需求拆分,得到性能测试需求点
3、多个渠道得到具体性能要求,分析评估风险,优先级,是否进行测试等
4、编写性能测试方案和用例,并进行评审通过,然后执行
PS:一些性能测试的测试点
a.查询 b.保存 c.统计 d.刷新 e.显示 f.传输 g.响应 h.下载
举个例子:打开网络上其他媒介的文件,在网络拥堵的情况下打开执行相关操作,主要测试点如下:
①.数据量小的时候主要执行查询统计刷新等功能点
②.数据量累计到一定程度时的查询统计刷新时间(一定程度:根据实际情况与需求来确定范围)
信息收集
信息收集来源
主机层
Upadmin show path
Upadmin show vlun
Upadmin show iostat
网络层
直接从交换机导出
存储层
DeviceManger
作用:对存储系统配置、管理和监控(性能监控、告警和事件、功耗查看)
收集哪些信息
运行数据
系统日志
硬盘日志
告警
事件
Tookit
作用:存储设备部署、巡检、升级
巡检类型:实时巡检、开局巡检、续保检查、Compass盘检查、预警检查
升级方式:在线升级、离线升级
收集的信息
Alarm_log告警日志
System_log系统日志
Smart_information信息
DiskSmartinfo硬盘信息
Electronical_label电子标签
Running_data运行数据
CloudService
作用:设备监控、告警上报和设备巡检
特点:主动健康检查、告警及时感知、自动故障通报、故障信息及时回传
CLI
命令视图角色
用户视图
Guest用户
Administrator管理员
超级管理员
用服视图
研发视图
高危命令
Reboot system/controller重启系统/控制器
Poweroff disk disk_id=对硬盘下电
清楚系统配置、导入license/DB
收集信息
基本信息
设备序列号
版本
客户信息
故障信息
故障发生时间
故障现象
故障前后操作
存储信息
硬盘模块配置
指示灯状态
存储系统数据
告警和日志
组网信息
连接方式
交换机型号
网络拓扑结构
IP地址信息
服务器信息
操作系统版本
端口速率
操作系统日志
性能调优
性能优化思路
1,定位需要优化的sql
慢查询日志
打开慢查询日志
pt-query-digest
重点业务流程
压力测试报告
性能监控结果
2,分析sql低效的原因
explain
索引利用情况
排序
临时表
回表读写
行扫描情况
Profiles
sql各个子任务资源消耗情况
3,修改索引
是否有无用的索引需要删除
是否可以适当建立组合索引
组合索引的循序是否需要调整
前缀索引
股改索引的利用
4,重写sql
是否因为列的计算导致索引失效
是否有不需要的列别查询
select *
是否不恰当的关联关系导致过多读行
是否可以将复杂的sql拆分
是否可以指定使用更好的索引:use index
5,修改表结构
修改表结构以达到更好的索引利用效率
修改列的类型,长度,约束
6,测试结果
V3性能调优
高低水位影响
高水位
可根据业务调整,关注调整后的性能变化和Cache命中率
低水位
默认为20,可调整
Cache作用
使得IO得到充分的整合与调度,降低延迟,提升性能
分条深度
分条
条带
磁盘上单个或多个连续的扇区
分条
同一硬盘阵列中多个硬盘驱动器上相同“位置”的条带
分条深度
一个条带容量的大小
分条宽度
一个分条中数据成员盘的个数
随机写性能
RAID5
影响因素
IO分布
IO切片跨越多个分条单元,写时需要操作多个硬盘
写惩罚
当更改的数据不足一个条带大小时,依然需要计算校验值,产生了更多的读写
读改写(小写)
重构写(大写)
IOPS影响
随着分条深度的增加,随机写IOPS不断增加,后逐渐下降
RAID10
影响因素
IO分布
IOPS影响
逐渐上升,后增长趋势放缓
随机读性能
RAID5
RAID10
硬盘个数
RAID5
持续顺序写带宽
随硬盘个数增加性能变好,达到9盘时缓慢下降
持续顺序读带宽
先上升后下降
RAID10
读写性能都逐渐上升
读写策略
读预取
定义:处理一个IO请求时,读取除该IO外更多的数据,缓存到Cache提高性能;但对于随机IO不当的预取会影响性能
固定预取
可变预取
智能预取
不预取
写策略
透写
IO下盘后才返回写成功,取决于磁盘转速、寻到时间等
回写
回写镜像
将IO写入另一个控制器作备份
回写不镜像
只写入到本端Cache即返回写成功
Cache策略
常驻
默认
回收
多路径
屏蔽冗余磁盘
链路负载均衡
轮询算法
最小队列深度算法
根据每条路径上的IO个数
最小任务数
不仅看IO个数,还看IO大小
LUN切换
到优选控制器的路径都故障后,切换到工作控制器;默认开启
关闭LUN切换,有乒乓效应时需关闭
Failback
当优选控制器恢复后,IO回切,但考虑主机到优选控制器的链路不稳定,可延迟切换;默认开启延迟600s
IO悬挂
一条路径IO下发失败,重试;默认关闭(1~600s)
工作模式
控制器间负载均衡
控制器内负载均衡
9000性能调优
性能指标
IOPS
带宽
主机层
CIFS/NFS增大缓存区大小,加快TCP传输
若支持巨型帧,开启调整MTU
NFS并发数调整
NFS挂载参数调整
dirty_bytes参数调整
CIFS读写块大小尺寸
网络层
网络拓扑
交换机类型
组网方式
存储层
硬盘类型
节点类型
冗余配比和条带大小
NAS参数调整
传输块大小
notify缓存机制
签名 校验数据
访问时间跟踪
分析调整客户端接入负载分配
分析调整热点数据分布
RAID性能
随机写性能
RAID10>RAID5
随机写多为小IO,RAID5有写惩罚
随机读性能
RAID5与RAID10相当
随机业务IO比较离散,RAID5和RAID10能同时提供数据的盘数不同,但性能并无很大差异
持续顺序写性能
RAID5>RAID10
RAID5可并行写的盘数多于RAID10
持续顺序读性能
RAID5>RAID10
RAID5可并行读的硬盘多于RAID10
备份组网
LAN-Base
组网特点
以业务网络为基础,控制流和数据流同走LAN网络
CS和MA一起或分别部署到独立的备份服务器上
优点
允许利用现有网络,投资成本小
对设备要求低
缺点
占用较大的现有网络带宽
备份性能受限
对主机应用影响较大
LAN-Free
组网特点
以SAN网络为基础
控制流和备份数据流分开,不占用现有网络带宽
CA/MA都安装到生产主机上,备份数据直接通过SAN网络传输到备份介质
优点
依赖于SAN网络,备份性能好
对现网影响较小
缺点
增加了对现网的投资成本
对生产主机性能影响较大
对设备要求高
Server-Free
组网特点
基于SAN网络,备份数据流走后端SAN网络传输,不占用业务网络带宽
备份服务器安装CS/MA/CA,生产服务器需要安装CA
备份服务器通过挂载存储的快照读取需要备份的数据
优点
备份性能好,依赖于SAN网络
对现有业务网络几乎无影响
对主机性能几乎无影响
缺点
对网络投资成本较高
对设备要求较高
Server-Less
组网特点
完全不占用主机的资源,不影响主机性能
备份数据流直接通过存储经由SAN网络传输到备份介质
优点
对业务主机几乎无影响
对现有业务网络几乎无影响
备份性能好,依赖于SAN网络
缺点
对网络投资成本较高
对设备要求较高,需要支持NDMP或者SCSI-3
基于NDMP
翻译:Network Data Management Protocol网络数据管理协议
特点
子主题 3
基于SCSI-3
可以实现将数据从一个存储设备传输到另一个设备
子主题 2
备份类型
完全备份
差量备份
增量备份
答题思路
先介绍组网特点
再介绍优缺点
优缺点包括
备份性能
对主机性能的影响
对现有业务网络的影响
对存储设备的要求高/低
投资成本
业务规划考虑因素
备份组网方式
备份数据类型
初始数据量
备份窗口
备份周期
数据保留周期
备份介质类型及空间
网络带宽
故障处理
原则
先外部后内部
外部问题:线缆故障、客户设备、断电
内部问题:系统故障
先高级后低级告警
告警级别:紧急、重要、警告
先共性后个性
处理基本方法
告警信息分析法
替换法
双LUN性能不同
主机层
应用不一样
CPU使用率
内存不足
HBA的最大并发数
多路径选择是否合理
网络层
以太网/光交是否划zone/VLAN
网络带宽是否达到瓶颈
是否有误码率
存储层
硬盘类型
后端存储级联的硬盘框是否达到瓶颈
RAID级别和RAID策略
分条深度
LUN的类型(Thick/Thin LUN)
LUN的对端和本端访问
Cache读写策略以及预取策略
Cache的高低水位
增值特性,SmartTier和SmartCache
硬盘故障或者坏块、LUN正在重构、恢复或迁移
8G FC HBA卡亮红灯
信息收集
五大信息
存储层
巡检定位
网络层
主机层
误码率
定义
原因
主机层
IO流量过载
FC光模块故障或虚插
网络层
光纤弯曲度过大
强电磁干扰
存储层
光模块故障或虚插
解决办法
光交、存储查看清楚误码率
15分钟再次巡检,看误码率是否增加
若有增加
非部件故障
主机层、网络层、存储层依次插拔
部件故障
依次更换部件
再次巡检,看误码率是否增加
快照
COW
定义:COW(Copy-On-Write),写前拷贝
原理
1、创建快照LUN时,存储系统在源LUN所在的存储池动态划分出COW空间用于存储写前拷贝的数据,并生成快照LUN
2、快照被激活后,在共享映射表中记录源LUN中的数据状态
3、对源LUN写数据时,检查共享映射表,看被修改的数据是否发生过写前拷贝
若没有,将被修改的数据拷贝到COW数据空间,然后修改共享映射表
若有,直接向源LUN写入数据
快照LUN
快照LUN可以映射给主机使用
当修改快照LUN时,先将数据写入快照LUN,再修改独享映射表
读快照LUN:先查询独享映射表,若数据更改从快照LUN中读取,若未修改,查询共享映射表,若数据修改,从COW数据空间读取,否则从源LUN读取
快照回滚
快照LUN中的数据直接覆盖源LUN的数据
特点
在线进行,备份窗口几乎为零,无需业务停机
快速数据恢复
节省硬盘空间
可创建多个快照副本
结合BC科实现定时激活或停止快照
映射表
共享映射表:用于记录源LUN数据拷贝情况,一个LUN只有一个共享映射表,存放在COW空间的Meta区
独享映射表:记录快照LUN的数据变更情况,一个快照LUN都有一个独享映射表,存放在快照LUN的Meta区
ROW
定义:ROW(Redirect-on-Write)写前重定向
原理
1、对文件系统拍摄ROW快照
2、当拍摄并激活快照时,存储系统先拷贝文件系统的根节点形成快照根节点并保存到特殊目录里,为隐藏目录
对文件系统更改时,新写入的数据存放到新的空间,原文件系统并修改指针
快照回滚
快照目录覆盖文件系统目录,默认回滚为缺省模式
对比
读性能
COW优于ROW,ROW新写入的数据较分散
写性能
COW对写性能有影响,影响曲线是先断崖式下降(在快照激活的瞬间),再缓慢上升(原LUN需要拷贝的数据量越来越少,而且非首次写的数据不在要写前拷贝),但低于原始性能;但随着快照越来越多,写性能越来越差
ROW对写性能有影响,写入的数据越来越分散,影响曲线是逐渐下降
但总体,写性能ROW优于COW
占用空间
ROW快照占用的是源文件系统的空间
COW快照占用源LUN所在存储池的空间
特点
瞬间生成
只记录源LUN数据的状态,几秒内生成
占用空间小
并非完整地物理数据拷贝
作用
数据备份和恢复
数据保护
业务测试
数据分析
定义
源数据在某个时间点的一致性数据副本
容灾
容灾
本地高可用
主机层容灾
服务器集群
网络层容灾
虚拟化网关,双机热备
存储层容灾
基于阵列的双机双阵列
阵列内同步远程复制
主阵列故障,需手动进行卷的挂载和系统恢复
同城容灾
场景
容灾距离≦100Km
RPO=0;RTO≈0
主备中心FC光纤链路
方案
存储双活解决方案
主备容灾解决方案
远程容灾
两地三中心解决方案
异地点到点容灾解决方案
云容灾解决方案
HyperMetro双活
概念
分布式锁
为了防止不同的主机同时访问存储系统的同一数据发生冲突,设计分布式锁来避免访问冲突,只有获取锁分配机制的存储系统才能写入数据
特点
RTO=0,RPO=0
AA双活,两个数据中心均运行,可同时承担生产业务
故障自动切换,业务无感知
组网
FC网络
≤25KM,存储层和应用层都必须保证至少4芯裸光纤直连
≥25KM,必须使用波分设备DWDM
IP网络
≤80KM,有核心交换机时,必须保证两对裸光纤直连核心交换机
≥80KM,必须使用DWDM构建数据中心间互联网络
原理
数据仲裁机制
静态优先级
三种情况,关注心跳链路是否正常
双活Pair中,数据中心A故障,A数据中心的LUN失效,B LUN停止业务
仲裁服务器
9种情况,关注心跳链路和仲裁服务器
第八种,仲裁服务器故障和心跳链路故障
故障间隔超过60s,A数据中心的LUN继续,B停止业务
故障间隔60s以内,均停止业务
双活6层
存储层双活
计算层双活
应用层双活
网络层双活
传输层双活
安全层双活
客户价值
端到端双活设计
真AA最精简双活
双活IO优化,性能高
利旧现有设备,保护现有投资
应用场景
子主题 1
实际问题的扩展
jmeter工具
jemter
1.通用接口
http请求默认值
HTTP信息头管理器 处理token等
cooker
签名接口
get请求
带参数的get请求查询
key:value格式的post请求
参数为k=json的POST接口
参数为纯json的POST接口
超时处理
定时器
固定定时器
同步定时器
常数吞吐量定时器
2.断言
响应断言
json断言
3.参数化
自定义变量
参数化函数
随机数函数
随机字符串函数
加密函数
CSV文件读取
参数化文件
4.关联
后置处理器
json提取器
正则处理器
逻辑控制器
循环控制器
if控制器
仅一次控制器
5.上传下载
上传
下载
6.压力测试
LR工具
为什么LR能做性能测试
LR做性能测试的原理
是整个性能测试过程的实施环节
三大组件
vugen
作用:模拟用户行为:生成脚本
录制与回放
录制原理是什么
脚本结构
参数化
添加事务
添加响应时间
集合点
关联
输入输出
虚拟用户
controller
场景控制与设计
controller里面隐含了load generator(负载生成器),
如果问四大组件就把generator答上
analysis
结果分析器,形成报告
性能测试核心概念
为什么做性能测试
提高用户满意度,作为业务谈判的指标
保障软件质量,对质量的一种提升
节约成本的手段
做性能测试的目的和价值是什么
性能测试是通过自动化的测试工具,模拟多种正常、峰值以及异常负载条件,来对系统的各项性能指标进行测试
性能测试不等于软件测试,软件测试包含性能测试
目的:性能测试验证各项性能指标是否符合要求,验证系统是否具备你所宣称的能力
软件测试的目的价值
产品角度
软件生产商
关注软件测质量(内部质量)
质量模型用来评估软件质量
用户角度
站在用户角度测试
用户觉得软件好用(外部质量&使用质量),提高用户的满意度
目的价值
找bug
质量、成本、进度平衡
为了盈利而测试
性能测试关注点
质量模型
效率
时间
用户
软件运行的快不快
软件处理某一功能,所花的时间,多与少
S端
服务器端,处理业务的速度,时间
资源利用率
依赖于:硬件(CPU,内存,硬盘IO)
资源消耗(释放回收)
希望:(每处理一笔业务)资源消耗越来越少,处理的时间越来越快
用户角度
快不快,是否稳定
性能测试、功能(系统)测试,自动化测试
系统测试(功能测试)
验证功能是否实现,是否满意用户需求,找bug
自动化测试(web自动化移动端自动化)
主要用于做:回归测试与验收测试,提高测试执行的效率
性能测试
验证各项指标是否是否符合要求,
验证系统是否具备你所宣称的能力
发现各个功能模块的缺陷,是辅助工具
主要工作是验证你系统到底怎么样
当系统性能指标,不符合要求;或性能不好得时候,可以把这种不好,理解成缺陷
也要修改这种缺陷,让系统达到用户的性能要求,通常这种修改,在专业词汇上叫做:性能调优
性能测试时通过自动化的测试工具,模拟多种正常、峰值以及异常负载条件,来对系统的各项性能指标进行测试
性能测试工作的重点和难点
不太关心:系统中,功能模块实现对不对,找bug不在性能测试范畴中
性能测试与自动化测试依赖于:功能的稳定,模块的正确的实现
性能测试与功能测试的区别
站在用户的角度去测试
功能:是否实现
性能:快不快;稳不稳定;平台数据共享与兼容
质量
软件质量模型
功能
性能(效率):时间、资源利用消耗、依从性
时间性能:软件的一个具体事物响应的时间
空间性能:软件运行时,所消耗的系统资源
代码
功能测试更多关心:功能实现是否达到要求,是质量的基础
性能测试更多关心的是:实现得怎么样,服务怎么样?是质量的提升
企业中,一般:先做功能测试,当系统整体功能趋于稳定的时候,做性能测试
哪些模块要进行性能测试?
性能测试的测试类型
负载
找出系统能够承受的最大负载
压力
超出最大负载,然后看系统的处理能力?
(处理能力:快速响应,快速处理,缓慢处理,无响应,不处理;崩溃)
性能瓶颈、性能分析、性能优化、校验优化之后的系统(解决当前瓶颈,达到预期目标能力)
稳定
长时间运行
做业务、空载、满载、超载
可靠
两次故障间的间隔时间(稳定和可靠一般是一起的)
一般性能
在当前业务情况下,系统的性能指标
基准
上一次实施性能测试,有相关场景(500个人,同时呼叫10086),
有一个结果(性能测试结果、数据),看这个结果和我的预期目标
(500个人,同时呼叫10086,要达到的效果),找出(当前的测试场景)性能瓶颈,
性能分析,性能优化;校验优化之后的系统(解决当前瓶颈,达到预期目标能力),
运行(和上一次相同的测试场景),之前的测试场景:基准测试,基准测试一般在最后一轮进行
配置
和兼容相似,但兼容是在软件层面,兼容测试是在硬件层面
性能调优工作
容量
不同的数量级别的数据,数据的处理,用户访问系统的性能指标
并发
多个进程同时触发
性能术语
并发
广义并发
同一时间,多个用户对服务器进行操作(跟服务器有交互)
广义包含狭义
狭义并发
用户在同一时间点、同时、做某一个操作
用户在同一时间内,做某一件事情
并发用户数
在线用户,不一定等于并发用户
并发一定要跟服务器产生交互,不产生交互,怎么施压
并发才能施压,大数据量,大量用户且同时对服务器操作
并发与用户数
系统有1500个用户使用
系统允许1000个用户同时在线
系统允许1500个用户,并发访问系统
系统支持1500个用户并发进行登录操作
并发用户数:系统使用用户数5%-20%,作为参考
在线用户数,参考峰值并发用户数
实际用户数
虚拟用户数
子主题 1
响应时间
用户发出请求到得到反馈的总共时间,一般包括网络时间x2和服务器处理时间x2
TTLB(time to last byte),从发出请求开始,到最后一个字节返回来的时间
从c端发出请求到得到相应的整个过程的时间
即网络响应时间+服务器端响应时间
单位s和ms
事物
包括操作和过程,可以把整体的操作看做一个过程,也可以把操作看做事物
去完成一件事情,把一系列步骤集合起来的过程,成为事物,当做一个整体过程,是一个泛概念
点击淘宝购物,每一个连接、文字、图片、都是单独的请求,等最后一个想赢回来,才叫1个请求完成了
事务响应时间
一个是大于(请求)相应时间
完成该事物所用的时间,包含一个或多个请求响应时间
吞吐量
单次处理事物的数量
单次业务中,C端和S端进行的数据交互总量
受服务器性能和网络(带宽)性能影响
也被称为:TPS(单位时间内能完成的事物数)
通过量,来衡量事物
一个用户登录系统需要1s,支持10个用户登录,且花费响应时间为1s,且系统吞吐率为
订票系统,1天,订票为500w张
吞吐率
吞吐率除以时间,计算到秒
TPS
每秒钟系统能够处理的交易和事物数量
单位时间内完成的事物数
例如:服务器美妙支持1000笔取款业务,即每秒钟支持1000个事物并发
每s点击数==点击率
每秒钟内,用户问web服务器提交的http请求数
点击率越大,服务端压力越大
三次握手,服务器发生http请求
性能计数器
性能测试工具监控性能指标,用计数器来表示
一系列:用于描述服务器或者os性能的指标
用于:资源监控和系统瓶颈分析
借助工具,对系统资源进行监控(内存分配,cpu使用)等
资源利用率
监控指标相应的资源消耗多少,使用情况
1000个用户并发进行XX操作,服务器的cpu使用率不超过75%,内存占有了不超过10%
性能测试的性能指标
性能测试工程师的工作
初中高
初级:性能测试搭建环境,采用性能测试相关工具按照测试流程:
模拟用户行为,依据测试场景,执行测试用例,手机相关测试数据
中级:测试需求的分析,测试场景的设计,测试结果的分析,测试流程的监控
高级:测试计划,测试谈判,性能分析与调优,测试过程的改进,性能验收,性能报告
0 条评论
下一页