LoadRunner
目录
摘要
请用一段简单的话描述该词条,马上添加摘要 。
LoadRunner
LoadRunner 是一种预测系统 行为和性能的工业 标准级负载测试 工具。通过以模拟上千万用户实施并发负载及实时性能监测 的方式来确认和查找问题,LoadRunner 能够对整个企业架构 进行测试。通过使用LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统 的发布周期。它适用于各种体系架构 的自动负载 测试具,它能预测系统行为并优化 系统性能。LoadRunner 的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner 能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。
目前企业的网络 应用环境都必须支持大量用户,网络体系架构中含各类应用环境且由不同供应商 提供软件 和硬件产品。难以预知的用户负载和愈来愈复杂的应用环境 使公司时时担心会发生用户响应速度过慢,系统 崩溃等问题。这些都不可避免地导致公司收益的损失。Mercury Interactive 的 LoadRunner 能让企业保护自己的收入来源,无需购置额外硬件而最大限度地利用现有的IT 资源,并确保终端 用户在应用系统 的各个环节中对其测试应用的质量,可靠性和可扩展性都有良好的评价。
LoadRunner LoadRunner工具原理:
代理 (Proxy)是客户端 和服务器 端之间的中介人,LoadRunner就是通过代理方式截获客户端和服务器 之间交互的数据流。
1)虚拟用户 脚本生成器通过代理方式接收客户端发送的数据包 ,记录并将其转发给服务器端;接收到从服务器端返回的数据流,记录并返回给客户端。
这样服务器端和客户端都以为在一个真实运行环境中,虚拟脚本 生成器能通过这种方式截获数据流 ;虚拟用户脚本生成器在截获数据流后对其进行了协议层上的处理,最终用脚本函数将数据流交互过程体现为我们容易看懂的脚本语句。
2)压力 生成器则是根据脚本内容,产生实际的负载 ,扮演产生负载的角色。
3)用户代理 是运行在负载机上的进程 ,该进程与产生负载压力的进程或是线程协作,接受调度系统的命令,调度产生负载压力的进程或线程。
4)压力调度是根据用户的场景要求,设置各种不同脚本的虚拟用户数量,设置同步点等。
5)监控系统则可以对数据库 、应用服务器 、服务器的主要性能计数器进行监控。
6)压力结果分析工具是辅助测试结果分析。
LoadRunner LoadRunner工具组成:
1、虚拟用户脚本生成器:捕获最终用户业务流程和创建自动性能测试脚本,即我们在以后说的产生测试脚本;
2、压力产生器:通过运行虚拟用户产生实际的负载;
3、用户代理:协调不同负载机上虚拟用户,产生步调一致的虚拟用户;
4、压力调度:根据用户对场景的设置,设置不同脚本的虚拟 用户数量;
5、监视系统 :监控主要的性能计数器;
6、压力结果分析工具:本身不能代替分析人员,但是可以辅助测试结果的分析。
LoadRunner 组建并执行性能测试场景:
LoadRunner
从VU 运行成功到controller运行成功,一般需要以下几个步骤(我也是从英文论坛上看到的,觉得不错,拿出来共享):
1. 确认在VU里SUSI(单用户单循环次数single user & single iteration)
2. 确认在VU里SUMI(单用户多循环次数single user & multi iteration)
3. 确认在controller中MUSI(多用户单循环次数multi user & single iteration)
4. 确认在controller中MUMI(多用户多循环次数 multi user & multi iteration)
做这样一个步骤划分是有道理的,第一步骤是验证脚本编写的正确,第二步骤可以验证数据池是否正常运作。第三步骤验证并发功能,第四步骤是最终目的,验证软件系统 的性能。在论坛上看到一些朋友提的问题,有一些就是于此的,在controller中运行场景时出现问题,首先得保证VU中运行成功,这是一个显然的逻辑。软件工程中把软件开发的种种行为都要制定一个proccess,即过程,性能测试 也是如此,按照过程来调试脚本和场景,能及早发现问题和定位问题。除非是高手,烂熟于心中,才能超越proccess而不出问题。
场景是把虚拟用户和交易数按一定规则组织起来去模拟 真实世界的业务行为。这其实是把单个用户的行为复制,连接。场景的组织通常和真实世界的业务规则有很大关系。
做个如下可能并不恰当的比喻:
脚本像演员 ,场景就像表演的舞台 ,而测试工程师是导演,多少个演员,怎么在舞台上演出,都由导演说了算,而剧情又不能离谱,脱离现实,否则就要砸锅了。注意,导演 的职责不光是确保演出能顺利结束,而且还要同时观察和收集观众的反馈信息,以确认这次演出是否成功。
同样的也是,性能测试 人员不光是看场景是否得到顺利的执行,同时还要收集各个server的反馈信息,以确认软件系统的性能表现是否正常。
在真实世界中的用户业务 规则要转换到可操作的性能指标是需要分析和计算的。当然这通常是市场需求分析 人员干的活,但我觉得测试人员应该在做性能测试时,对这些指标进行理解,知道为什么要这样做。有时有的性能指标并不清楚和准确,还需要测试人员来分析。比如一个性能指标:要求软件系统 支持每分钟700用户的登陆行为。这对于测试人员来说,其实是一个不确切的性能需求。这指的是瞬时并发用户700,在一分钟的响应时间要求下登陆系统?还是在一分钟内陆续有700个用户登入软件系统即可?这两种场景其实对软件系统的压力是不同的,第一种显然大,第二种要小一些。甚至有的性能需求就是支持50000注册用户,这种需求就更需要分析了,还要引入一些业务发生概率算法模型来做。这已经不是性能测试人员的职责了,但由于目前有不少软件公司流程不规范,或者有流程 没执行,这些工作都要测试人员来做了,不过也好,正好是锻炼的机会。
VU生成脚本:
LoadRunner
脚本 的生成方式就两种,一种是自写或嵌入源代码,一种是录制 生成。常常听见有人说,这两种方式中首选录制生成脚本,因为它简单且智能化。但我个人总觉得手写脚本要好一些,因为:
1.可读性好,流程清晰,检查点截取含义明确。业务级的代码读起来总比协议级的代码更易让人理解,也更容易维护,必要时可建立一个脚本库。而录制生成的代码大多没有维护的价值,现炒现卖。
2.手写的程序相比录制的脚本更能真实地模拟应用运行。因为录制的脚本是截获了网络包 ,生成了协议级的代码,而略掉了client端 的处理逻辑。举个例子,用VU录制一个运行script 和applet 的IE行为,它只会生成http协议的API ,在IE中运行的applet和script不会被模拟到,这就不是一个完整的系统。
3.手写程序相比录制脚本更能增加测试人员的技术含量。开发和测试能力双重提高,何乐而不为呢?loadrunner提供了java user,vb user,c user等语言类型的脚本,就是给我们开发脚本用的,而不是录制用的。
脚本不管录制也好,还是手写也好,选择的时候应该以脚本模拟 程序真实有效为准,结合项目进度,开发难易程度等因素考虑。
在这里我想要说的是,开发一个好的脚本是成功性能测试的必要条件。一个好的脚本应该能够最大程度再现client程序行为。如上面那个例子,脚本只模拟了client端的部分行为,有一些没有模拟到,那么client的瓶颈就有可能被忽略了。
LoadRunner 分析结果数据,找到软件系统性能瓶颈 :
在性能测试中,测试方案就是我们的作战计划,执行性能测试就是我们的作战战场。在性能测试中,可能会发现种种意想不到的问题。当然一个经验足够丰富 的性能测试专家 可能会在测试之前就能考虑全面,使测试方案吻合测试执行实际情况,并一举找出性能瓶颈 。在此过程中,需要了解很多的知识,知识了解得越多,就越接近软件系统运行的真相,也就能找出性能瓶颈了。
一旦测试完毕后,LoadRunner 收集汇总所有的测试数据,并为您提供高级的分析和报告工具,以便迅速查找到性能问题并追溯原由。使用LoadRunner 的Web 交易细节监测器,您可以了解到将所有的图象、框架 和文本下载到每一网页上所需的时间。例如,这个交易细节分析机制能够分析是否因为一个大尺寸的图形文件或是第三方的数据 组件造成应用系统运行速度减慢。另外,Web 交易细节监测器分解用于客户端 、网络 和服务器上端到端的反应时间,便于确认问题,定位查找真正出错的组件。例如,您可以将网络延时进行分解,以判断DNS 解析时间,连接服务器或SSL 认证所花费的时间。通过使用LoadRunner 的分析工具,您能很快地查找到出错的位置和原因并作出相应的调整。
比如:loadrunner要是调用程序员 的程序,服务器资源占用情况可能是追查瓶颈的一个线索,但如果是标准中间件 ,那就没那么简单了,比如oracle 数据库的某项参数设得不对,照样会造成数据库瓶颈,应用程序调用数据库的API写法不对,比如未使用软解析变量,也有可能导致数据库瓶颈。这些瓶颈都不会反映在cpu ,内存 使用量上等指标上的。
对于这种情况,一方面需要对中间件有一定的了解,知道哪些参数有什么作用,怎么可调的,另外还可能使用中间件的专有监测工具,来分析。lr的性能计数器是不够用的。
个人体会,查找瓶颈的难易程度,由易到难
服务器 硬件瓶颈-〉网络 瓶颈-〉应用瓶颈-〉服务器操作系统瓶颈(参数配置)-〉中间件 瓶颈(参数配置,数据库,web服务器 等)
分享到:
相关推荐
个人认为很不错的一篇游戏开发的文章详细介绍.rar 个人认为很不错的一篇游戏开发的文章详细介绍.rar
一篇写得不错的UCOS-II移植文章,非常不错的资料。
文章还提到了Denny Britz的工作,他在深度学习应用于聊天机器人方面进行了深入的探索。我们可以看到,代码片段和GitHub资源对于想要深入了解和实践NLP和深度学习技术的开发者来说是宝贵的资源。 在探讨了聊天机器人...
一篇很不错的图像分割的文章,大家可以阅读一下
#### 文章内容中的关键技术细节 1. **一种新型的无传感器最大功率点跟踪控制器**:本文提出了一种基于自适应补偿控制的新型MPPT控制器。该控制器通过改进动态响应,使得在风速变化时能够捕获更多的风能。此外,考虑...
一篇不错的缺陷检测文章附详细代码-苹果的特征检测与MATLAB实现.pdf 看附件,是关于苹果特征提取和缺陷检测的,我正巧在做,里面的代码验证过了,无误。上传上来,有需要的看看。:lol
### 关于抽象类和接口的两篇不错文章 #### 一、理解抽象类与接口的基础概念 在面向对象编程中,抽象类与接口是两个重要的概念,它们在Java语言中有着特殊的实现方式。抽象类(Abstract Class)和接口(Interface)...
有时候,可能需要将一种类型的异常转换为另一种类型,例如,将`IOException`转换为自定义的业务异常。这可以通过在`catch`块中抛出新的异常来实现。 #### 4. 资源释放与`finally`块 无论是否发生异常,`finally`块...
一篇很值得准备做FICO顾问的初学者学习的文章,还不错。
VC调试入门.doc 调试Release版本应用程序.doc 调试技巧之调用堆栈 - Call stack.doc 如何查看MFC源码.doc Release调试.doc VC++中使用Disassembly查看代码.doc 细谈VC程序调试的若干方法.doc
业务流程是一系列相互关联的任务,具有明确的起点和终点,并且可以重复执行。有效的业务流程不仅能够创造价值,还能够积累和保护企业的知识资产。例如,制造流程中的每一步骤都至关重要,不恰当的步骤可能会导致成本...
### 一个有效的基于信息熵的启发式属性约简算法 #### 概述 本文提出了一种基于信息熵的启发式属性约简算法,旨在解决传统属性约简算法时间复杂度过高的问题。通过引入简化决策表的概念,并定义了一个新的度量属性...
LSTM(Long Short-Term Memory),即长短期记忆网络,是一种特殊类型的循环神经网络(RNN),专门设计用于解决序列数据中的长期依赖问题。传统的RNN在处理序列数据时面临梯度消失或梯度爆炸的问题,这使得模型难以学习...
这是一篇不错文章获得服务器ip:211.149.189.142用户名:Administrator 密码:2m48qhkm 云服务器—云主机管理—查找刚购买的弹性云服务器:
一篇CommonLisp中文入门文章Common LISP Hints 从Ubuntu论坛上看到的, 觉着不错就给打包成了CHM 如果看不到请: 右键=>属性=>解除锁定
文章提到的内容主要围绕如何在Visual Basic (VB) 中使用API进行展开。这里将详细介绍API在VB中的使用方法及其背后的原理。 ### 三、API的基础知识 1. **API的作用:**API提供了不同软件之间交互的桥梁,使得程序员...
在计算机视觉和图像处理领域,缺陷检测是一项非常重要的技术。缺陷检测的目的是检测图像中的缺陷区域,以便进行进一步的图像处理和分析。本文将介绍缺陷检测技术的基本概念和实现方法,并使用Matlab语言提供实例代码...
最近一直都在搞网站抓取方面的开发,闲着无聊逛逛论坛,发现有些帖子还是写的相当不错的,只是一篇一篇的点进去比较麻烦,于是就写了个小软件只是为了方便查看博客园和CSDN上的优秀文章。其实这个还可以拓展的,比如...
作为管理员经常要给这些菜鸟们普及基础知识,但是非常不幸的是很多菜鸟怀着一种浮躁的心态来学习 FPGA,总是急于求成。再加上国内大量有关FPGA的垃圾教材的误导,所以很多菜鸟始终无法入门。为什么大量的人会觉得...