本文共 35181 字,大约阅读时间需要 117 分钟。
LoadRunner 12.02教程独家中文版
Tylan独家呕血翻译
转载请注明出自“天外归云”的博客园
如下所示:
Vugen:Virtual User Generator,虚拟用户发生器的简称,用来录制用户的业务流程,创建自动化性能测试脚本,亦称之为Vuser脚本。
Controller:控制器,用于组织、驱动、管理并监控负载测试。
Analysis:分析器,帮助你查看,剖析并比较负载测的结果报告。
Load Generator:负载发生器,用来攒动与运行虚拟用户以对目标系统产生负载的计算机。
场景:在场景中将根据性能需求来定义测试过程中所发生的事件。
虚拟用户:虚拟用户会在系统中模仿真实用户的行为。一个场景可以包含数以千计的虚拟用户。
虚拟用户脚本:录制了你在程序中所操作的业务流程。
协议:协议就是客户端和服务器之间的交流方式。
事务:事务用以衡量你的系统性能。一个事务代表了一个或多个终端用户的业务流程。一个事务让你衡量业务流程所花费的时间成为可能。
脚本足迹:由负载发生器所需的大量不同资源所定义,以执行Vuser脚本为目的。典型的资源包括内存,CPU能源,硬盘空间。
为了理解LoadRunner是如何做为负载测试的解决方案,这个教程将用性能需求作为一个样本应用。这个样本应用——HP Web Tours(惠普在线旅游),是一个web-based(基于网络的)旅游代理系统。HP Web Tours的用户连接到一个web服务器,用于搜索与预订航班,检查航班行程。
LoadRunner支持超过50种应用,这个教程仅仅用来讲述怎样来对一个web-based类型的应用进行负载测试。如果你要对其他类型的应用进行负载测试,请联系惠普以求帮助。
在教程的这一部分中,你将会学到如何开始并登录HP Web Tours。
在你访问这个应用的同时你一定要让 "Start HP Web Tours Server"的窗口始终开着。
现在你已经熟悉了HP Web Tours,设想你是性能工程师,你要对HP Web Tours的性能负责并让其符合HP Web Tours的商业需求。你的产品经理已经给出了四点产品的发布标准:
这个教程将教你如何建立一个满足所有这些需求的负载测试,以便于在产品发布前你可以给出诸如产品性能通过或失败的数据。
要对你的系统产生负载,首先你要创建一个可以运行的能够模仿真实用户操作的Vuser脚本。这里,你需要用Vugen来完成这一需求。
在一个性能测试环境中,LoadRunner用虚拟用户代替了真实用户,虚拟用户也叫Vusers,虚拟用户通过可预见的,重复性的模拟真实用户操作来对系统产生负载。
Vugen帮你创建虚拟用户脚本,它以录制与回放的原则去工作。当你在你的应用中完成一遍业务流程的同时,Vugen会记录你的操作并将其按步骤翻译成虚拟用户脚本。虚拟用户脚本是你负载测试的基础构成。
去开发一个虚拟用户脚本,你首先要打开Vugen并创建一个空脚本。此后你才可以通过录制事件或加入人为改善的方式来改善这个空脚本。
本节你将创建一个基于Web-based HTTP/HTML协议的虚拟用户脚本。
定义:协议是服务器与客户端之间的交流方式。
接下来我们创建一个空的虚拟用户脚本:
这部分内容将帮你完成之前预订航班和检查行程的录制。
首先,你要点击Record>Recording Options:
确保Track processes created as COM local servers这一项是没有勾选的,然后点击OK。
接下来我们录制虚拟用户脚本:
左侧的Solution Explorer给出了Vuser脚本的各个组成部分与相关文件。
Step Navigator以小图标的形式列出了虚拟用户各个步骤的操作,你在录制脚本的过程中所做的每一个操作,Vugen都会在Step Navigator中生成相应的步骤。
每个步骤名字右侧的小图标代表有截图:
用户的操作是以API函数的形式显示在右边的编辑器中的,你可以用C语言或者LoadRunner API函数或是一些流程控制语句在其中直接进行编写。
上一节,你录制了脚本。但是在你把你的脚本放到场景中执行前,你需要回放你的脚本以检查你录制的Vuser脚本是否能正常工作。
在你回放脚本之前,你必须配置脚本的runtime settings,它定义了虚拟用户的行为。
LoadRunner的运行时设置(runtime settings)让你能够模拟不同种类的用户活动和行为。例如:你可以模拟一个对服务器的输出立刻做出响应的用户,或者你也可以模拟一个每一步都要思考才能做出响应的用户。你可以配置运行时设置(runtime settings)来具化虚拟用户需要重复多少次脚本中的操作。
本节介绍通用的可以应用与所有的虚拟用户协议的runtime settings该如何配置,关于特殊的协议在第四节课中将会讲到。General runtime settings包括:
Run Logic(运行逻辑):Vuser重复不同部分Vuser脚本的次数。
Pacing(节奏):每两次重复之间的等待时间。
Think Time(思考时间):脚本之中步骤之间Vuser所需要停顿的时间。
Log:设置在你回放脚本过程中所需要收集的信息的level(等级)。
本节课介绍用Vugen修改runtime settings,之后的课程将介绍如何用Controller修改runtime settings。
修改runtime settings:
在左侧栏中选择Run Logic,设置Number of iterations(重复次数)为2,这个是用来设置脚本中Action部分的重复次数:
在这里你可以设置每两次重复之间的等待时间,你可以设置一个随机值,这将以一个随机的间隔时间更加精确的模拟真实用户在重复操作之间等待所用的时间,比如你不会看到真实用户在每两次重复操作之间总是等待六十秒。
选择第三个圆按钮,设置随机时间间隔为60到90秒:
这里设置在运行时要记录那些log信息。在你开发脚本的时候你可能会为了debug方便而想要得到一些特别的log信息,但是一旦你调试通过了,你可能以后只需要得到error的log信息,或根本不需要log信息了。
选择Extended log并勾选parameter substitution。这个选项和以后课程中将要讨论的点相关。
保持默认设置,忽略Think Time时间。你可以在Controller中设置。
在录制好脚本并设置好runtime settings后,你就做好了运行脚本所需要的准备。Vugen在你运行脚本的过程中会给予你一些的指示器。
介绍完界面上的东西,下面我们来运行录制好的脚本:
在回放结束后会弹出个东东建议你检查相关的,点击NO。
当Vuser脚本停止运行,你可以看到回放的一个总结,回放的总结会显示在Replay Summary 标签下。
回放总结标签下列出了关于脚本运行的基本信息,比如回放时间间隔,回放的开始与截止时间。下面的两个link分别是脚本运行的详细结果和回放时所收集的log。
回放的log里记录了回访时所发生的事件,在Vugen的output栏里显示。
在教材的这一部分,你将打开log,在log中找到指定的事件和提示。
查看回放log:
注意:Output栏中绿色的是成功信息,红色的是失败信息。Output栏中也会指出出现的的error在脚本中对应的行号。
双击Output栏中的行,将会定位到相应的脚本行。
在你回放了你所录制的脚本后,你需要查看回放结果去判断脚本是否回放成功。如果有哪有东西失败了,你想知道什么时候为什么失败了。
这一部分你将学会检查和分析脚本运行结果。Vugen在Test Results窗口中总结了回放结果。
你打开Test Results窗口后会发现它有两个栏,左侧的树栏和右侧的结果总结栏。
可以通过下面两种方法来查看回放结果:
下一部分,你将钻入回放结果中仔细研究,从而判断脚本在回放过程中是否到达了预期的web页面。
如果你的回放结果表示有什么东西失败了,你可以进一步定位失败的原因。
在Test Results窗口中左侧的树栏,你可以展开你的测试树,分别查看每一次重复中每一步的结果。右侧的总结栏中会显示该次重复过程中对应的回放截图。
点击Submit Form:reservations.pl,右侧总结栏将显示该步操作时所对应的截图:
总结栏显示关于步骤的总结性信息:如对象或步骤名,详细的关于页面是否成功加载,结果是否通过,每一步的发生时间等。
你可以在回放结果中搜索"Passed"或"Failed"。
这是非常有帮助的,因为如果你的回放结果总结中告诉你失败了,它可以帮你找到哪里失败了。
你可以过滤测试树栏来显示一个指定的循环或状态。比如,你可以过滤它只显示"Failed"状态的。
可以看到左面的树栏空了,这是因为过程中不存在失败。
点击File>Exit。
当你录制好一个脚本后,你通过在VuGen中运行来验证该脚本是否通过。有时回放会失败,即便同样的操作在录制时是成功的。
有很多应用是动态生成值的,你每次打开这个应用的时候都不一样。比如,有些服务器为每一个新的会话都赋予一个独一无二的会话ID。当你试着回放一个录制好的会话时,会话会生成一个与录制时不同的新的会话ID。当你回放特定的脚本时,像会话ID这样的动态值将会给你带来麻烦。比如当你回放Web-HTTP/HTML类型的脚本时动态的会话ID就会带来麻烦,但是当回放Web-TruClient类型脚本时就不会。
LoadRunner利用关联性来定位与解决这种动态值的问题。关联性保存这种变化的值到一个参数中,就像我们这个例子中的会话ID。当我们运行脚本时,虚拟用户将不会采用事先录制的值,取而代之,会采服务器所赋予其的新会话ID。
这节课你讲学习LoadRunner是如何解决在Web-HTTP/HTML类型Vuser脚本运行时产生的动态值问题。
为了说明一个普遍存在的回放失败,你需要在HP Web Tours应用中修改一个设置。这个设置会让HP Web Tours服务器需要独一无二的会话ID。
Start > All Programs > HP Software > HP LoadRunner > Samples > Web > HP Web Tours Application. 之后HP Web Tours的Home Page页面就被打开了。(Win8的话在界面输入HP Web进行搜索)
在HP Web Tours被修改的配置中,服务器给每一个虚拟用户一个独一无二的值。如果你试着回放没有修改过的在第一课中所录制的虚拟用户脚本,回放的结果将是失败的。
为了克服这个问题,你需要用VuGen去实现这个关联会话 ID的需求。你需要在VuGen中添加一步把这个独特的会话ID添加到一个参数中。在后续的每一个会话中,VuGen都会将新的独一无二的会话ID存入一个参数中。在虚拟用户运行Vuser脚本中的步骤时,虚拟用户会使用已经保存的会话ID值,而不是原先录制好的值。
点击录制按钮进行录制,VuGen运行这个新的脚本,你会注意到回放log中有一些红色字体的错误信息出现。
回访结束后,一个消息对话框会弹出提醒你检查关联,点击"No"。
观察回放总结栏(Replay Summary Tab),总结中会指出你的回放失败了。
选择"Design > Design Studio"
VuGen检查脚本和它所关联的数据,查找可能的动态值。Design Studio下Correlation这个栏列出了三个需要关联的动态值。这三个值中最长的那个是会话ID。
在之后的每一个回放会话中,VuGen都将保存新的独一无二的会话ID到参数中。当虚拟用户运行脚本时,会以该参数取代原先录制的值;
在VuGen编辑器中个,定位到VuGen加到脚本中的语句。新的语句看起来就像下面这样:
这个语句告诉VuGen将第一次包含在正则表达式中的值(独一无二的会话ID)存入参数中并叫CorrelationParameter这个名字。
现在你对回放中的错误有一定的了解了,可以去学习第四课了。
在之前的课程中,你已经确认你的脚本回放的过程精确的模拟了真实用户的行为。下一步,就是为了负载测试准备脚本。那么,多个用户同时并发的在系统上工作会怎样呢?系统会不会慢到一个不可接受的程度?
在这一课中,你将会学到不同的方法去丰富你的脚本,让它在负载测试的过程中更加有效率。
当你为一个应用做部署时,一定要准确的估测业务流程的持续时间——登陆需要多久,订飞机票等等。每一个业务流程都由你脚本中的一步或多步组成。在一个虚拟用户脚本中,你通过把这些步骤加到一个事务(transaction)中来设计一系列你想要估测的行为。
当你运行一个包含事务的脚本时,LoadRunner将会收集关于事务所花费时间的信息,并且以彩色编码的段落显示结果和报告。你通过这个信息去判断这个应用是否能满足你的性能需求。
你可以手动 的在虚拟脚本中的任何位置插入一段事务。为了将一系列步骤组成事务,在第一步之前插入一个事务开始(start_transaction)标识,在最后一步之后插入一个事务结束(end_transaction)标识。
这部分你将在你的脚本中插入一段事务来衡量用户查找和预订机票这个过程所花费的时间。
在虚拟用户脚本中插入一段事务(transaction):
现在你知道该怎么样去定义"find_confirm_flight"这个事务了。
在你的模仿中,你记录了一个预定航班和选座的过程。但是真实的生活中,往往多个用户会有不同的选择。为了改进你的测试,你需要检查当多个用户做出不同的选择时(Aisle,Window或None)预定是否依然能正常工作。
为了完成这个愿望,你需要参数化你的脚本。这就意味着你要把你录制的值,比如Aisle,用参数来替代。你将在一个参数文件中替换这些参数的值。当你运行脚本时,虚拟用户将会使用参数文件中的值(Aisle,Window或None)以便更加真实的模拟一个客户端环境。
参数化你的脚本:
这个图标代表有定值。
备注:值并不是大小写敏感的。
你现在已经为seating preference创建了一个参数,当你运行负载测试时,虚拟用户会使用参数中的值而不使用你事先录制好的脚本中的值——Aisle。
当你运行脚本时,Replay log里将会告诉你每次重复所用到的参数中的值。虚拟用户第一次运行使用的是Aisle,第二次是Window,第三次是None。
当你运行一个测试时,你经常需要确认返回页面上是否包含某些特定内容。Content check功能将会在脚本运行时自动帮你在页面上检查你的预期信息。你可以插入两种内容检查:
Text Check:在网页上检查一段文字;
Image Check:在网页上检查一张图片。
在这一部分你将插入一个text check去检查是否Find Flight字样出现在HP Web Tours的Reservations页面上。
插入一个text check:
Find Text Dialog打开了:
当你回放脚本时,VuGen将会查找文字"Find Flight"并在回放log中表明是否找到相应文字。
在测试中 的一些点上,你想让LoadRunner生成并发送一些和脚本运行时相关的消息,这些消息既会显示在Output栏中的Replay log中,也会显示在Controller的Output窗口中。你可以生成标准输出信息,或生成信息以指出错误所在之处。
对待错误消息的推荐处理方式是检查Failed状态,如果发现了状态为Failed的信息,你让VuGen去生成一个错误消息。更多的详细信息请查看HP LoadRunner Function Reference中的例子。
在教程的本部分,你将让VuGen在应用完成一次完整的预订后插入一条输出信息(Output Message)。
插入一条输出信息:
请注意,插入一条错误消息你要重复相同的过程,除非在Steps Toolbox中选择lr_error_message方法而不是lr_output_message方法。
在这一部分,你将学习运行强化后的脚本并在Replay log中查找text check信息。你将会检查text check的结果以及事务和参数化的详细信息。
默认情况下,image(图片)和text(文本)的检查在回放过程中是禁用的,因为它们需要更多的内存。如果你想要执行图片或文本的检查,你需要在runtime settings中enable他们(使它们可用)。
点击VuGen工具栏上的Replay按钮,VuGen开始运行脚本,在Output栏的Replay log中生成条目信息。
等待脚本完成运行。
点击Find Next,你先后会搜索到符合的信息:
web_reg_find started
Registering web_reg_find was successful.
这其实不是真正的text check,这是在表单提交后进行的查询。
点击Find Next显示下一处包含web_reg_find的地方:
Registered web_reg_find successful for "Text=Find Flight" (count=1)
这行表明text被找到,如果有人改变了网页并移除了Find Flight字样,那么在之后的运行中,Output将指出找不到相应的text。
在之前的课程中,你用VuGen来验证你的虚拟用户脚本。在本节课中,你将在多个虚拟用户负载你的系统下来测评你的系统,你将模拟10个客户端不同程度的同时使用订票系统,并在此负载下观察系统的运行。为了设计并运行这个测试,你需要使用LoadRunner Controller。
场景目标:
在本节课中,你的目标是创建一个场景来模拟十个不同的用户并发的进行登陆,查询飞机票,预订飞机票,检查旅程与注销的行为。
负载测试意味着要在典型的工作场景下测试你的系统。比如,你需要对许多旅游客户同时在网上对同一个票务预订系统进行操作的情况进行测试。
你设计场景是为了模拟真实的情况。为了达到这个目的,你需要能够对你的系统产生负载,并且对负载进行时间上的编排(因为用户不会同时登陆和注销)。你也需要模拟不同用户的不同行为。比如有些用户用火狐浏览器去访问这个系统,而其他的用户则用IE。用户也会通过不同的网络连接到该系统,比如modem,DSL,或cable。你在场景中创建并保存这些设置。
Controller为你提供能够让你真实的模拟你的工作环境而创建与运行测试所需要的所有工具。
要创建一个场景,你首先要打开LoadRunner Controller。
HP LoadRunner Controller打开并显示New Scenario对话框。
有两种Scenario Type:
Manual Scenario:让你能够控制虚拟用户的数量以及他们分别运行脚本的次数,并且能够让你测试你的系统同时能够响应多少用户的操作。
你可以根据你的业务需求分析用百分比模式(Percentage Mode)来对脚本间虚拟用户的总数进行分配。如果你正常安装LoadRunner的话Percentage Mode这个默认是被勾选的。如果它被勾选了,你要把它取消勾选。
Goal-Oriented Scenario:为了验证你的系统是否可以达到一个特殊的目标。例如,你可以基于一个事务的响应时间或一秒钟执行的事务数来验证,那么LoadRunner会为你基于这些目标自动的创建一个场景。
在本次教程中,你只会使用一个脚本,让所有的用户都模拟相同的操作。想要多方面多角度的模仿真实世界中的用户操作,你可以创建不同的虚拟用户群,每一个群都用不同的脚本和不同的用户设置。
你之前在VuGen中录制的脚本包含了你想要测试的业务流程,包括登陆,搜索飞机票,买飞机票,检查飞机票,以及退出网站。你将要把类似的脚本添加到场景中,并配置场景,以实现8个不同的用户同时在这个飞机票预订系统上进行并发操作。在本次的测试中,你还需要额外添加两名虚拟用户。
为了实现这个目的,你需要提供一个和你之前创建的那个脚本类似的脚本。在这里我们建议你使用给出的样本脚本。
Controller的Design栏是你设计你的负载测试的主要接口。Design栏又分为三栏:
按照以下的方法来修改脚本中的细节:
在你添加你的虚拟用户脚本到你的场景后,你将要配置负载发生器(load generator),也就是你对目标系统产生负载的计算机。
定义:一个负载发生器意味着一台能够运行多个虚拟用户并对系统产生负载的计算机。你可以用许多负载发生器,每个发生器主持着多个虚拟用户。
在这一部分,你将学习关于向场景中添加负载发生器,测试负载发生器的连接。
添加负载发生器:
在Controller工具栏中点击Load Generator按钮。负载发生器对话框打开了:
Load Generator对话框允许你查看与配置你场景中定义的负载发生器,上图中显示了一个叫localhost的负载发生器的详细信息。localhost这个负载发生器的状态为"Down"。这表明Controller没有连接到loadhost这个负载发生器。
在本教程中,你将用你的计算机作为复杂发生器。
备注:在一个典型的操作型系统中,你可能会有多个负载发生器,每一个负载发生器都拥有多个虚拟用户。
测试负载发生器的连接:
当你运行一个场景时,Controller会自动连接负载发生器所在的机器(load generator machine)。然而,你可以在尝试运行脚本前测试这些连接。
Controller尝试连接负载发生器所在机器。当连接已经建立,负载发生器的状态就会从"Down"变成"Ready";
当你已经添加了负载发生器,你就可以准备配置负载行为(load behavior)了。
典型的用户基本不可能精确的在同一时间log on以及log off系统。LoadRunner允许用户逐步的log on以及log off系统。它也允许你决定场景的持续时间,以及场景结束的方式。你下面将要进行配置的场景将会相对简单。然而,当你要设计一个更加贴近真实的场景时,你可以定义更多逼真的虚拟用户行为。
你在Controller的Scenario Schedule栏中为manual scenario配置负载行为(load behavior)。Scenario Schedule栏被分成三个部分:Schedule Definition区域,Actions格表,以及Interactive Schedule图表。
你现在将要更改默认的负载设置并配置一个Scenario Schedule(场景时间安排计划):
在Schedule Scenario栏中,确定你选择了Schedule By:Scenario,Run Mode:Real-world schedule。
你可以在Global Schedule格表中或通过操作Interactive Graph图表来对Scenario Schedules设置Start Vusers,Duration,以及Stop Vusers actions。当你在图表中进行定义时,对应在格表中的属性也会有相应的变化与调整。
现在你要进行设置,来让Global Schedule的格表像下面一样显示:
初始化意味着通过运行脚本中的"vuser_init "action来为一个负载测试准备虚拟用户(Vusers)和负载发生器(load generators)。依于你系统的配置,在运行前初始化Vusers会带来更加真实的结果。
也就是说每隔几分钟增加几个Vuser对系统产生负载是在这里设置的。
你需要确定一个持续时间以确保虚拟用户能够在指定的时间段内持续执行Schedule action,持续产生负载。如果你设定一个时间段(Duration),脚本会在该时间段内尽可能多的重复运行来满足需求而忽略掉你在脚本runtime settings中设置的重复次数。
备注:说明会显示在结束点的上面,点击Interactive Schedule Graph工具栏中的隐藏说明按钮来控制它的显示。
当应用运行到一个临界值的时候,逐步关闭虚拟用户有助,检查内存泄露以及系统恢复。
配置好的Global Schedule如下:
现在你已经配置了一个负载计划表,你需要进一步指定用户在测试的时候是如何"行为"的。
当你去模拟一个真实用户的时候,你需要考虑用户的实际"行为"。这里的"行为"指的是:一个用户两个操作步骤之间所需要的停顿时间,对于一个步骤用户所重复的次数,等等。
在这一部分,你会学到更多关于LoadRunner的runtime settings,并且你会使用到Think Time和Logging。
Runtime settings允许你模拟不同种类的用户活动与行为。它们包括:
Run Logic,一个虚拟用户重复一组操作的次数。
Pacing,重复操作前需要等待的时间。
Log,在测试过程中你想要收集的信息等级。你第一次运行场景时是推荐你生成log信息的,以防你第一次运行时会失败,log会提供你有关的调试信息。
Think Time,用户步与步操作之间的停顿时间。由于新老用户对系统的熟悉度不同,步与步之间的停顿时间也不同,老用户肯定比新用户娴熟的多。虚拟用户通过think time可以更加真实的模仿真实用户步与步之间的停顿。
Speed Simulation,用户通过不同的网络连接,包括modem,DSL以及cable。
Browser Emulation,用户通过不同的浏览器来查看应用的性能。
Content Check,能够自动的检查用户定义的错误。
假设你的应用在出错时会发送一个自定义的页面,这个自定义页面包含ASP Error这个字样,你需要查找服务器所返回的所有页面来检查这些字样是否包含在内。
你可以让LoadRunner通过runtime settings中的Content Check在测试过程中自动的完成这个检查的过程,LoadRunner会自动的检查你设定的字样,如果发现则会产生一个错误信息。在场景运行时,你可以确认这些内容检查方面的错误。
现在你已经定义了你的虚拟用户在测试中的行为,已经为建立监控器做好准备。
当你对一个应用产生负载时,你想要实时的查看这个应用的性能以及潜在的瓶颈所存在的地方。你将在负载测试的过程中使用LoadRunner的monitor来监控每一层次结构的性能,包括服务器,系统的组件。LoadRunner提供了许多主要的后台系统组件(包括Web,Application,Database,以及ERP/CRM服务器)的监控器。
例如,你可以根据正在运行的Web Server的类别选择一个Web Server Resources监控器。你可以为相关的监控器买一个证书,比如IIS,并用这个监控器来找出反映在IIS resources中的问题。
在这一章节,你将学会怎样添加以及配置Windows Resources监控器(monitor)。你可以用监控器来确定负载对你CPU(处理器),disk(硬盘)以及memory resources(内存资源)的影响。
Windows Resources图标是显示在图表视图区域四个默认图表中的一个。你将在下一节课中学会如何打开其他的图表。
默认的Windows Resources measurements会在Resource Measurements on <server machine>列表中列举出来。
在Windows Resources对话框中点击"OK"关闭对话框,monitor就被激活了。
当你运行负载测试时,LoadRunner会对系统产生负载。你可以随后用LoadRunner的监控器和图标来观察负载的情况下系统的性能。
Controller的Run栏是场景的管理和监控中心。它包含五个栏:
在这一部分,你将打开场景:
点击Controller底部的Run栏。
注意到Scenario Groups栏中的Down列下有8个虚拟用户,这些虚拟用户是你创建场景(Scenario)时所创建的。
由于场景还没有运行,所有其他的计数器都保持在0,图表视图区域的所有图表都是空的,当你在下一步运行场景时,图表和计数器将会开始显示信息。
点击Start Scenario按钮或选择Scenario>Start来开始运行场景。
如果你是按教程第一次运行的话,Controller会开始场景并将结果文件自动保存到负载发生器的temp文件夹下。
如果你是在重复做测试,你会被建议去覆盖已有的结果文件。
点击No,因为第一次负载测试的结果要用来和之后的测试结果进行比对。之后设置结果保存目录的对话框被打开:
确定一个新的保存结果的文件夹路径,为每一次的测试结果起一个有意义的独特的名字,因为分析图表时你可能会需要把多次场景的运行结果叠加。
你会使用Controller的在线图表来观察监控器(monitors)所收集的性能数据。你通过这些信息来让你的系统远离潜在的危机。
Run栏下的Graph Display栏中显示了如下的默认图表:
在Available Graphs栏中,Web Resources Graphs下,选择Throughput表并把它拖拽到Graph Display栏中。Throughput表的measurements显示在Graph Display栏和Graph Legend栏中。
Throughput(吞吐量)表显示虚拟用户从服务器接收 的数据在任意指定的某一秒中的总量(以bytes衡量)。你可以将此图与Transaction Response Time(事务响应时间)图表进行比较以检查Throughput(吞吐量)是如何影响Transaction(事务)的性能的。
当吞吐量的规模随着时间的进行与虚拟用户数的增加而变大时,这表明带宽是足够用的。当图表随着虚拟用户数量增加而趋于相对平缓时,我们有理由去猜测与推断带宽限制了数据传输量。
当我们模拟用户的时候,你可以实时的查看虚拟用户的操作以确定他们执行的操作是正确的。Controller通过Runtime Viewer让你能够实时的查看虚拟用户的操作。
形象的观察一个虚拟用户的操作:
Status列显示了每个虚拟用户的状态。在上面的例子中,你可以看到四个虚拟用户在运行,四个已经处于down掉状态。Scheduler中的Start Vusers操作让Controller一次释放两个虚拟用户。随着场景的进行,虚拟用户将会2个2个的以30秒为周期被添加到组中。
想要单独看一个虚拟用户在运行测试的过程中的进展,你可以显示一个包含虚拟用户操作文字总结的log文件。
查看虚拟用户操作的文字性总结:
log中包含了与用户操作相对应的信息。比如,在上面的窗口中,Virtual User Script started表明虚拟用户运行的开始时间。滑到底部你会观察到随着虚拟用户操作的进行,相应的新信息也会被添加进来。
为了给系统增加负载,你可以在测试的过程中手动的添加更多的虚拟用户。
两个额外的虚拟用户被添加到travel_agent组中并且在localhost负载发生器上运行。场景状态栏将显示现在有10个虚拟用户正在运行。
你可能会收到LoadRunner Controller无法激活额外的虚拟用户的消息。这是因为你可能在用你的本机来当作负载发生器而且它只有很有限的内存资源。通常来说,用一个专业的机器作为负载发生器就可以避免这种情况的发生。
在你的Scenario Status栏【Run栏中】中,你可以仔细的看到有哪些虚拟用户引起了应用的问题,事务失败数以及错误数偏高表明了你的应用在负载下可能执行的并不好。
Scenario Status栏的头部显示了场景的整体状态:
在重负的情况下,应用开始出现失败的情况,你可能会遇到错误和事务的失败。你的Controller会在Output窗口中显示错误信息。
Output对话框被打开并显示了消息信息文字,包括产生的所有消息数,虚拟用户和负载发生器产生的错误,以及发生错误的脚本。
你可以通过点击相应列的蓝色链接查看关于每条消息、虚拟用户、脚本以及关联的负载发生器的错误信息。
例如:想要知道脚本中哪里出了错,查看点击进入Total Message列。Output窗口将显示你选择的错误代码的所有相关信息,包括时间,重复次数,以及脚本中出错的位置行。
点击Line Number列下的链接,VuGen将被打开,显示了脚本中出错的行。你可以通过这一信息来帮你确认哪些响应时间较慢的事务导致了应用在负载下的失败。
在场景运行的总结处,Scenario Status栏的头部显示了Down这一状态。这说明场景中所有的虚拟用户都已经运行结束。
你可以打开Vsuers对话框来分别查看每个虚拟用户的状态。虚拟用户对话框显示了每个虚拟用户执行的重复次数,成功的重复次数以及经历的时间(Elapsed Time)。
想要知道你的系统是否在负载下依旧运行良好,你要去查看事务的响应时间并决定响应时间是否在可接受的范围内。如果事务的响应时间在场景中增加,你需要去查找瓶颈出在哪里。你会在最后一课中学习更多关于这方面的知识。
一旦一个问题被发现,就可能需要包括开发,DBAs(数据库管理员),网络以及其他方面的系统专家来修复这个问题。在做出适当调整后,我们需要重新进行负载测试来验证该次做出的调整是否满足了所需的要求。你重复这一循环来使得系统的性能不断得到优化。
为了便于你再次运行具有相同配置的场景,选择File>Save或点击Controller工具栏中的Save按钮进行保存。
在之前的课程中你学会了如何设计,控制,运行一个场景。你运行负载测试,就一定希望能够分析运行的结果,以找出需要排查的问题来提高你的系统性能。在你的分析的过程中所生成的图表和报告代表了你场景性能的重要信息。通过这些图表和报告,你可以找到你应用程序中存在的瓶颈,以确定需要做怎样的修整才能提高它的性能。
Analysis session(分析会话)的目的是为了发现你系统性能上存在的缺陷并找到其根源,例如:
在后续的章节中你将会学习如何打开LoadRunner Analysis,并建立与查看能够帮你找到性能问题与根源之所在的图表和报告。
双击桌面上的Analysis图标,LoadRunner Analysis被打开;
为了达到本节课的目的,能够举例分析说明尽可能多样的结果,我们将会运行一个和你在之前的章节中运行的场景相似的场景。但是这一次,你的场景中将包含70个虚拟用户,而不再是10个。你现在将要打开针对于你的测试结果所创建的分析会话。
Analysis包括以下主要栏:
备注:还有一些可以从工具栏中访问的栏,这些栏可以进行拖拽并在屏幕上任意地方进行拖放。
在这一部分,我们将介绍一下Service Level Agreement,即我们所说的SLA。
SLAs是你为你的负载测试场景所定义的特殊目标。Analysis将这些目标和LoadRunner运行时收集与存储的性能相关的数据相比较,然后为目标判断SLA的状态(通过或失败)。
例如,你可以为你脚本中事务的平均事务时间定义一个具体的目标,或临界值。在测试运行结束后,LoadRunner将你的目标和实际录制的平均事务时间相对比。Analysis将显示你定义的每个SLA的状态,通过或失败。例如,如果实际的平均事务时间没有超过你定义的临界值,SLA的状态就将是通过的。
作为你目标定义的一部分,你可以让SLA将负载的标准也考虑在内,换句话说也就是可接受的临界值将会随着负载的等级不同而变化,例如,Running Vusers,Throughput等等。当负载增加,你可以允许一个更高的临界值。
根据你所定义的目标,LoadRunner通过以下几种方法中的一种确定了SLA的状态:
按照时间轴上的时间来定义SLA的状态:Analysis在运行时按固定的时间间隔显示SLA的状态(比如:每隔5s)。
按整个运行过程来定义SLA的状态:Analysis为整个场景的运行显示一个单独的SLA状态。
SLAs可以在场景在Controller中运行前就定义好,也可以之后在Analysis中来定义。
在后续的部分中,你将要用HP Web Tours这个样例来定义一个SLA。假设HP Web Tours的管理员任何时候都想要知道book_flight和search_flight的平均事务时间是否超过了固定的值。为了达到这个目的,你可以选择事务并设置临界值(threshold values)。这些临界值就是平均事务时间在可接受范围内的最大值。
你也将设置三个临界值来将具体的负载标准考虑在内,在这个例子中我们指的就是Running Vusers(运行着的虚拟用户)。换句话说,随着运行的虚拟用户数的增加,临界值也随之升高。
这是因为虽然HP Web Tours的管理员希望平均事务时间越低越好,但是我们不得不承认这一年中的有些时候HP Web Tours站点确实会承担相比于平时更大的负载。例如,在旅游高峰季的时候,会有更多的旅游客户去登陆网站来预订飞机票,检查航班等等。在这种可以理解的高负载情况下,一个稍微长一点的平均事务响应时间将是可以接受的。
你将设定SLA来考虑三个负载场景,轻负载,正常负载和高负载。每一个场景都有它的临界值。
你将在场景运行后在Analysis中定义一个SLA。
备注:推荐在场景运行前,在Controller中定义一个SLA。但是出于本教程的目的,你还没有对之前的章节中运行的场景进行分析,你将会在Analysis中定义SLA。想在Controller中定义一个SLA,在Design栏的Service Level Agreement模块中点击"New"。
定义一个SLA:
注意:当你第一次打开SLA向导,Start页会显示在你面前。如果你不希望下次运行向导的时候再看到这个页面,勾选"Skip this page next time"。
在Select Transactions页面,在Available Transactions列表中选择一个想要监控的事务。
在Set Load Criteria页面,你要让SLA考虑到不同的负载场景。
在上图中,你设置了SLA,对三个潜在的负载场景定义了一个可以接受的平均事务时间:
-Light Load(轻负载):0到19个虚拟用户;
-Average Load(正常负载):20到49个虚拟用户;
-Heavy Load(重负载):多于50个虚拟用户;
在Set Threshold Values页面,你为check_itinerary事务定义了一个可以接受的平均事务时间。
像下图中所示来对临界值进行设定:
在此你仅仅指出了下列平均事务时间是可以接受的:
-Light Load(轻负载):小于等于5s;
-Average Load(正常负载):小于等于10s;
-Heavy Load(重负载):小于等于15s。
先后点击"Next"和"Finish",窗口关闭。
Analysis将会把你的SLA设置应用到Summary Report(总结报告)中,之后的report将会被更新,包含所有相关的SLA信息。
Summary Report栏显示了关于场景运行的总体信息和统计,以及所有相关的SLA信息。例如,根据我们定义的SLAs性能最坏的事务都有哪些,在特定的时间间隔下特定的事务如何执行,以及所有的SLA状态。你要从Session Explorer中打开Summary Report。
在Statistics Summary模块,你可以看到最多有70个虚拟用户在本次测试中运行。其余的统计诸如total/average throughput,total/average hits等信息也会被显示出来。
这五个最坏事务的表单会告诉你:根据你定义的SLA,哪5个事务的性能最坏。
你可以看到在check_itinerary事务执行的时间段内,有66.4%的时间超过了SLA中所定义的临界值。在整个运行过程中超过SLA临界值程度的平均百分比为200.684%。
Scenario Behavior Over Time模块将会显示不同时间内事务的性能,绿色的方块显示的是事务性能在SLA所设定的临界值内的时间段,红色的方块显示的是失败的事务,灰色的方块显示的是没有相关的SLA被定义。
你可以看到对于你定义了SLA的事务,check_itinerary在多数时间段内性能超过了临界值。
Transaction Summary模块列出了每一个事务的性能总结。
我们还可以看到check_itinerary事务失败了28次。
回顾每个事务的时间,90 Percent这一列显示了特定事务90%次运行所用的时间。你可以看到90%的check_itinerary事务在测试中执行耗时65.754秒,是它平均时间(32.826秒)的两倍,这意味着该事务在大多数情况下响应时间较慢。
注意SLA Status这一列显示了和"在SLA中定义的事务"相关的总体状态:check_itinerary的SLA Status为Failed。
你可以在Session Explorer栏中访问可观看的性能图。接下来你要查看并分析Average Transaction Response Time图。
图上的点代表了场景运行中某一时间点事务的平均响应时间。让你的鼠标停留在图中的某点上,一个黄色的方框将出现并显示该点的坐标信息。
注意到check_itinerary事务的平均事务时间波动很大,并且在场景运行到2分56秒时达到了一个75.067秒的峰值。
在一个性能良好的服务器上,事务将会有一个比较平稳的平均时间折线,在图的最下方,你可以看到logon,logoff,book_flight,以及search_flight事务都有着相对更稳定的平均事务时间。
在课程之前的部分你看到了你的服务器性能的不稳定性。现在你将要分析70个Running Vusers(正着运行的虚拟用户)对你的系统所产生的影响。
在Graphs下的Session Explorer中点击Running Vusers。Running Vusers图将显示在图显区域。
你可以看到虚拟用户逐渐的开始运行,之后经历了一个大约三分钟的长度,这段时间内70虚拟用户同时运行,再后来虚拟用户逐渐停止运行。
当你在一个图中进行过滤的时候,图中的数据也会被收缩,收缩到只显示你关心的那部分。其他的部分都将被隐藏掉。
Running Vusers图现在只显示1:30到3:45这段时间在场景中运行着的虚拟用户。所有其他的虚拟用户将被过滤掉。
注意:要清理filter,在图上点击右键,选择Clear Filter/Group By,或者也可以点击Analysis工具栏中的Clear Filter/Group By按钮。
你可以将这两个表拼接在一起以观察一张图中数据对另一张图中的数据所产生的影响,这种做法叫做关联两张图。
例如,你可以将Running Vusers图和Average Transaction Response Time图进行关联来查看大量的虚拟用户对平均事务时间产生的影响。
现在这两张图就合在一起显示了——Running Vusers - Average Transaction Response Time图。
在这张图中你可以看到随着虚拟用户数的增多,check_itinerary事务的平均时间逐渐增加。换句话说,平均响应时间随着负载增加而增加。
在66个虚拟用户的时候,平均响应时间出现了一个急剧的(sudden,sharp)增长。我们说这个测试broke the server(冲破了服务器),在多于66个虚拟用户同时运行时,平均响应时间开始减少。
至今你已经过滤了一张图并关联了两张图。下一次你分析场景的时候,你可能会想要看到相同的图,有相同的过滤与合并条件。你可以将你的merge and filter(合并与过滤)的设置保存到一个模板中,并将它们用于其他的分析会话中。
保存你的模板:
下一次你打开一个新的分析会话并且想要用一个已存的模板时:
至今为止,你已经看到了随着负载的增加,对check_itinerary事务的平均响应时间会产生一个负面的影响。
你可以更深入的研究check_itinerary事务以便发现哪些系统资源负面地影响了它的性能。
这个自动关联工具可以将所有包含可能会影响到check_itinerary事务响应时间的数据的图合并到一起并精确的定位问题发生时还有什么事情正在发生。
看check_itinerary这一事务,特别在过去的1到4分钟这一时间段内。平均响应时间直线上升并在3分钟左右到达峰值。
这个Auto Correlated Graph(自动关联图)将会显示在图显区域。Check_itinerary这一事务被高亮显示。
这个自动关联的图有个默认的名字:Auto Correlated Graph [1].
在Legend栏下,从Graph列为Windows Resources的项中找到Measurement为Pool Nonpaged Bytes和Private Bytes这俩Measurements。
在Measurement和Correlation Match列中,你可以看到这些内存相关的measurements(测量尺度),和check_itinerary这一事务的Correlation Match超过了70%。这意味着这些元素的性能和check_itinerary这一事务的性能在指定的时间段内紧紧相关。
我们可以准确的断定当check_itinerary这一事务的响应时间达到峰值的时候,系统的内存资源将会出现短缺。
除了在分析会话开始的graph树上能看到的图外,你可以显示各种图来收集其他关于场景运行的信息。
Open A New Graph对话框被打开并列举了包含数据的并能够显示的图的种类:
现在打开一些其他的图来对你的场景运行情况有一个更好的了解。
你可以从你的分析会话中通过HTML或微软的Word报告来发布你的发现。报告是用设计者模板创建的,并且包含了解释以及对图和数据的说明。
HTML Reports
HTML报告可以在任何浏览器被打开和查看。
创建一个HTML报告:
点击"Save"后Analysis会自动创建报告并将它显示在你的浏览器中。
你会注意到你的HTML报告的布局和你的分析会话非常相似。你可以点击左侧栏中的链接来查看不同的图。每张图的描述信息将会在页面底部给出。
微软Word报告
你可以将你的分析会话表现在一个微软的word报告中。Word报告比HTML报告更好理解,因为你可以选择让它包含场景的总体信息,测量尺度描述(measurement description)等等。你也可以格式化你的报告,让它包含你公司的名字和标志(logo),以及作者的详细信息。
就像任意一个Word文件一样,这个报告是可以编辑的,所以你可以在你生成的报告中添加更多的评论与发现。
创建一个微软Word报告:
New Report对话框打开了。
默认情况下,建立的报告将会包括一个标题页面,一个包含内容的表结构,图的详细信息以及描述,以及测量尺度描述(measurement description)。你可以选择性的将脚本中的信息加到报告里,让你可以查看业务流程步骤中的缩略图。
你可以通过选择"Include company logo"找到相应的logo文件位置并加入报告中。Logo文件必须是个".bmp"格式的文件。
出于本教材的目的,你要添加一个"Executive Summary"(概要)到Content Items列表中;
"Executive Summary"被加到左侧的Content Items栏中。
选择"Executive Summary",在右侧编辑框中输入下列文字:
- Objectives: The objectives of the test scenario were to....
- Conclusions: The conclusions I reached are as follows:
之后LoadRunner将会自动收集数据并生成一个Microsoft Word文件,并用Microsoft Word打开。
除了你在分析会话时生成的图外,报告还包含了一个客观的结论,以及其他你在创建报告时选择的部分和图表。
在这节课中,你学会了最基本的——定义SLA(Service Level Agreement),分析一个场景的运行,以及将你的测试结果发布到报告中。
你已经知道性能上的问题将会在你研究各种显示服务器瓶颈的图表后被发现,原因可能是由于负载过重。你已经看到了,你可以通过配置图表来显示相关联的数据,指出这些瓶颈的根源之所在。