赞
踩
目录
每秒通过事务数分析图(Transactions per Second)
性能测试应该放在功能测试之前还是之后进行?为什么?
性能测试通常应该在功能测试之后进行。
主要原因如下:
系统稳定性: 在进行性能测试之前,系统可能还存在各种功能性缺陷和问题。如果在此阶段进行性能测试,可能会导致测试结果不准确,因为性能问题可能被功能性问题所掩盖。
优化基准: 进行功能测试后,系统的稳定性会得到一定程度的提高,这样进行性能测试时能够更好地观察系统在正常运行状态下的性能表现。同时,功能测试的结果也可以作为性能测试的参考基准,帮助确定性能测试的指标和目标。
集成测试: 功能测试之后往往会进行集成测试,确保系统不同模块之间的协作正常。在集成测试完成后进行性能测试可以更准确地评估系统整体的性能,包括模块之间的交互对性能的影响。
稳定性和可靠性: 性能测试通常需要对系统进行一定的负载,如果系统在功能测试阶段存在较多的稳定性问题,可能会导致性能测试的过程中出现不可预测的错误或崩溃,从而影响测试结果的准确性和可靠性。
所以,性能测试应该在功能测试之后进行,以确保系统在功能稳定的基础上能够达到预期的性能指标,并且能够更好地发现和解决性能问题。
工欲善其事,必先利其器。接下来我们开始学习性能测试的工具——LoadRunner。
LoadRunner是一款由 Micro Focus 公司开发的商业性能测试工具,旨在帮助用户评估计算机系统、应用程序或其他系统组件在特定条件下的性能表现。LoadRunner的主要功能包括负载模拟、性能监控、分析和报告等。许多互联网公司都选择使用LoadRunner来进行产品的性能测试工作,因为它支持广泛的协议和平台,并提供了全面的性能测试解决方案。
其核心特点包括:
负载模拟: LoadRunner能够模拟成千上万个同时访问系统的虚拟用户,以模拟真实的负载情况。
支持多种协议: LoadRunner支持各种常见的网络协议和技术,包括HTTP、HTTPS、Web Services、JDBC、LDAP、SMTP等,因此适用于不同类型的应用程序。
性能监控: LoadRunner可以实时监控系统的性能指标,如响应时间、吞吐量、资源利用率等,以便及时发现问题并进行调整。
脚本录制与回放: LoadRunner提供了脚本录制功能,可以录制用户操作并将其转换为性能测试脚本,然后进行回放以模拟用户行为。
灵活性和可定制性: LoadRunner提供了丰富的脚本编辑和定制选项,用户可以根据需要对测试进行灵活地配置和调整。
强大的分析和报告: LoadRunner提供了强大的分析工具和报告功能,可以帮助用户深入了解性能测试结果,并提供可视化的报告以便于分享和决策。
总的来说,LoadRunner是一款功能强大、灵活性高的性能测试工具,被广泛认可为业界的权威性能测试解决方案之一。
注意:LoadRunner只能在windows操作系统上运行,MAC操作系统不支持,如果你使用MAC操作系统,需要在MAC操作系统上安装一个虚拟机,再装上windows操作系统之后安装loadrunner,比较费事
提前下载安装文件:
双击HP_LoadRunner_12.02_Community_Edition_T7177-15059.exe,弹出安装界面。
一路安装,继续勾选图中三项并安装:
整个安装过程比较慢,耐心等待。
安装完成后,界面出现三个图标,如图:
如果遇到VUG(Virtual User Generator,虚拟用户生成器)无法录制脚本的问题,有几种常见的解决方法:
完全退出浏览器:在录制脚本之前,确保将浏览器完全退出。有时候浏览器的进程可能仍然在后台运行,这可能导致录制不到脚本的问题。
使用Fiddler + VUG:可以借助 Fiddler(网络调试工具)结合 VUG 来录制脚本。通过在 Fiddler 中捕获网络流量,并将其转发到 VUG 中进行处理,可以解决一些无法直接录制的问题。这种方法通常比较有效。
使用VUG自带的Firefox浏览器:LoadRunner(包括其中的 VUG)提供了一个特殊版本的 Firefox 浏览器,该浏览器已经配置好以确保能够与 VUG 协同工作。你可以尝试使用此浏览器来录制脚本,以解决录制问题。
选择LoadRunner作为性能测试工具有以下几个主要原因:
强大的录制功能:LoadRunner提供了强大的录制功能,能够捕获用户与应用程序之间的交互,并将其转换为可执行的测试脚本。这使得测试人员能够轻松地模拟用户行为,从而进行性能测试。
模拟各种场景:LoadRunner支持模拟各种复杂的场景,包括多种协议、不同的用户行为模式、各种负载条件等。这使得测试人员能够更加真实地模拟实际生产环境中的情况,从而全面评估系统的性能表现。
详细的测试报告:LoadRunner生成的测试报告非常详细,包含了各种性能指标、图表和分析结果。这些报告能够帮助测试人员全面了解系统的性能表现,发现潜在的性能问题,并提供优化建议。
除此之外,LoadRunner还具有丰富的功能和灵活性,能够适应各种复杂的性能测试需求,是业界公认的领先性能测试工具之一。
LoadRunner是一种功能强大的自动负载测试工具,适用于多种软件体系架构。它提供了丰富的功能,可以帮助用户评估系统的性能表现。LoadRunner可以测量用户关注的各种性能指标,包括响应时间、吞吐量、并发用户数量以及性能计数器等,从而全面地评估系统在不同负载条件下的性能表现。通过模拟各种场景和负载条件,LoadRunner可以帮助用户发现潜在的性能瓶颈,并提供详尽的测试报告和分析结果,以指导系统性能的优化工作。LoadRunner的强大录制功能使得用户可以轻松地录制测试脚本,快速建立测试场景,从而提高测试效率。总的来说,LoadRunner作为一款领先的性能测试工具,为用户提供了全面而可靠的性能评估解决方案。
LoadRunner启动后,在系统任务栏中会有一个Agent进程运行。该Agent进程的作用是监视各种协议的客户端与服务器端之间的通信过程。LoadRunner利用一套C语言函数来录制测试脚本,因此只要LoadRunner支持的协议,就能够完整地录制通信过程,避免出现无法录制的情况。录制完成后,LoadRunner会使用这些脚本模拟用户行为,向服务器端发送请求,并接收服务器的响应。LoadRunner并不关心服务器内部的处理过程,它主要通过模拟上千万用户的并发负载以及实时性能监测的方式,来确认和查找系统中的性能问题,并提供性能优化建议,以加速应用系统的发布周期。
VuGen(虚拟用户脚本生成器)、Controller(测试控制器)和Analysis(结果分析器)。此外,系统还自动调用后台功能组件LG(负载生成器)和Proxy(用户代理)来完成性能测试工作。
VuGen:VuGen是用于录制和编写虚拟用户脚本的工具。通过录制或手动编写脚本,可以模拟用户在应用程序中的行为和操作。这些脚本描述了用户与应用程序之间的交互过程,包括发送请求、接收响应和处理数据等步骤。
Controller:Controller是性能测试的中心控制器,用于管理、监控和执行性能测试。在Controller中,可以指定性能测试方案、配置测试场景、分配虚拟用户、启动测试并监控测试执行过程。它还负责收集测试数据和监控系统性能指标,以便进行实时分析和调整。
Analysis:Analysis用于对性能测试过程中收集到的各种性能数据进行计算、汇总和分析。通过Analysis,可以生成各种图表和报告,展示系统在不同负载条件下的性能表现,帮助测试人员深入了解系统的性能特征和瓶颈,并提供优化建议。
此外,还有后台组件:
LoadRunner主要包括的三大组件之间的关系:
在LoadRunner的工作流程中,首先使用VuGen录制脚本,然后将脚本放置在Controller设计的测试场景中进行运行。在测试运行过程中,Controller会收集监控数据,并将这些数据传输到Analysis中进行分析和报告生成。
VuGen(虚拟用户脚本生成器):VuGen用于录制、编辑和调试虚拟用户脚本。测试人员使用VuGen录制用户操作并生成脚本,然后将这些脚本保存下来,准备在性能测试中使用。
Controller(测试控制器):Controller是性能测试的管理和监控中心。在Controller中,测试人员设计测试场景,配置虚拟用户数量、负载参数等,然后将预先录制好的脚本分配到场景中的虚拟用户中。一旦场景准备就绪,测试人员就可以启动测试并监控测试过程中的各项性能指标。
Analysis(结果分析器):Analysis用于对性能测试结果进行分析和报告生成。测试人员在测试完成后,可以将收集到的性能数据导入到Analysis中进行分析。这些数据包括虚拟用户的响应时间、吞吐量、错误率等指标。通过Analysis生成的报告可以帮助测试人员评估系统的性能表现,发现潜在的性能问题,并提出优化建议。
在使用LoadRunner之前,我们需要先了解以下几个重要概念:
场景(Scenario):场景指的是在每一个测试过程中发生的事件或操作序列。它描述了被测试系统的特定使用情况和负载条件,包括用户的行为、并发用户数量等。一个场景可以由一个或多个虚拟用户组成。
虚拟用户(Vusers):虚拟用户是LoadRunner用于模拟对应用程序产生压力的用户实体。LoadRunner使用多线程或多进程技术来模拟多个虚拟用户,每个虚拟用户都可以执行一系列的操作,并产生相应的负载。
脚本(Vuser Script):脚本用来描述虚拟用户在场景中执行的动作和操作。它包含了虚拟用户在测试过程中的行为步骤、请求和响应的处理逻辑等内容。脚本通常由LoadRunner的脚本编辑器(VuGen)生成或编辑。
事务(Transactions):事务代表了用户的某个业务过程,例如登录、搜索、结账等。在性能测试中,需要对这些业务过程的性能进行衡量和监控,以便评估系统的性能表现和稳定性。
集合点(Rendezvous):在多用户并发测试中,每个用户执行事务脚本的先后顺序是不确定的。为了模拟真实的并发场景并评估系统的承载能力,可以在测试脚本中插入集合点。集合点指示所有用户在该点停顿,直到达到指定条件(默认是所有用户都到达),然后同时发出下一步请求,从而实现并发执行。
LoadRunner的性能测试过程可以分为以下几个主要步骤:
制定性能测试计划: 在这一阶段,团队需要分析应用程序,确定测试的目标,并计划如何执行测试。这包括确定测试的范围、目标用户数量、测试环境的配置等。
开发测试脚本: 使用LoadRunner的Virtual User Generator(VuGen)组件开发测试脚本。测试脚本描述了每个虚拟用户在测试中执行的活动,包括用户的行为、参数化、事务定义和检查点设置等。
设计运行场景: 在Controller中设计运行场景,定义要使用的虚拟用户数量、负载模型和测试持续时间等。运行场景描述了在测试活动中发生的各种事件,并包括一系列Load Generator机器和测试脚本的列表。
运行、监视测试: 一切配置就绪后,开始运行测试。在测试运行过程中,需要监视各个服务器的运行情况,包括数据库服务器、Web服务器等,以确保系统正常运行且能够处理预期的负载。
分析测试结果: 在测试运行结束后,使用Analysis组件来分析收集到的性能数据。LoadRunner提供了各种图表和报告,用于分析测试结果,评估系统的性能表现,并发现潜在的性能问题。最终,我们会得出结论,并提出性能优化的建议。
LoadRunner使用了三个主要功能模块来覆盖性能测试的整个流程:
我们下面直接以Loadrunner安装时附带的样例程序Web Tours进行讲解。
双击:
成功访问到:
1、端口号
2、用户名、密码:
文件名就是Web Tours登录名,文件中第一行信息就是用户名对应的密码,你可以更改文件内容并保存以此更改密码。(可以有多个用户名和密码,你也选择可以自行注册)
登陆成功:
这个窗口别关,关了服务器就无法访问了:
接下来,双击VUG:
首先,新建一个脚本文件:
配合我们现在使用的Web Tours,选择HTTP协议:
输入用户名及密码:
现在我们选择停止录制:
这个窗口可以直接关掉:
录制好的脚本:
下面有很多日志,我们来仔细看看:
可以证明脚本的执行顺序:
vuser_init(虚拟用户初始化): 在此阶段,虚拟用户初始化执行了一些准备工作,例如加载运行时设置文件。
Action(操作): 在此阶段,虚拟用户执行了一系列操作。首先,通过web_url函数发送了一个GET请求,获取了页面上的一些资源(如图片)。接着,使用web_submit_form函数提交了一个登录表单,并且成功登录。然后,再次使用web_submit_form函数提交了另一个表单。在这些操作中,虚拟用户检测到了一些非资源的链接和一些资源已经在缓存中,因此没有重复下载。
vuser_end(虚拟用户结束): 在此阶段,虚拟用户执行一些结束工作,如释放资源等。
Vuser Terminated(虚拟用户终止): 虚拟用户执行完所有操作后被终止。
为什么要进行脚本的加强?
对脚本进行加强的主要目的是使其能够更准确地模拟用户行为,并且能够收集和报告相关的性能指标,以便于对应用程序的性能进行评估和分析。录制的脚本可能会忽略一些关键的性能指标,导致无法全面地评估应用程序的性能。通过对脚本进行加强,可以更全面地测试和评估应用程序的性能,从而确保应用程序在生产环境中能够达到预期的性能要求。
当录制完一个基本的用户脚本后,在正式使用前我们还需要完善测试脚本,增强脚本的灵活性。一般情况下,我们通过以下方法来完善测试脚本:
事务(Transaction):为了衡量服务器的性能,我们需要定义事务。比如:我们在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,我们把这个操作定义为一个事务,这样在运行测试脚本时,LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner可以在脚本中插入不限数量的事务。
如何插入事务:通过菜单设计---在脚本中插入---开始事务、结束事务来进行事务的添加。事务的状态默认情况下是 LR_AUTO。一般情况下,我们也不需要修改,除非在手工编写代码时,有可能需要手动设置事务的状态。可以通过步骤导航器来查看步骤的参数选项。
其实不用搜索,这里就有:
注意,开始事务和结束事务必须成对出现!
开始事务函数里面的“login”是事务名称,开始事务和结束事务对应的事务名称要求一致!
以上述为例,在实际生成的脚本中含有打开首页、注册、退出登录等多项操作。而我们实际需要关注的是注册这一个事务的性能,那么就需要在注册前后来加入事务。
除了事务,我们还可以通过参数化、添加逻辑、错误处理等方式来完善测试脚本,以更好地模拟真实用户的行为,并评估应用程序的性能。
在LoadRunner中,为了实现并发这种目的,通过集合点实现。
集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受1000人同时提交数据。在LoadRunner中,可以通过在提交数据操作前面加入集合点来实现这一需求。这样当虚拟用户运行到提交数据的集合点时,LoadRunner就会检查同时有多少用户运行到集合点。如果不到1000人,LoadRunner就会命令已经到集合点的用户在此等待。当在集合点等待的用户达到1000人时,LoadRunner会命令1000人同时去提交数据,从而达到测试计划中的需求。
注意:集合点经常和事务结合起来使用。集合点只能插入到Action部分,vuser_init和vuser_end中不能插入集合点。
具体的操作方法如下:在需要插入集合点的前面,通过菜单操作:菜单设计---在脚本中插入---集合点。
运行后在日志中也得以体现:
当进行压力测试时,为了检查Web服务器返回的网页是否正确、页面元素是否渲染正确,VuGen允许我们插入文本检查点。这些检查点可以验证网页上是否存在指定的文本,并测试在较大的压力测试环境中,被测的网站功能是否保持正确。
检查点的含义类似于单元测试中的断言功能,用于确认程序的正确性。
通过菜单---查看---快照,可以查看HTTP数据视图,选择要检查的文本,然后选择添加文本检查步骤,即可添加一个检查点。
然而,在进行回放时,可能会遇到错误提示。这可能是由于检查点验证失败导致的。常见的失败原因包括:
网页内容发生变化:如果在录制脚本时检查点验证的文本与回放时的实际网页内容不一致,检查点将失败。
动态生成的内容:如果网页上的文本是动态生成的,如时间戳或会话标识符等,那么每次回放时文本都会发生变化,导致检查点失败。
网络延迟或服务器响应时间过长:如果在检查点验证期间网络延迟或服务器响应时间过长,可能会导致检查点验证超时。
在遇到检查点失败时,需要检查网页内容是否发生变化,确认是否存在动态生成的内容,并评估网络延迟或服务器响应时间是否影响了检查点的验证。根据具体情况调整检查点设置或网站功能以解决问题。
在录制脚本过程中,如果用户填写并提交了一些数据,比如要增加数据库记录,这些操作都会被记录到脚本中。然而,当多个虚拟用户运行脚本时,它们都会提交相同的记录,这不符合实际的运行情况,并且有可能引起冲突。为了更真实地模拟实际环境,我们需要各种各样的输入。
参数化输入是一种有效的方法。通过使用参数,可以实现以下两个优点:
参数化的过程通常包含以下两个任务:
需要注意的是,参数化仅适用于函数中的参数。不能将参数用于非函数参数的字符串。
举例来说,在注册的例子中,如果我们已经注册了一个名为test的用户,再次注册就会失败,因为用户名已经存在。这意味着当LoadRunner脚本再次运行时,注册步骤会失败。为了解决这个问题,可以找到对应的代码块,在用户名(例如username)中选中"test"字符串,然后右键点击并选择"使用参数替换",然后就可以设置参数,使得在每次运行时可以使用不同的用户名。
选择文件类型,并且自定义文件名称及路径后点击“Create table”:
点击“close”,再点击OK:
密码也进行参数化:
为了方便观察,我们调整日志格式,并且Ctrl+S保存:
如果有多个用户名,需要修改:
参数的类型
日期/时间(DateTime):用于表示日期和时间,在需要输入日期/时间的地方使用DateTime类型来替代。属性设置包括选择日期时间格式。
组名(Group Name):在实际运行中,LoadRunner使用该虚拟用户所在的Vuser Group来代替。在VuGen中运行时,Group Name将会是None。
负载生成器名称(Load Generator Name):在实际运行中,LoadRunner使用该虚拟用户所在负载生成器的机器名来代替。
迭代编号(Iteration Number):在实际运行中,LoadRunner使用当前测试脚本循环的次数来代替。
随机数字(Random Number):用于生成随机数,在属性设置中可以设置随机数的范围。
唯一编号(Unique Number):用于生成唯一的数字,在属性设置中可以设置第一个数字以及递增的数字大小(每个Vuser的块大小)。注意,使用该参数类型时要注意可以接受的最大数,以避免脚本运行出错。
Vuser ID:用于表示虚拟用户的ID,在实际运行中,LoadRunner使用该虚拟用户的ID来代替。在VuGen中运行时,Vuser ID将会是-1。
文件(File):需要在属性设置中编辑文件,并添加内容。
用户定义的函数(User Defined Function):从用户开发的DLL文件提取数据。
每种参数类型都有不同的用途和属性设置,根据实际需要选择合适的参数类型来进行参数化。
脚本加强中的一项重要技术是打印日志。在软件开发和测试过程中,日志是一种非常有用的工具,能够提供关于系统运行状态的详细信息。通过在脚本中添加日志信息,我们可以更好地跟踪脚本的执行过程、调试脚本中的问题以及记录关键信息。
首先,通过在脚本中适当的位置插入日志语句,我们可以实时地记录脚本的执行情况。这样做有助于我们了解脚本执行到哪一步,以及每一步的执行结果。如果脚本出现异常或错误,我们可以根据日志信息追踪问题所在,并快速定位和解决。
其次,日志还可以用于调试脚本中的问题。通过在关键步骤前后插入日志语句,我们可以输出变量的值、函数的返回结果,甚至是请求和响应的内容。这些详细的信息有助于我们深入分析脚本的执行过程,从而更加准确地定位和解决问题。
此外,日志还可以用于记录关键信息,如用户操作的详细步骤、重要事件的发生时间、错误信息等。这些日志记录可以作为后续分析、报告和审计的重要依据,有助于我们全面了解脚本的执行情况和系统的运行状态,以及及时发现和解决潜在问题。
综上所述,通过适当地添加日志信息,我们可以提高脚本的可读性、可维护性和调试性,从而提高脚本的质量和效率,以确保系统的稳定性和可靠性。
还有一个函数和它很相似:
VuGen 中可以使用C 语言中比较标准的函数和数据类型,语法和C语言相同。下面简单介绍一下比较常用的函数和数据类型。
控制脚本流程:在脚本页面,通过右键-插入-新建步骤可以查看函数列表。在VuGen中,您可以直接使用C语言中常见的控制流程语句,如if、else、for、while等,来控制脚本的执行流程。
字符串函数:由于在VuGen脚本中使用最多的是字符串操作,因此字符串函数在脚本中非常频繁。一些常用的字符串函数包括:
输出函数:输出函数在调试脚本时非常有用。其中,lr_output_message用于输出一条消息,您可以在执行过程中插入此函数以输出调试信息,方便排查问题。
当在LoadRunner中进行脚本编写时,除了常见的C标准函数外,还提供了许多LoadRunner特定的标准函数,这些函数用于执行各种性能测试任务,并且通常与LoadRunner的特性和功能紧密相关。
以下是一些常见的LoadRunner标准函数:
lr_start_transaction和lr_end_transaction:这对函数用于开始和结束一个事务,用于衡量一组操作的性能,例如用户登录、搜索、结账等。
web_url和web_submit_form:这两个函数用于模拟用户在Web应用程序中的页面请求,web_url用于访问URL,而web_submit_form用于提交表单。
lr_think_time:用于模拟用户在操作之间的思考时间,以更真实地模拟用户行为模式。
lr_eval_string:用于在运行时评估字符串表达式,通常用于参数化脚本中的值。
lr_save_string和lr_eval_string:这对函数用于在脚本执行期间保存和检索字符串值,可用于动态提取服务器响应中的数据并在后续请求中使用。
lr_error_message:用于输出错误消息,方便调试和定位脚本中的问题。
web_reg_find:用于在服务器响应中查找特定的文本,以进行文本检查,用于验证页面是否正确加载。
web_add_header:用于添加自定义HTTP标头,以满足特定的测试需求,例如添加授权标头或自定义标头。
以上是一些LoadRunner中常见的标准函数,可以根据测试需求选择适当的函数来完成各种性能测试任务。这些函数使得LoadRunner成为一个强大而灵活的性能测试工具,能够满足各种复杂的测试场景和需求。
在LoadRunner中,一个运行场景描述了在测试活动中可能发生的各种事件和操作。它包括了一组Load Generator机器列表、测试脚本列表以及大量的虚拟用户和虚拟用户组。
具体来说,一个运行场景包含以下几个要素:
Load Generator机器列表:指定了用于模拟用户行为和生成负载的Load Generator机器的列表。这些机器负责发送请求到被测系统,并模拟用户的行为。
测试脚本列表:包含了要在测试中执行的测试脚本。这些脚本定义了用户的操作流程、负载模式和性能测试目标。
虚拟用户和虚拟用户组:虚拟用户是由测试脚本定义的模拟用户,它们模拟真实用户在被测系统中的行为。虚拟用户组则是一组具有相似行为的虚拟用户的集合,可以根据需要配置不同数量的虚拟用户组,以模拟不同的用户群体和负载条件。
创建和管理运行场景通常通过LoadRunner中的Controller来完成。在Controller中,我们可以指定Load Generator机器、加载测试脚本、配置虚拟用户组以及设置测试参数等。一旦设置好了运行场景,我们就可以启动测试并监控测试过程中的性能表现。通过运行场景,我们可以模拟真实的用户行为、生成负载并评估被测系统的性能表现。
方式一——通过VUG打开:
但是我们应该根据需求修改,Controller有一个Bug,可能不会生成右边的图表:
而我们按照第一种方式可以显示图表:
方式二——双击直接打开
如果没有弹出窗口:
弹出一个框,选择场景类型:
左边展示着VUG新建的所有脚本文件,可以按需求添加到右边。
我们不修改,选择手动场景,点击OK。
在LoadRunner中,创建新场景时需要选择一种场景类型。
下面对两种主要类型进行简要说明:
手动场景:
面向目标的场景:
选择适合我们需求的场景类型可以根据我们的测试目标和需求来确定。如果我们希望对场景进行详细的手动配置,可以选择手动场景;如果我们已经明确了测试目标并希望根据目标自动生成场景,可以选择面向目标的场景。
当然,后者较为死板,所以我们重点放在第一种手动创建场景上。
在手动场景设置页面中,我们可以对场景进行详细的配置和调整。
在性能测试领域,通常有两种关键的角色:施压机器(Load Generators)和被压机器(SUT,System Under Test)。
施压机器(Load Generators):
- 施压机器是指用于模拟大量用户并发访问系统的计算机或服务器。这些机器通过运行性能测试工具(如LoadRunner、JMeter等)来模拟多个用户同时对系统发出请求,以测试系统在不同负载下的性能表现。
- 施压机器会生成大量的网络流量和请求,以模拟真实用户的行为。它们通常会在测试期间不断向被压机器发送请求,并记录系统的性能指标和响应时间等数据。
被压机器(System Under Test,SUT):
- 被压机器是指要进行性能测试的目标系统或应用程序。这可能是一个Web服务器、数据库服务器、应用程序服务器等。
- 被压机器接收来自施压机器的请求,并对其进行处理。其性能表现会受到施加的负载的影响,从而帮助测试人员评估系统在不同负载条件下的性能、稳定性和可靠性。
在性能测试过程中,施压机器和被压机器协同工作,通过模拟真实用户行为和对系统进行压力测试,以确保系统在生产环境中能够满足用户的需求并保持稳定的性能。
Load Generator(负载发生器):
Vuser组模式:
百分比模式:
全局计划设置:
设置结果文件保存路径:
运行时设置:
影响性能和TPS统计的设置项:
通过以上设置,我们可以更加灵活地调整场景,确保测试的准确性和可靠性,并获取到我们所需的性能指标。
场景目标的主要设置页面如下:
虚拟用户目标(Virtual Users Goal):
如果我们想要了解系统在多少用户同时访问下的性能情况,建议设置虚拟用户目标。这个目标指定了同时运行的虚拟用户数量,以便我们评估系统在不同负载下的表现。
每秒点击次数:
如果我们希望测试Web服务器的真实性能,可以选择设置目标类型为每秒点击次数(Hits per Second)、每分钟页面数(Pages per Minute)或每秒事务数(Transactions per Second)。这些类型的目标需要指定一个虚拟用户的最小值和最大值范围。
Controller会尝试以最少的虚拟用户数量来达到所定义的目标。如果最小用户数无法达到目标,Controller会逐步增加用户数,直到达到最大用户数。如果即使使用了最大用户数目标仍未实现,就需要增加最大用户数,然后重新执行场景。
事务响应时间:
事务响应时间(Transactions Response Time)是评估系统性能的关键指标之一。以下是对事务响应时间的详细说明:
如果想知道在多少用户并发访问网站时,事务的响应时间达到性能指标说明书中规定响应时间的最大值,我们推荐使用Transactions Response Time 类型。在这种类型下,需要指定需要测试的事务名称、虚拟用户数量的最小值和最大值,以及预先定义好的事务的响应时间。
在场景运行中,如果我们使用了最多的虚拟用户,但仍未达到定义的最大响应时间,这说明Web服务器仍然有能力接受定义的最大虚拟用户数量。如果在使用了部分虚拟用户时就达到了定义的最大响应时间,或者LoadRunner提示即将超过最大响应时间,则需要重新设计或修补应用程序,并可能需要升级Web服务器的软硬件。
如果我们定义的目标是Pages per Minute、Hits/Transactions per Second,Controller会首先根据最小用户数除以定义的目标,得到一个值,然后确定每个用户应该达到的hits/transactions或pages per minute。然后Controller开始按以下策略加载用户:
在每加载一批用户后,LoadRunner会检查是否达到了这批用户的目标。如果未达到,则会重新计算每个用户应该达到的目标数字,并重新调整下一批加载用户的数量。默认情况下,LoadRunner每两分钟加载一批用户。
如果Controller加载了最大数量的用户仍未达到预定目标,则LoadRunner会重新计算每个用户的目标,并同时运行最大数量的用户,以尝试达到预定目标。
如果出现以下情况,Pages per Minute、Hits/Transactions per Second类型的场景会置于“Failed”状态:
##分析以及监控运行场景
在运行过程中,我们可以监视各个服务器的运行情况,例如DataBase Server、Web Server等。我们可以通过添加性能计数器来实现监视。实际中更多的会使用第三方工具,例如nmon来监控Linux等系统。以下是在Windows服务器上的示例:
在分析实时监视图表时,我们可以关注以下几个关键点:
事务响应时间是否在可接受的时间内? 我们可以通过“事务响应时间”图表来判断每个事务完成所需的时间。这可以帮助我们确定是否有任何事务的响应时间超出了预期的可接受时间范围。通过观察这些图表,我们可以识别出哪些事务花费的时间最长,以及是否有任何事务的响应时间超出了预定的可接受时间。
网络带宽是否足够? 通过“吞吐量”图表,我们可以观察在场景运行期间每秒从Web服务器接收到的数据量。将这个值与网络带宽进行比较,可以确定当前的网络带宽是否是系统的瓶颈。如果“吞吐量”图表显示的曲线随着用户数量的增加而呈现相对平缓的趋势,而不是增长趋势,那么这可能意味着当前的网络速度无法满足系统当前的流量需求。
TPS值:通过“每秒事务数”图表,我们可以实时监测系统每秒处理的事务数量。这个值对于评估系统的性能非常重要。通过观察TPS值的变化,我们可以了解系统的负载情况以及系统是否能够处理当前的事务负载。
通过对这些实时监视图表的分析,我们可以及时发现系统性能方面的问题,并采取相应的措施来优化系统的性能。
在Controller中的运行场景界面,通常分为几个主要区域,其中包括:
虚拟用户状态区(Virtual User Status):
日志消息区(Log Messages):
运行时间区(Run Time):
图表区(Graphs):
活动虚拟用户列表(Active Virtual User List):
活动事务列表(Active Transaction List):
通过以上六种区域,我们可以全面监控和管理测试场景的执行过程,及时发现问题并做出调整,确保测试的顺利进行和准确评估系统的性能表现。
虚拟用户状态区(Virtual User Status)
虚拟用户状态区(Virtual User Status)包含多种状态,具体包括:
Down:表示虚拟用户当前处于停止状态,无法执行任何操作或任务。这通常是因为虚拟用户会话已经结束或者被手动停止,导致虚拟用户无法执行任何任务。在 Down 状态下,虚拟用户将不再参与场景的执行,并且不会再生成任何活动或者日志。
Pending。这个状态表示虚拟用户处于等待状态,等待系统分配资源或者等待前置条件满足后才能开始执行任务。通常,当虚拟用户数量超过系统当前能够支持的上限时,一部分虚拟用户可能会进入Pending状态,直到有可用资源或者满足条件时才会转变为其他状态,比如Ready或者Run。 Pending状态的虚拟用户不会执行任务,直到系统能够分配资源或者满足前置条件为止。
Init:示虚拟用户正在初始化过程中,准备开始执行测试脚本之前的准备工作。在这个阶段,虚拟用户会执行必要的初始化操作,包括加载脚本、设置参数、建立连接等。一旦初始化完成,虚拟用户就会进入就绪状态(Ready),准备开始执行脚本。
Ready:示虚拟用户已经完成初始化,准备好执行测试脚本,但尚未开始执行。一旦虚拟用户进入到这个状态,它就已经准备好执行测试脚本,只等待控制器发出开始执行的命令。
Run:表示虚拟用户正在执行测试脚本,与服务器进行交互,并模拟用户行为。在这个状态下,虚拟用户会按照脚本中定义的操作进行请求和响应,与被测应用程序进行交互。
Rendez:
表示虚拟用户处于同步等待状态,等待其他虚拟用户达到同步点再继续执行。这种状态通常用于模拟多个用户同时执行某个操作的情况,其中一个用户需要等待其他用户执行完特定操作后才能继续进行。
Passed:
表示虚拟用户已经成功完成了其任务,执行测试脚本的全部步骤,并且没有出现错误或异常。当虚拟用户达到此状态时,表示其任务顺利完成,测试结果正常。
Failed:表示虚拟用户在执行过程中遇到了无法处理的严重错误,导致测试任务失败。当虚拟用户处于此状态时,通常需要进行错误分析和排查,以确定问题的根源并采取相应的修复措施。
Error:表示虚拟用户在执行过程中遇到了错误,可能是网络连接问题、脚本错误、服务器响应异常等。与“Failed”状态不同的是,此状态下的错误通常不会导致整个测试任务的失败,但仍需要关注和处理以确保测试的准确性和稳定性。
Gradual Exiting:表示虚拟用户正在逐渐退出执行状态,准备停止执行测试脚本。这种状态可能在测试任务结束或者手动停止虚拟用户时出现,表示虚拟用户正在逐步完成当前的任务并最终退出执行状态。
Stopped:表示虚拟用户正在逐渐退出执行状态,准备停止执行测试脚本。这种状态可能在测试任务结束或者手动停止虚拟用户时出现,表示虚拟用户正在逐步完成当前的任务并最终退出执行状态。
这些状态可以帮助我们实时监控虚拟用户的运行情况,及时发现问题并采取相应的措施进行调整和处理,确保测试的顺利进行。
运行起来之后观察:
你会发现左侧的性能指标区分为蓝色的字和黑色的字,蓝色的字代表检测到的数据,黑色的代表没有检测到。
添加电脑监控指标:
想要监控黑色的字怎么办?需要手动添加。左击想要添加的性能,右击一个空白图表:
施压机器和被压机器都是本机,写上localhost:
可以把不想要的删除:
Running状态:在场景运行开始时,所有虚拟用户都需要经历初始化并启动,因此初始时Running状态的虚拟用户数量为0。随着场景的进行,虚拟用户逐渐完成初始化并开始执行测试脚本,导致Running状态的虚拟用户数量逐渐增加。由于我们一开始设置了3个虚拟用户,因此Running状态的虚拟用户数量的最高点为3。
Finished状态:初始时,所有虚拟用户都处于未完成状态,因此Finished状态的虚拟用户数量为0。随着场景的进行,一些虚拟用户完成了其任务并成功执行了测试脚本,导致Finished状态的虚拟用户数量逐渐增加。这表示已经完成了测试任务的虚拟用户数量。
Error状态:因为场景运行时没有出现错误,所以Error是0;
我们只插入了一个事务,但是这里显示4个事务?
这是因为在Controller中,VUG中的一个代码文件就是一个事务, 再加上我们添加的一个事务,一共是4个事务。
许多部分趋势和走势极其相似。
刚开始需要建立连接,紧接着才会断开连接,所以new connection数据刚开始比较高lConnection shutdown数据刚开始为0,因为需要先建立连接。
趋势基本稳定。
这种的就不太正常,需要你去着重分析到底发生了什么。
如果运行结束之后没有自动打开 Analysis,你需要先设置这两个地方:
接下来它就会自动打开窗口:
我们可以合并图表观察:
合并吞吐量和每秒点击数量:
为什么吞吐量和每秒点击数量的趋势是一样的?
吞吐量和每秒点击数量的趋势通常是相关的,因为它们之间存在着密切的关联关系。当每秒点击数量增加时,即表示系统接收到HTTP的请求量增加了,这意味着系统需要处理更多的请求。这种情况下,系统的吞吐量也会相应地增加,因为吞吐量是衡量系统在单位时间内能够处理的请求数量。因此,当每秒点击数量增加时,吞吐量通常也会增加,反之亦然。这种相关性反映了系统处理能力和负载之间的密切关系。
我们可以新建一个表来观察:
合并后发现两者几乎重合:
通过上述图表,我们可以做一些简单的项目的性能分析:
如果点击率上升,但是吞吐量没有反应/吞吐量数据没有变化?
从这句话我们可以剖析出: 我们虽然对系统不断请求,但是请求和服务之间没有数据交互。
服务无响应: 可能是因为服务出现了故障或性能问题,导致无法及时响应请求。这可能是由于服务器过载、软件错误、网络问题或其他原因引起的。
请求未到达服务器: 虽然点击率上升,但实际发送到服务器的请求数量并没有增加,这可能是由于网络问题、防火墙设置、负载均衡器故障等原因导致请求未能成功到达服务器。
服务响应延迟: 即使请求已经到达服务器,但由于服务端处理能力不足或处理速度较慢,导致无法及时响应请求,从而使吞吐量没有相应变化。
服务器限制请求量: 可能是服务器端对请求数量进行了限制或设置了阈值,一旦达到该阈值,服务器将不再响应或处理请求,这可能是为了保护服务器免受过载或拒绝服务攻击等问题的影响。
其他问题: 还可能存在其他问题,如网络拥塞、软件配置错误、硬件故障等,这些问题也可能导致点击率上升但吞吐量未发生变化。
事务摘要是性能测试结果分析中的重要组成部分,它提供了整个测试期间各个事务的综合情况,包括通过(Pass)和失败(Fail)等信息。通过对事务摘要的综合分析,我们可以对系统的整体性能进行初步评估,并快速了解系统是否正常运行。
成功与失败比例分析:
事务执行时间分析:
关键事务分析:
趋势分析:
平均事务响应时间图是性能测试结果分析中的重要指标之一,它显示了在测试场景运行期间每一秒内事务执行所用的平均时间。通过这个图表,我们可以分析应用系统在不同时间段内的性能表现,以及了解系统在负载变化下的响应情况。
性能走向分析:
最大、最小和平均响应时间:
识别性能问题:
排队等待分析:
通过对平均事务响应时间图的分析,可以全面了解系统在测试期间的性能表现,及时发现并解决潜在的性能问题,确保系统能够在不同负载下保持稳定和高效的运行。
每秒通过事务数分析图(Transactions per Second,TPS)是评估系统性能的重要指标之一。该图显示了在测试场景运行的每一秒中,每个事务通过、失败以及停止的数量,反映了系统在不同时间段内的事务处理能力和负载情况。
实时事务负载分析:
性能变化趋势分析:
与响应时间的对比分析:
发现性能瓶颈:
通过对每秒通过事务数分析图的观察和分析,可以帮助我们全面了解系统在测试期间的事务处理能力和性能表现,及时发现并解决潜在的性能问题,确保系统能够在高负载下保持稳定和高效的运行。
“负载下的事务响应”图是一种综合性的图表,结合了“正在运行的虚拟用户”图和“平均事务响应时间”图的数据,用于展示系统在不同负载下的事务响应情况。
综合性分析:
事务响应随负载变化:
负载与性能关系分析:
扩展应用系统的参考:
分析渐变负载场景:
综合来看,“负载下的事务响应”图提供了系统在不同负载下的综合性性能数据,有助于深入分析系统的性能特征,发现潜在的问题和瓶颈,并为系统的优化和扩展提供重要参考。
“事务响应时间(百分比)”图提供了在给定事务响应时间范围内能够执行的事务百分比的分析。
分析事务响应时间分布:
性能指标分析:
识别性能异常:
优化决策支持:
性能趋势评估:
综合来看,“事务响应时间(百分比)”图通过对事务响应时间分布的分析,提供了全面的性能评估和优化决策支持,帮助我们深入了解系统性能特征,并发现潜在的性能问题。
点击率(Throughput)和吞吐率(Transactions per Second,TPS)是评估系统性能的重要指标,它们之间存在着密切的关联。
点击率(Throughput):
吞吐率(Transactions per Second,TPS):
点击率和吞吐率的关系:
拐点的意义:
性能问题的诊断:
网页诊断是对网站页面内容的评估,旨在确定是否有任何因素影响了事务响应时间。通过网页诊断,可以深入分析导致网页响应缓慢或链接中断等问题的元素。以下是网页诊断的四种细分方式:
下载时间细分:
组件细分(随时间变化):
下载时间(随时间变化):
第一次缓冲时间(随时间变化):
在网页诊断中,以下是常见的时间指标及其含义:
DNS Resolution(DNS解析时间):浏览器向Web服务器发送请求时,需要先将域名解析为IP地址的过程所花费的时间。较小的DNS解析时间表示DNS服务器运行良好。
Connection(连接时间):浏览器和Web服务器之间建立连接所需的时间。较小的连接时间表明网络情况良好且Web服务器能够及时响应请求。
First buffer(首次缓冲时间):从建立连接后,Web服务器发送第一个数据包到浏览器成功接收第一个字节之间的时间。这反映了Web服务器的延迟和网络反应时间。
Receive(接收时间):从浏览器成功接收到第一个字节到下载完成的时间段。该时间可以判断网络的质量和下载速度。
除此之外,还有其他重要的时间指标,如SSL Handshaking(SSL握手时间)、Client Time(客户端延迟时间)、Error Time(错误处理时间)和Ftp Authentication(FTP身份验证时间),它们也是评估网页性能和系统质量的关键参数。
SSL Handshaking(SSL握手时间):指在建立安全套接字层(SSL)连接时所花费的时间。SSL握手协议用于确保通信安全,较长的SSL握手时间可能会导致网站加载速度变慢。
Client Time(客户端延迟时间):指客户端浏览器发送请求后到服务器响应前所花费的时间。客户端延迟时间反映了客户端设备的性能和网络连接的质量。
Error Time(错误处理时间):指从发送HTTP请求到Web服务器发送回HTTP错误信息所经过的时间。较长的错误处理时间可能表明服务器或网络出现了故障或延迟。
FTP Authentication(FTP身份验证时间):指在客户端发送FTP请求后,服务器开始处理客户端命令之前所花费的时间。FTP身份验证时间反映了服务器处理请求的效率和安全性。
交易成功率曲线显示了在测试期间每秒成功完成的事务数量与总事务数量之间的比率。这个曲线可以帮助我们了解系统在不同负载下的事务成功率,以及系统在处理高负载时是否能够保持稳定的性能。
CPU使用率曲线显示了在测试期间服务器的CPU利用率随时间的变化情况。通过观察CPU使用率曲线,我们可以了解系统在不同负载下的CPU负荷情况,帮助评估系统的性能表现和资源利用率。
内存使用率曲线显示了在测试期间服务器的内存利用率随时间的变化情况。通过观察内存使用率曲线,我们可以了解系统在不同负载下的内存消耗情况,以及系统是否存在内存泄漏或内存不足的问题。
网络带宽曲线显示了在测试期间服务器的网络带宽利用率随时间的变化情况。通过观察网络带宽曲线,我们可以了解系统在不同负载下的网络通信情况,以及系统是否存在网络瓶颈或带宽不足的问题。
性能测试报告一般会包括如下部分:
1. 测试目标:
2. 测试概要描述:
3. 测试结果和分析:
4. 测试结论:
5. 建议和结果限制:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。