3.2 场景设计实战
Controller可以完成多种场景设计,如快增长、慢增长、组模式等,基本可以满足日常的性能测试场景需求。启动Controller后的新建场景界面如图3-1所示。
下面解释图3-1中的主要选项。
1)Select Scenario Type:选择场景类型。根据需要,可以选择手工场景和基于目标的场景。各子选项含义如下。
- Manual Scenario:手工场景。就是手工指定场景如何运行,比较灵活,可以完成绝大多数的场景需求。此处还有一个选项,是否使用百分比模式,一般情况下不勾选。
- Goal-Oriented Scenario:基于目标的场景模式。就是要设定一个目标,然后达到这个目标。例如,设定Hits per Second 100,接着设定虚拟用户数的范围(这个是和Manual Scenario不同的地方),最后根据设置的时间运行,如果没有达到既定目标,则可以选择停止运行或继续运行,如图3-2所示。
https://yqfile.alicdn.com/f346dc0cc3dc87a1d1517f1c0cb06fb8920eb683.png
" >
2)Available Scripts:当前可以使用的脚本。如果没有想要的脚本,可以单击Browse按钮选择。
3)Scripts in Scenario:当选中要加入场景的脚本后,单击Add按钮,即可把脚本加入场景并在该列中显示。
此处小白选择了最常用的手工场景,并将之前练习的脚本加入场景,详细学习Controller。
3.2.1 集合点实战
下面将从什么是集合点、如何启用集合点和集合点的应用策略方面进行讲解。
- 理解集合点
集合点是什么呢?仍以前面的跑步为例。所谓集合点,就是10名运动员从起点出发,要跑3圈,规定再次经过起点时要等待所有运动员全部到达后,才能进行第2圈的赛跑。集合点就是这个道理,它的意义在于最大程度地模拟并发。集合点并不能模拟真正意义上的并发,因为即使是通过集合点的虚拟用户,但由于网络等多种因素的影响并不能同一时刻到达服务器,仍有先后差异。
- 启用集合点
在LoadRunner中启用集合点需要在编写脚本时加入,集合点函数为lr_rendezvous("集合点名称");。只需把集合点函数放到脚本的某个事务或操作之前即可。只有完成这步操作后,才能在Controller中启用集合点,方法为依次单击Insert→Rendezvous菜单项,如图3-3所示。
集合点不要添加到事务中,要放到事务外,否则事务的统计会把集合点的等待时间也统计进去。
- 集合点策略
经过上面的操作就可以进入集合点策略设置界面,如图3-4所示。
图3-4中主要选项含义如下。
1)Rendezvous:集合点的列表,可通过下方的Disable Rendezvous按钮来启用或关闭。
2)Scripts:当前脚本的名称。
3)Vuser:当前设置的并发用户数,可通过下方的Disable VUser按钮来启用或关闭虚拟用户。
4)Policy(集合点策略):单击后进入策略设置对话框,如图3-5所示。
https://yqfile.alicdn.com/c5728fa1f161fdc5429a8aef6ec797451256ed1b.png
" >
图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欺骗的实践。
- 理解IP欺骗
看到这个搞笑的命名小白心里一乐,这功能看着貌似很好玩。IP欺骗就是使不同用户有不同IP地址,这样最真实地模拟了现实场景。但有一点必须明白,对于一般系统而言,是否使用IP欺骗并不会影响性能测试。只有在特殊的要求下才会使用,如下面两种情况。
1)某系统限制了同一个IP用户在短时间内对系统进行恶意或大量的请求访问。
2)负载均衡策略是根据IP规则分配的。
- 启用IP欺骗
想要启用IP欺骗需要做一项前置工作,就是本地的IP地址不能设置为“自动获取”,必须指定一个静态IP地址,否则会弹出如图3-6所示的提示。
静态IP地址指定好之后就可以设置IP欺骗了,步骤如下。
1)依次单击HP LoadRunner→Tools→IP Wizard进入设置对话框,如图3-7所示。
2)选择Create new setting,单击“下一步”按钮,出现如图3-8所示界面。
3)输入服务器的IP地址,或者留空也可以,单击“下一步”按钮,出现如图3-9所示界面。
4)单击Add按钮,弹出添加IP的对话框,如图3-10所示。
5)修改From IP为192.168.3.9,Number to add为5,单击OK按钮,出现如图3-11所示界面。
6)单击“完成”按钮,出现如图3-12所示界面。
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);
else
lr_output_message("IP欺骗不可用");
return 0;
}
- 释放IP欺骗
IP欺骗使用完成后千万别忘了释放,做事情一定要有头有尾,这样才完整。释放的操作十分简单,重复图3-9~图3-12所示的操作,并在图3-9中,单击Remove按钮,移除后再单击“完成”按钮即可。最后别忘了重启计算机,这样就完成了IP的释放。
3.2.3 添加Windows和Linux压力机实战
既然Controller是LoadRunner的“心脏”,那么压力产生也必然是它发起的,通过压力机来对被测系统产生压力。一般压力机分为Windows和Linux。当并发量比较大时建议使用Linux。
- 添加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-14中各选项的含义如下。
- Name:这里很多人都会输入机器的名称,其实应该输入压力机的IP地址。
- Platform:默认为Windows即可。
7)单击OK按钮,完成压力机的添加,然后单击图3-13右侧的Connect按钮,可以测试能否连通,如果连通,则会显示Ready状态。
8)最后可以把压力机分到对应的脚本上,如图3-15所示。
- 添加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.2.4 场景设计实战
场景设计其实就是设置场景的加压方式、运行时间、减压方式等。场景设计并没有好坏之分,因为目的不同,场景就有可能不同,小白学习了如下几种常见的场景设计模型。
- 快增长
快增长的意思就是压力在瞬间启动并达到最大。设置方法为在Controller中的Schedule区域分别双击Start Vusers和Stop Vusers,然后选择Simultaneously,单击OK按钮即可,如图3-17所示。
这样的设置在场景中运行,会瞬间启动20个虚拟用户,持续5min后,瞬间停止这20个虚拟用户。
- 慢增长
慢增长的意思就是压力按照设定的规则慢慢增加,当到达设置点后持续运行一段时间,然后慢慢减压。设置方法同快增长,如图3-18所示。
https://yqfile.alicdn.com/74a3d678597759ecbb71e5f65ca866e205b5132e.png
" >
这样的设置在场景中运行,会以每分钟增加5个虚拟用户的策略增长,当达到20个虚拟用户后,持续运行5min,然后再以每分钟停止5个虚拟用户的策略结束。
- 指定运行次数
这里的运行次数是以虚拟用户数来判断的。例如,如果虚拟用户数是10,选择此种场景策略,则场景运行完10个虚拟用户数后自动结束。双击Duration并选中Run until completion即可,如图3-19所示。
如果对测试数据没有特别的要求,完全可以利用“指定运行次数”这样的场景策略来制造测试数据。
- 组模式
组模式也比较容易理解,仍然以BestTest论坛为例。一些水军经常会注册登录论坛,然后发一些垃圾帖子,管理员要删除这些帖子。对于这样有先后顺序的场景选用组模式。
组模式中的策略有3种,分别如下。
1)在场景开始时启动执行。
2)在场景执行一段时间后开始运行。
3)当某个脚本完成后再运行选定的脚本。