• 1. LoadRunner培训教程
  • 2. 简介 使用概述 使用VuGen开发脚本 使用Controller创建场景 使用Analysis分析运行结果 检查点 参数化 集合点 关联
  • 3. 一、简介 LoadRunner 是 Mercury Interactive 用来测试应用程序性能的工具   LoadRunner 通过模拟一个多用户并行工作的环境来对应用程序进行负载测试。通过使用最少的硬件资源,这些虚拟用户提供一致的、可重复并可度量的负载,像实际用户一样使用所要测试的应用程序。LoadRunner 深入的报告和图提供了评估应程序性能所需的信息。
  • 4. 现代的系统体系结构很复杂。在提供了空前强大的功能和灵活性的同时,这些系统也难以测试。单用户测试主要侧重于系统组件的功能和用户界面,而应用程序试则侧重于整个系统的性能和可靠性。 例如,一个典型的应用程序测试方案的情况可能是星期一早上有 1000 个用户同时登录到系统上。该系统的响应时间是多少?系统会崩溃吗?要回答这些问题(以及更多的问题),一个完整的应用程序性能测试解决方案必须: 测试一个组合了各种软件应用程序和硬件平台的系统 确定服务器与任何给定应用程序的适应性 在开发出必要的客户端软件之前测试服务器 模拟多个客户端与单个服务器应用程序之间进行交互的环境 在几十、几百甚至几千个潜在用户的负载情况下测试应用程序 一、简介
  • 5. 一、简介LoadRunner解决方案 LoadRunner 通过使用虚拟用户 Vuser 代替实际用户。这些 Vuser 模拟实际用户的行为 - 运行实际的应用程序。 因为一台计算机上可以运行许多 Vuser,因此 LoadRunner 减少了对硬件的要求。 LoadRunner Controller 可以从一个单一的控制点简单有效地控制所有的 Vuser。 LoadRunner 联机监视应用程序的性能。 LoadRunner 在测试过程中会自动记录应用程序的性能。 LoadRunner 可检查出现性能延迟的地方:网络或客户端延迟、CPU 性能、I/O 延迟、数据库锁定和数据库服务器上的其他问题。LoadRunner 将监视网络和服务器资源以帮助改进性能。
  • 6. 一、简介 使用LoadRunner 进行测试的过程: 制定负载测试计划 开发测试脚本 创建运行场景 执行测试 监视场景 分析测试结果
  • 7. LoadRunner 包含很多组件,其中最常用的有 Visual User Generator(以下简称VuGen)、Controller,Analysis。 Mercury 虚拟用户生成器 (VuGen) — 创建脚本VuGen 通过录制应用程序中典型最终用户执行的操作来生成虚拟用户 (Vuser)。VuGen 将这些操作录制到自动虚拟用户脚本中,以便作为负载测试的基础。 Mercury LoadRunner Controller — 设计和运行场景Controller 是用来创建、管理和监控负载测试的中央控制台。使用 Controller 可以运行用来模拟真实用户执行的操作的脚本,并可以通过让多个 Vuser (虚拟用户)同时执行这些操作来在系统中创建负载。 Mercury Analysis — 分析场景 Mercury Analysis 提供包含深入的性能分析信息的图和报告。使用这些图和 报告,可以标识和确定应用程序中的瓶颈,并确定需要对系统进行哪些更改来提高系统性能。 二、使用概述
  • 8. 三、使用VuGen开发脚本使用VuGen开发脚本的步骤: 录制测试脚本 完善测试脚本 配置Run-Time Settings项 单机运行测试脚本 创建运行场景
  • 9. 三、使用VuGen开发脚本 点击开始->Mercury LoadRunner->Applications->Virtual User Generator或开始->Mercury LoadRunner-> Mercury LoadRunner->Load Testing->Create/Edit Scripts来启动VuGen。 启动VuGen后,可以选择新建单协议脚本,多协议脚本,打开脚本等;如果不想下次再显示该页,在Don’t show the startup dialog in the future前打勾即可。
  • 10. 三、使用VuGen开发脚本新建一个用户脚本,选择系统通讯的 协议,这里我们需要测试的是Web 应用,所以我们需要选择Web(HTTP /HTML)协议,确定后,进入主窗体
  • 11.  设置录制选项 Application type中选择应用程序类型Internet Application URL中输入要测试的网址 Working directory中设置工作目录 Record into Action中选择要把录制的脚本放到哪一个部分,见意选择 Action 三、使用VuGen开发脚本
  • 12. 三、使用VuGen开发脚本VuGen 中的脚本分为三部分:vuser_init、vuser_end 和Action。其中vuser_init 和vuser_end 都只能存在一个,不能再分割,而Action 还可以分成无数多个部分(通过点击New 按钮,新建ActionXXX) “Record the application startup”默认情况下是选中的,说明应用程序一旦启动,VuGen 就会开始录制脚本;如果没有选中,应用程序启动后,VuGen 出现右边的对话框,并且暂时不会开始录制脚本,用户操作应用程序到需要录制的地方,按下“Record”按钮,VuGen 才开始录制。
  • 13. 三、使用VuGen开发脚本录制工具条介绍 录制过程中,在屏幕上会有一个工具条出现。下面我们简单介绍一下各个按钮的功能: 录制完成后,按下“结束录制”按钮,VuGen 自动生成用户脚本,退出录制过程。
  • 14. 三、使用VuGen开发脚本 查看脚本   录制结束后,可以通过两种方式来查看脚本:脚本视图及树视图 脚本视图 脚本视图是一种基于文本的视图,列出了作为 API 函数的 Vuser 操作。要在脚本视图中查看脚本,请单击工具栏上的“View Script”按钮或者选择“View” > “View Script”。 在脚本视图中, VuGen 将在编辑器中显示带有彩色编码的函数及其变量值的脚本。 树视图 树视图是基于图标的视图,列出了作为步骤的 Vuser 操作.要在树视图中查看脚本,请单击工具栏上的“View Tree”按钮或者选择“View” > “View Tree”。 对于录制期间所执行的每一步骤, VuGen 都在测试树中生成一个图标和一个标题。在树视图中,将看到作为脚本步骤的用户操作。大多数步骤都附带相应的录制快照。
  • 15. 三、使用VuGen开发脚本 事务 当录制完一个基本的用户脚本后,在正式使用前我们还需要完善测试脚本,增强脚本的灵活性。例如,可以在脚本中插入名为内容检查的步骤,以验证某些特定内容是否显示在返回页上。可以修改脚本来模拟多用户行为,也可以用事务来 度量特定的业务流程。 事务(Transaction):为了衡量服务器的性能,我们需要定义事务。比如:我们在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,我们把这个操作定义为一个事务,这样在运行测试脚本时,LoadRunner 运行到该事务的开始点时,就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间会在结果中显示。插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner 运行在脚本中插入不限数量的事务。
  • 16. 三、使用VuGen开发脚本插入事务的方法 在需要定义事务的操作前面事务的“开始点” ,通过菜单或者工具栏插入。 输入事务的名称。注意:事务的名称最好要有意义,能够清楚的说明该事务完成的动作插入事务的开始点后,在需要定义事务的操作后面插入事务的“结束点”。同样可以通过菜单或者工具栏插入。默认情况下,事务的名称列出最近的一个事务名称。一 般情况下,事务名称不用修改。事务的状态默认情况下 是LR_AUTO。一般情况下,我们也不需要修改。
  • 17. 三、使用VuGen开发脚本运行脚本可以通过菜单或者工具栏来操作:   执行“运行”命令后,VuGen 先编译脚本,检查是否有语法等错误。如果有错误,Vuen将会提示错误。双击错误提示,VuGen 能够定位到出现错误的那一行。如果编译通过,就会开始运行。然后会出现运行结果。
  • 18. 四、使用Controller创建场景 Loadrunner的场景能够描述在测试活动中发生的各种事件。一个场景包括一个运行虚拟用户活动的Load Generator 机器列表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。 点击开始->Mercury LoadRunner->Applications->Controller或开始->Mercury LoadRunner-> Mercury LoadRunner->Load Testing->Run Load Tests来启动Controller程序。在新建场景的窗口,选择一种场景类型: Manual Scenario:完全手动的设置场景(1) Manual Scenario with Percentage Mode(1.1):   该项只有在“Manual Scenario”选中的情况下才能选择。选择该项后,在场景中我们需要定义要使用的虚拟用户的总数,Load Generator machine 机器集,然后我们为每一个脚本分配要运行的虚拟用户的百分比。 Goal—Oriented Scenario(2): 在测试计划中,一般都包括性能测试要达到的目标。选择该项后,LoadRunner 基于这个目标,自动为你创建一个场景。在场景中,我们只要定义好我们的目标即可。
  • 19. 四、使用Controller创建场景 场景计划: 在“场景计划”分中,您可以设置负载行为以精确地描绘用户行为。您还可以确定将负载应用于应用程序的速率、负载测试持续时间以及如何停止负载。 场景组:您可以在“场景组”部分中配置 Vuser 组。在此部分中,您可以创建代表系统典型用户的各种组。您可以定义这些典型用户运行的操作、运行的 Vuser数以及 Vuser 运行时所用的计算机。 Controller 窗口的“设计”选项卡包含两个主要部分:场景计划和场景组
  • 20. 四、使用Controller创建场景Controller 窗口中的“运行”选项卡是用来管理和监控测试的控制中心。“运行”视图包含五个主要部分:场景组,场景状态,可用图树,图查看区域和图例。场景组:位于左上窗格中,可以查看场景组中的 Vuser 的状态。使用该窗格右侧的按钮可以启动、停止和重置场景,查看单个 Vuser 的状态,并且可以手动添加更多的 Vuser,从而增加场景运行期间应用程序上的负载。 场景状态:位于右上窗格中,可以查看负载测试的概要,其中包括正在运行的 Vuser 数以及每个 Vuser 操作的状态。 可用图树:位于中部左侧窗格中,可以查看 LoadRunner 图列表。要打开图,请在该树中选择一个图,然后将其拖动到图查看区域中。 图查看区域:位于中部右侧窗格中,可以自定义显示以查看一至八个图(“View” > “View Graphs”)。 图例:位于底部窗格中,可以查看选定图中的数据。
  • 21. 四、使用Controller创建场景 打开 Controller 运行视图。单击“Start Scenario”按钮 或选择“Scenario” -> “Strart”开始运行测试。如果您第一次运行该场景, Controller 将启动场景。结果文件自动保存到负载生成器的临时目录中。如果要重复此测试,将提示您覆盖现有结果文件。单击“否”,指定新的结果目录。对每个结果集输入唯一且有意义的名称,这是因为在分析图时,可能希望重叠几个场景运行的结果。
  • 22. 在 Analysis 会话过程中生成的 图和报告提供了有关系统性能的重 要信息。使用这些图和报告,可以 轻松地标识和确定应用程序中的瓶 颈以及提高系统性能所需的改进。 从AnalySis中可以得到用户终端的 事务响应时间,事务的平均响应时 间,网络和服务器的响应时间等。 从开始->Mercury LoadRun ner->Applications->Analysis 或开始->Mercury LoadRunner- >Mercury LoadRunner->Load Testing->Analyze Load Tests 来启动Analysis程序。 五、使用Analysis分析结果
  • 23. 六、检查点 在进行压力测试时,为了检查Web 服务器返回的网页是否正确,VuGen 允许我们插入Text/Imag 检查点,这些检查点验证网页上是否存在指定的Text 或者Imag,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。以下是插入检查点的步骤及检查点在脚本中的函数表示。1234
  • 24. 七、参数化   如果用户在录制脚本过程中,填写提交了一些数据,比如要增加数据库记录。这些操作都被记录到了脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这样不符合实际的运行情况,而且有可能引起冲突。为了更加真实的模拟实际环境,需要各种各样的输入。参数化输入是一种不错的方法。 参数化包含以下两项任务: 在脚本中用参数取代常量值 设置参数的属性以及数据源 用参数表示用户的脚本有两个优点: 可以使脚本的长度变短 可以使用不同的数值来测试脚本
  • 25. 七、参数化 此例中将参数化高亮显示的值9971239,在参数名中输入Spec_id,参数类型选择File, 点击Properties进入参数属性页面设置参数所在文件的文件名及路径。
  • 26. 八、集合点 集合点概念:     集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统够承受1000人同时提交数据,在LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,从而达到测试计划中的需求。 注意:集合点经常和事务结合起来使用。集合点只能插入到Action 部分,vuser_init和vuser_end 中不能插入集合点。 插入集合点方法: 1 在需要插入集合点的前面,选 择菜单Insert->Rendezvous。 2 在弹出的Rendzvous对话框中, 输入要插入的集合点的名称, 点击OK后,集合点插入完毕。 集合点在脚本中的代码: lr_rendezvous(“名称”)
  • 27. 八、集合点 如果在脚本中设置了集合点,还需要在Controller 中设置集合点策略,从菜单中调出集合点策略设置 窗口,根据需求设置集合点策略。
  • 28. 九、关联关联概念:    关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。 哪些错误代表着应该做关联?   假如脚本需要关联在还没做之前是不会执行通过的,也就是说会有错误讯息发生;或者是即使脚本通过了,实际上所要进行的功能操作没有实现。不过,很不幸地,并没有任何特定的错误讯息是和关联有关系的。会出现什么错误讯息,与系统实做的错误处理机制有关。如何找出要关联数据 简单的说,每一次执行时都会变动的值,就有可能需要做关联。 VuGen提供二种方式帮助您找出需要做关联的值:   自动关联   手动关联
  • 29. 九、关联 VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并且自动使用关联函数建立关联 自动关联提供的二种机制: Rules Correlation:在录制过程中VuGen会根据订定的规则,实时自动找出要关联的值。 规则来源有两种:  1 内建(Built-in Correlation): VuGen已经针对常用的一些应用系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySA P、NetD ynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,内建关联规则,这些应用系统可能会有一种以上的关联 规则。可以在Tools->Recording Options->Internet Protocol->Correlation中启用关联规则,则当录制这些应用系 统的脚本时,VuGen会在脚本中自动建立关联。 2 使用者自订(User-defined Rules Correlation): 除了内建的关联规则之外,使用者也可以自订关联规则。可以在Tools->Recording Options->Inter net Protoc ol->Correlation建立新的关联规则。 Correlation Studio:有别于Rules Correlation,Correlation Studio则是在执行脚本后才会建   立关联,也就是说当录制完脚本后,脚本至少须被执行过一次,Correlation Studio才会作用。Co   rrelation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的   数据,并建立关联。
  • 30. 九、关联使用Rule Correlation的步骤: 1. 启用auto-correlation 点选VuGen的Tools->Recording Options->Internet Protocol>Correlation,勾选Enable correlation during reco rding,以启用自动关联。 假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应的应用系统。 或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。 设定当VuGen侦测到符合关联规则的数据时,要如何处理: Issue a pop-up message and let me decide online:跳出一个讯息对话窗口,询问您是否要建立关联。 Perform correlation in sceipt:直接自动建立关联 2. 录制脚本 开始录制脚本,在录制过程中,当VuGen侦测到符合关联规则的数据时,会依照设定建立关联.。
  • 31. 九、关联  当录制的应用系统不属于VuGen预设支持的应用系统时,Rule Correlation可能既无法发挥作用,这时 可以利用Correlation Studio来做关联。Correlation Studio会尝试找出录制时与执行时,服务器响应内 容的差异部分,藉以找出需要关联的数据,并建立关联 。使用Correlation Studio的步骤: 录制脚本并执行,执行完毕后,VuGen会跳出下面的Scan Action   for Correlation窗口,询问您是否要扫描脚本并建立关联,按下 Yes按钮。 扫描完后,可以在脚本下方的Correlation Results中看到扫描 的结果。 检查一下扫瞄的结果后,选择要做关联的数据,然后按下Correl ate按钮,一笔一笔做,或是按下Correlate All让VuGen一次就 对所有的数据建立关联。 注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用Correlate All。
  • 32. 九、关联 有可能有些需要做关联的动态数据,连Correlation Studio都无法侦测出来,这时您就需要自行做手动关了 。手动关联的执行过程大致如下: 使用相同的业务流程与数据,录制二份脚本 使用WinDiff工具协助找出需要关联的数据 使用web_reg_save_param函数手动建立关联 将脚本中有用到关联的数据,以参数取代 1. 使用相同的业务流程与数据,录制二份脚本 先录制一份脚本并存档。 依照相同的操作步骤与数据录制第二份脚本并存盘。注意,所有的步骤和输入的数据一定都要一样,这样才能找出由服务器端产生的动态数据。 有时候会遇到真的无法使用相同的输入数据,那也要记住使用的输入数据,到时才能判断是输入的数据,还是变动的数据。
  • 33. 九、关联2.使用WinDiff工具协助找出需要关联的数据 在第二份脚本中,点选VuGen的Tools->Compare with Vuser…,并选择第一份脚本。 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选Options>View>Show Inline Differences)。 逐一检视二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。选取差异的脚本,然后复制。 在复制时,有时并不需要取整行脚本,可能只会选取脚本中的一部分。 注意:请忽略lr_thik_time的差异部份,因为lr_thik_time是用来模拟每个步骤之间使用者思考延迟的时间。 接着要在Recording Log(单一protocol)或是Generation Log(多重protocol)中找这个值。将鼠标光标点到Generation Log的第一行开头,按下Ctrl+F,开启Find窗口,贴上刚刚复制的脚本,找出在Generation Log第一次出现的位置。
  • 34. 九、关联3.使用web_reg_save_param函数手动建立关联   在找到是由服务器所产生的动态数据之后,接下来要做的就是找出适当的位置,使用web_reg_save_param函数,将 这个动态数据撷取到某个参数中。 要在哪里使用web_reg_save_param函数? 在之前的步骤,我们已经在Execution Log找到可能需要关联的动态数据。在Execution Log中选取动态数据前的文字然后复制。     不过在这之前我们要先找出使用web_reg_save_param函数的正确位置,所以我们要再重新执行一遍脚本,而且这次要开启所有的Log。 在VuGen中点选Vuser->Run-Time Settings。 点选General->Log。 勾选Enable logging、Always sends messages、Extended log,以及Extended log下的所有选项。 按下OK就可以执行脚本了。    执行完脚本之后,在Execution Log中搜寻刚刚复制的字符串。找到字符串后,在字符串前面会有Action.c(135),这个135就是到时候要插入web_reg_save_param函数的位置,也就是要插入到脚本的第135行。在脚本的第135行前插入一行空白行,然后输入web_reg_save_param(“attachment_number”, “attachment_number” 就是到时要使用的参数名称。 注意:到这里整个web_reg_save_param函数还没完成。
  • 35. 九、关联3.使用web_reg_save_param函数手动建立关联找出web_reg_save_param中要用到的边界 web_reg_save_param函数主要是透过动态数据的前面和后面的固定字符串,来辨识要撷取的动态数据的,所以我们还需要找出动态数据的边界字符串。 找出左边界字符串   1 回到Generation Log中,选取动态数据前的字符串并且复制它。建议尽量不要包含到特殊字符。   2 在这里我们选取[11563658;value:]字符串。选好之后,还要再确认一次这段字符串真的是可以唯一识别的,所      以我们在Generation Log中透过Ctrl+F的搜寻,找找看这段字符串是否可以找到要找的动态数据。假如找不      到,web_reg_save_param函数还有个ORD参数可以使用,ORD参数可以设定出现在第几次的字符串才是要找的字      符串。   3 将这个边界字符串加到未完成的web_reg_save_param函数中:web_reg_save_param(“attachment_number”, “LB=11563658;value:”, 找出右边界字符串    接下来要找出动态数据的右边界字符串,这个字符串就比较好找了,从动态数据的最后一个字符开始,通常就是我们要找的右边界字符串了。    以这个例子来看,就是「;sRel:211」,所以再把右边界字符串加入,web_reg_save_param函数中,这时web_reg_save_param函数已经快完成了。最后再加上「LAST);」就完成整个web_reg_save_param函数了。    web_reg_save_param(“attachment_number”, “LB=11563658;value:”,“RB=;sRel:211”, LAST);
  • 36. 九、关联3.使用web_reg_save_param函数手动建立关联将脚本中有用到关联的数据,以参数取代 当使用web_reg_save_param建立参数后,接下来就是用“attachment_number”参数去取代脚本中写死的(hard-coded)代码。 到这里已经完成了一个关联了,接下来就是执行脚本,是否能成功运行,假如还是有问题,就要检查看看是否还需要再做另一个关联。
  • 37. 谢谢!