LoadRunner Controller 实战images.china-pub.com/ebook3770001-3775000/3770901/ch03.pdf第3章...

Preview:

Citation preview

第3章 LoadRunner Controller实战   53

第 3 章

LoadRunner Controller 实战

结束了 LoadRunner 学习的第一个里程碑,小白马不停蹄地开始了第二个里程碑的学习,

那就是 LoadRunner 的 Controller 组件。

3.1 Controller 介绍

Controller 可谓是 LoadRunner 的“心脏”,承担着多种工作任务。最常见的就是场景的

设计、压力机的部署、脚本调度、监控以及数据收集。

Controller 的工作原理是,通过场景设计来模拟用户的真实操作并调用 VuGen 中的脚本,

再通过设置的压力机产生压力。在场景运行过程中,Controller 可以收集虚拟用户执行情况、

事务响应时间、吞吐量、各个服务器资源以及各个应用资源的信息并实时显示,帮助测试人

员分析。

Controller 的启动有两种方式:可以从开始菜单下的 HP LoadRunner → Applications → Controller 启动,也可以从 VuGen 中选择 Tools → Create Controller Scenario 命令后创建。

接下来就和小白一起看看这个神秘的“心脏”吧!

3.2 场景设计实战

Controller 可以完成多种场景设计,如快增长、慢增长、组模式等,基本可以满足日常

的性能测试场景需求。启动 Controller 后的新建场景界面如图 3-1 所示。

Chapter 3

54   第一篇 初入职场

图 3-1 新建场景

下面解释图 3-1 中的主要选项。

1)Select Scenario Type :选择场景类型。根据需要,可以选择手工场景和基于目标的场

景。各子选项含义如下。

Manual Scenario :手工场景。就是手工指定场景如何运行,比较灵活,可以完成绝大

多数的场景需求。此处还有一个选项,是否使用百分比模式,一般情况下不勾选。

Goal-Oriented Scenario :基于目标的场景模式。就是要设定一个目标,然后达到这

个目标。例如,设定 Hits per Second 100,接着设定虚拟用户数的范围(这个是和

Manual Scenario 不同的地方),最后根据设置的时间运行,如果没有达到既定目标,

则可以选择停止运行或继续运行,如图 3-2 所示。

图 3-2 基于目标的场景

第3章 LoadRunner Controller实战   55

2)Available Scripts :当前可以使用的脚本。如果没有想要的脚本,可以单击 Browse 按

钮选择。

3)Scripts in Scenario :当选中要加入场景的脚本后,单击 Add 按钮,即可把脚本加入

场景并在该列中显示。

此处小白选择了最常用的手工场景,并将之前练习的脚本加入场景,详细学习

Controller。

3.2.1 集合点实战

下面将从什么是集合点、如何启用集合点和集合点的应用策略方面进行讲解。

1. 理解集合点

集合点是什么呢?仍以前面的跑步为例。所谓集合点,就是 10 名运动员从起点出发,

要跑 3 圈,规定再次经过起点时要等待所有运动员全部到达后,才能进行第 2 圈的赛跑。集

合点就是这个道理,它的意义在于最大程度地模拟并发。

注意

集合点并不能模拟真正意义上的并发,因为即使是通过集合点的虚拟用户,但由于网络等多种

因素的影响并不能同一时刻到达服务器,仍有先后差异。

2. 启用集合点

在 LoadRunner 中启用集合点需要在编写脚本时加入,集

合点函数为 lr_rendezvous(" 集合点名称 ");。只需把集合点

函数放到脚本的某个事务或操作之前即可。只有完成这步

操作后,才能在 Controller 中启用集合点,方法为依次单击

Insert → Rendezvous 菜单项,如图 3-3 所示。

图 3-3 集合点

提示

集合点不要添加到事务中,要放到事务外,否则事务的统计会

把集合点的等待时间也统计进去。

3. 集合点策略

经过上面的操作就可以进入集合点策略设置界面,如图 3-4 所示。

图 3-4 中主要选项含义如下。

1)Rendezvous:集合点的列表,可通过下方的 Disable Rendezvous 按钮来启用或关闭。

2)Scripts:当前脚本的名称。

3)Vuser:当前设置的并发用户数,可通过下方的 Disable VUser 按钮来启用或关闭虚拟

用户。

56   第一篇 初入职场

4)Policy(集合点策略):单击后进入策略设置对话框,如图 3-5 所示。

图 3-4 集合点 图 3-5 集合点策略

图 3-5 中显示了常见的 3 种策略,其含义如下。

当所有用户的 X% 到达集合点时释放。

当所有正在运行的用户的 X% 到达集合点时释放。

当 X 个用户达到集合点时释放。

超时设置。表示等待用户超时的设定,如果在 X 秒内还没有满足要求的用户到达,

则释放集合点。

到这里小白并没有停止思考,而是想到了以跑步为例再次理解集合点的 3 种策略。假设

有 100 个运动员跑步,设置的集合点策略百分比均为 100%,但这 100 个运动员并不是一开

始就共同跑的,而是每隔 1min 加入 10 个运动员,即 10min 后才有 100 个运动员在跑步。这

里 100 就是所有运动员数,而不同时间正在跑的运动员数量是不同的。对应到图 3-5 中,从

上至下的策略(policy)作用如下。

第一个策略:是指当全部运动员都运行到了集合点函数时才释放。

第二个策略:是指当前时间如果只有 10 个运动员在跑步,那么只要这 10 个运动员都运

行到了集合点函数就释放。

第三个策略:当到达集合点的运动员数达到设置的数量后就释放。

这下小白可算真正理解了集合点的含义以及策略的精髓了。

3.2.2 IP 欺骗实战

下面将从以下几个方面来讲解 IP 欺骗的实践。

1. 理解 IP 欺骗

看到这个搞笑的命名小白心里一乐,这功能看着貌似很好玩。IP 欺骗就是使不同用户有

第3章 LoadRunner Controller实战   57

不同 IP 地址,这样最真实地模拟了现实场景。但有一点必须明白,对于一般系统而言,是否

使用 IP 欺骗并不会影响性能测试。只有在特殊的要求下才会使用,如下面两种情况。

1)某系统限制了同一个 IP 用户在短时间内对系统进行恶意或大量的请求访问。

2)负载均衡策略是根据 IP 规则分配的。

2. 启用 IP 欺骗

想要启用 IP 欺骗需要做一项前置工作,就是本地的 IP 地址不能设置为“自动获取”,必

须指定一个静态 IP 地址,否则会弹出如图 3-6 所示的提示。

静态 IP 地址指定好之后就可以设置 IP 欺骗了,步骤如下。

1)依次单击 HP LoadRunner → Tools → IP Wizard 进入设置对话框,如图 3-7 所示。

图 3-6 IP 欺骗设置提示 图 3-7 设置 IP 欺骗(1)

2)选择 Create new setting,单击“下一步”按钮,出现如图 3-8 所示界面。

3)输入服务器的 IP 地址,或者留空也可以,单击“下一步”按钮,出现如图 3-9 所示

界面。

图 3-8 设置 IP 欺骗(2) 图 3-9 设置 IP 欺骗(3)

4)单击 Add 按钮,弹出添加 IP 的对话框,如图 3-10 所示。

5)修改 From IP 为 192.168.3.9,Number to add 为 5,单击 OK 按钮,出现如图 3-11 所

示界面。

58   第一篇 初入职场

图 3-10 设置 IP 欺骗(4) 图 3-11 设置 IP 欺骗(5)

6)单击“完成”按钮,出现如图 3-12 所示

界面。

图 3-12 设置 IP 欺骗(6)

7)单击“ Save as”按钮可以将本次增加

的 IP 地址保存成 .ips 文件,下次再使用时就

可以直接选择此文件了。单击 OK 按钮后完成

设置。

8)进入 Controller 中,选择 Scenario → Enable IP Spoofer,完成 IP 欺骗设置的全部操作。

如果想验证结果,那么可以在 VuGen 中编

写代码(参见代码清单 3-1),然后运行即可。

代码清单 3-1 获得 IP 地址

Action(){char *ip;ip = lr_get_vuser_ip();if( ip )lr_output_message("IP 地址为 %s" , ip);elselr_output_message("IP 欺骗不可用 ");return 0;}

3. 释放 IP 欺骗

IP 欺骗使用完成后千万别忘了释放,做事情一定要有头有尾,这样才完整。释放的操作

十分简单,重复图 3-9 ~图 3-12 所示的操作,并在图 3-9 中,单击 Remove 按钮,移除后再

单击“完成”按钮即可。最后别忘了重启计算机,这样就完成了 IP 的释放。

第3章 LoadRunner Controller实战   59

3.2.3 添加 Windows 和 Linux 压力机实战

既然 Controller 是 LoadRunner 的“心脏”,那么压力产生也必然是它发起的,通过压力

机来对被测系统产生压力。一般压力机分为 Windows 和 Linux。当并发量比较大时建议使用

Linux。

1. 添加 Windows 压力机

添加 Windows 压力机的步骤相对来说简单些,具体如下。

1)保证要添加的压力机上安装了 LoadRunner Agent,并启用(状态栏中会有一个小

卫星)。

2)添加的压力机与 Controller 所在机器要在同一个网段,建议把防火墙关闭。

3)本地系统的 RPC 服务要开启(在“控制面板”→“管理工具”→“服务”中开启,

建议改为自启动)。

4)之后从 Controller 所在的机器上登录到压力机,验证是否可以连通。单击 Windows系统的“开始”菜单,选择“运行”,在弹出的对话框中输入“\\ 机器名”,如果不报错则成功。

注意 建议关闭360等各类管理软件、杀毒软件,同时要拥有足够的权限。

5)进入 Controller,依次单击 Scenario → Load Generators 菜单项,出现如图 3-13 所示

界面,默认会有一台压力机,即本机。

6)如果想添加其他压力机,单击 Add 按钮,出现如图 3-14 所示界面。

图 3-13 压力机 图 3-14 添加压力机

图 3-14 中各选项的含义如下。

Name:这里很多人都会输入机器的名称,其实应该输入压力机的 IP 地址。

Platform:默认为 Windows 即可。

7)单击 OK 按钮,完成压力机的添加,然后单击图 3-13 右侧的 Connect 按钮,可以测

试能否连通,如果连通,则会显示 Ready 状态。

8)最后可以把压力机分到对应的脚本上,如图 3-15 所示。

60   第一篇 初入职场

图 3-15 分配压力机

2. 添加 Linux 压力机

添加 Linux 压力机稍微复杂些,需要有一定的 Linux 基础,还好小白平时也经常使用

Linux,所以心里松了一口气。添加步骤如下。

1)到 HP 官网下载 HP_LoadGenerator,解压到本地后上传到 Linux 中,文件名为

Linux。2)在控制台输入 chmod -R +x Linux/* 命令,用于修改文件的权限。

3)在控制台输入 cd Linux 命令,进入 Linux 目录。

4)在控制台输入 ./installer.sh 命令,进行安装,按照提示操作即可。

5)在控制台输入 useradd -g 0 -s /bin/bash besttest 命令,用于新增一个名为 besttest 的用户。

6)在控制台输入 vi /root/.bashrc 命令,用于编辑 .bashrc 文件,添加如下内容。

export PRODUCT_DIR=/opt/HP/HP_LoadGenerator export M_LROOT=$PRODUCT_DIR export LD_LIBRARY_PATH=${M_LROOT}/bin export PATH=${M_LROOT}/bin:$PATH

7)在控制台输入 su - besttest 命令,切换为 besttest 用户。

8)在控制台输入 cd /opt/HP/HP_LoadGenerator/bin/ 命令,用于进入安装后的默认目

录中。

9)在控制台输入 ./verify_generator命令,用于验证配置是否正确。

10)在控制台输入 m_daemon_setup start 命令,用于启动服务,如果成功,则

会显示类似下面的提示。

m_agent_daemon ( 22914 )

11) 回 到 Controller 里 重 复 添 加

Windows 压力机的步骤即可。这里需要注

意的是,有一点和添加 Windows 压力机

不同,如图 3-16 所示,要勾选 Don’t use RSH 复选框。

图 3-16 添加 Linux 压力机

第3章 LoadRunner Controller实战   61

3.2.4 场景设计实战

场景设计其实就是设置场景的加压方式、运行时间、减压方式等。场景设计并没有好坏

之分,因为目的不同,场景就有可能不同,小白学习了如下几种常见的场景设计模型。

1. 快增长

快增长的意思就是压力在瞬间启动并达到最大。设置方法为在 Controller 中的 Schedule区域分别双击 Start Vusers 和 Stop Vusers,然后选择 Simultaneously,单击 OK 按钮即可,如

图 3-17 所示。

图 3-17 快增长

这样的设置在场景中运行,会瞬间启动 20 个虚拟用户,持续 5min 后,瞬间停止这 20个虚拟用户。

2. 慢增长

慢增长的意思就是压力按照设定的规则慢慢增加,当到达设置点后持续运行一段时间,

然后慢慢减压。设置方法同快增长,如图 3-18 所示。

图 3-18 慢增长

这样的设置在场景中运行,会以每分钟增加 5 个虚拟用户的策略增长,当达到 20 个虚

拟用户后,持续运行 5min,然后再以每分钟停止 5 个虚拟用户的策略结束。

3. 指定运行次数

这里的运行次数是以虚拟用户数来判断的。例如,如果虚拟用户数是 10,选择此种场景

62   第一篇 初入职场

策略,则场景运行完 10 个虚拟用户数后自动结束。双击 Duration 并选中 Run until completion即可,如图 3-19 所示。

图 3-19 指定运行次数

提示

如果对测试数据没有特别的要求,完全可以利用“指定运行次数”这样的场景策略来制造测试

数据。

4. 组模式

组模式也比较容易理解,仍然以 BestTest 论坛为例。一些水军经常会注册登录论坛,然

后发一些垃圾帖子,管理员要删除这些帖子。对于这样有先后顺序的场景选用组模式。

组模式中的策略有 3 种,分别如下。

1)在场景开始时启动执行。

2)在场景执行一段时间后开始运行。

3)当某个脚本完成后再运行选定的脚本。

3.3 场景监控实战

场景的设计学完后,接下来学习场景的监控,这是很重要的,在学习如下内容的同时要

回顾 1.3 节中的知识。

3.3.1 监控信息概览与自定义脚本

上面学习的都是 Controller 的 Desgin 界面中的内容,下面学习 Run 界面中的内容,这里

主要完成场景的实时监控。

1. 虚拟用户数的监控与增加

首先观察左侧的 Groups 区域,如图 3-20 所示。

此处显示的是虚拟用户的状态,可显示出虚拟用户从准备、初始化、运行到停止的所有

状态过程,同时能统计出成功、失败以及集合点处的虚拟用户数。

第3章 LoadRunner Controller实战   63

图 3-20 Groups 区域

这时候小白脑袋中出现一个疑问:如果我想在运行过程中增加虚拟用户该怎么操作呢?

其实很简单,单击中间区域中的 Vusers 按钮,弹出 Vusers 对话框,如图 3-21 所示。

图 3-21 Vusers 对话框

单击 AddVuser 按钮,弹出 Add Vusers 对话框,如图 3-22 所示。

修改图 3-22 中的 Quantity to add 值后单击 OK 按钮即可完成。需要注意的是,到此步骤

虽然完成了添加,但并没有运行新加的虚拟用户,如果想运行新加的虚拟用户,则需要返回 Run 标签的 Groups 区域进行操作,如图 3-23 所示。可单击 Run Vusers 按钮,一次性运行所

有新添加的虚拟用户,也可以单击 Run One Vuser 按钮来一个个运行新添加的虚拟用户。

图 3-22 Add Vusers 对话框 图 3-23 运行新加的虚拟用户

2. 场景运行状态监控

右侧区域是场景运行状态的概览,可以看到当前虚拟用户数、执行时间、最后 60s 的点

击率、通过事务数、失败事务数以及错误信息,如图 3-24 所示。

其中需要重点关注的是事务数以及错误信息,在这里可以清晰地看到事务数的变化,方

64   第一篇 初入职场

便快速判断。如果存在多个事务,则可以单击后面的放大镜按钮,查看到详细的列表信息,

如图 3-25 所示。如果场景中有错误出现,也可以通过 Errors 查看具体的错误信息,这也是后

续分析时重要的参考数据。

图 3-24 场景运行状态概览 图 3-25 事务详细列表

3. 利用脚本自定义显示信息

可以通过编写脚本来自定义监控信息,此处以监控虚拟用户状态信息为例,示例代码清

单 3-2 所示。

代码清单 3-2 自定义监控

static int iteration;Action(){ // 在 Vugen 中显示参数值,参数化 param lr_output_message(" 当前参数 :%s",lr_eval_string("{param}")); lr_think_time(10); // 在 Controller 监视窗口中显示当前参数值和当前值的迭代次数 lr_vuser_status_message(" 当前参数 :%s, 迭代次数:%d",lr_eval_string("{param}"),++iteration); return 0;}

代码清单 3-2 在 Controller 中的运行效果如图 3-26 所示。

图 3-26 自定义监控

第3章 LoadRunner Controller实战   65

3.3.2 Windows 和 Linux 的监控以及指标讲解

下方区域是指标监控区,一般都会在此处观察监控指标的变化,如图 3-27 所示。

图 3-27 监控指标

左侧的 Available Graphs 是可用的各类指标,如操作系统(Windows、Linux、UNIX等)、Web 服务器(IIS、Apache、Weblogic、Websphere 等)、数据库(SQL Server、Oracle、Sybase、DB2 等)。

1. 图表的布局调整与监控

想监控某个指标,只需把左侧列表中的指标拖到右侧区域即可。小白在实际操作中发现

只有非灰色的指标才可以监控,灰色的指标在当前场景下不可用。用鼠标右键单击图表可以

调整该区域图表布局,如图 3-28 所示,可以展现 1 幅图、2 幅图、4 幅图、8 幅图以及自定义。

图 3-28 图表布局调整

2. Windows 的监控

目前主流的服务器操作系统无非就是 Windows 系列和 Linux 系列,那么掌握监控这两类

流行系统必然是十分重要的。

首先,来看如何监控 Windows,步骤如下。

66   第一篇 初入职场

1)被监控的 Windows 机器需要开启 Remote Procedure Call(RPC)和 Remote Registry Service 服务。

2)拥有管理员访问权限。

3)设置安全策略为经典(在运行框中输入 secpol.msc,出现安全策略设置对话框,依次

单击“本地安全策略”→“安全选项”,然后找到网络访问中的“本地账户的共享和安全模式”,

将其修改为“经典”即可)。

4)在 Controller 中的 Windows 上单击鼠标右键,选择 Add Measurements,出现 Windows Resources 对话框,然后单击对话框中的 Add 按钮,出现 Add Machine 对话框,如图 3-29所示。

5)在 Name 处输入被监控机器的 IP 地址。

6)Platform 值保持默认即可。

7)单击 OK 按钮,可以看到下方列出可监控的指标,如图 3-30 所示。

图 3-29 添加机器 图 3-30 监控指标

注意

监控指标的种类很多,不需要全部监控,一般只选择关键性指标监控,因为监控得越多,对机

器的额外压力也就越大。

3. Windows 性能指标讲解

Windows 中的计数器非常多,但不需要全部掌握,只需对重要监控指标进行学习总结即

可,如表 3-1 所示。

第3章 LoadRunner Controller实战   67

表 3-1 Windows 重要监控指标

Object(对象) Counters(计数器) 含义以及判断技巧

Memory(内存)

Available Mbytes 可用的物理内存数。至少要有 10% 的物理内存值

Page/secPages Read/sec

Page/sec 是为解析硬件页面错误从磁盘读取或写入磁盘的页数。该值不宜超过 20,如果服务器没有足够的内存处理,此值会比较高。 Pages Read/sec 是由于硬页错误而读取磁盘的次数。一

般阈值为 5,如果该值一直持续较大,则表示很多是从磁盘读,可能内存不足。

这些值如果比较高,可能是由服务器的内存短缺引起的,也可能是缓存设置太大导致

Cache Bytes文件缓存系统,默认为 50% 的可用物理内存。IIS 运行

内存不够时,会自动整理缓存

Processor(处理器)

%Processor Time处理器的消耗时间,此值的最佳范围为 75% ~ 95%。如

果持续高于 95 %,则有可能是处理器出现瓶颈,需要添加或更换一个更好的

%Idle Time 处理器的空闲时间。该值太小说明资源可能没有被充分利用

%User Time非系统操作所消耗的时间。如果存在复杂算法或大量计

算可能会导致该值较高

%Interrupt Time

中断操作所消耗的时间,如鼠标、磁盘驱动器、网卡和其他外部设备,这些设备通常都会中断处理器。如果该计数器和 Processor Time 同一时间都比较高(超过 80%),那么很可能是硬件问题

Physical Disk(物理磁盘)

%Disk Time

磁盘操作所占用的时间。此值过大表示耗费太多时间来访问磁盘,可考虑增加内存、换更快的硬盘、优化读写数据的算法等。如果持续走高,而 CPU 与网络并没有饱和,则可能存在内存泄露

Average Disk Queue Length读取请求的平均队列长度。一般小于 0.5,此值过大表示

磁盘 I/O 太慢,要换更快的硬盘

Process(进程) Private Bytes

是当前进程专用的,无法与其他进程共享。可以认为它是进程对物理内存的消耗,且该指标相对来说更加稳定。在程序产生内存泄露时,该值一定是不断上涨的。所以一般更倾向于使用 Private Bytes 来定量进程的内存消耗和分析进程的内存泄露

Network Interface(网络)

Bytes Total/sec每秒发送和接收的字节数,可判断网络是否达到饱和。

该值和目前网络带宽相除的结果应该小于 50%

Output Queue Length输出队列长度。输出队列越长,延时处理输出的数据请

求就越多

System(系统) Processor Queue Length等待处理器处理的线程排队长度,不包括当前正在处理

的。如果该值持续超过处理器的总数量加 1(一般为 2),则有可能处理器出现了堵塞

4. Linux 的监控

Linux 的监控稍微复杂一点,需要先在被监控的 Linux 上安装 RPC 服务。步骤如下。

68   第一篇 初入职场

1)下载 RPC 安装包并在 Linux 中安装。

2)安装完成后使用 rpc.rstatd 命令启动。

3)回到 Controller 中,将 Systeme Resourece Graphs 中的 UNIX Resources 拖到右侧的资

源监控区域。

4)单击鼠标右键,选择 Add Measurements,添加被监控 Linux 的 IP 地址后,再选择要

监控的指标即可。具体操作步骤与添加 Windows 的监控类似。

5)完成后等待一小段时间便会看到数据,如图 3-31 所示。

图 3-31 Linux 监控

注意

如果经过上面的步骤还是无法监控成功,则可以关闭Linux的防火墙之后再试。另外,如果出

现监控过程中突然无法监控到数据,则可能是Linux自动关闭了RPC服务造成的,所以需要再启

动,为了避免这样的情况建议把采样时间设置得长一点。

5. Linux 性能指标讲解

Linux 中的计数器非常多,也不需要全部掌握,只需学习总结重要监控指标即可,如

表 3-2 所示。

表 3-2 Linux 重要指标

指标名称 含义以及判断技巧

Swap-in/out rate 进程与交换分区的交换率。如果比较频繁,可能内存资源的使用比较紧张

System mode CPU Utilization 系统操作所占用的 CPU

User mode CPU Utilization 用户操作所占用的 CPU

Average Load平均负载。指一段时间内 CPU 正在处理及等待 CPU 处理的进程数之和的

统计信息。一般情况下,Load Average < CPU 数 × 核数 ×0.7 为佳

Context switch rate 上下文切换率。减少切换率能有效提升系统响应速度

Paging rate内存页交换率。如果该值偶尔走高,可能当时有线程竞争内存。如果持续

走高,则内存可能是瓶颈

第3章 LoadRunner Controller实战   69

指标名称 含义以及判断技巧

Disk Traffi c 磁盘传输率

Incoming/Outgoing packets error rate 数据包接收 / 发送的错误率。该值较大会影响到响应时间

Collision Rate 冲突率。该值过高会使网络响应变慢

3.4 本章小结

通过这段时间的学习,小白已经掌握了 Controller 中的关键要领,从场景的设计到监控,

以及重要指标的分析都可以熟练完成,也算完成了第二个里程碑的学习,虽然心里很高兴,

但也感受到了压力,需要补充学习的知识太多了。

在本章的学习中,读者要注意灵活处理,很多东西并不是唯一的,没有对错之分,需要

根据自己实际业务灵活调整与试验,切勿死板。

下次小白将以实战方式学习 LoadRunner 的第三大组件 Aanlysis 并进行数据图表分析,

让我们一起期待吧。

(续)

Recommended