《LoadRunner性能测试巧匠训练营》——3.2 场景设计实战

简介:

本节书摘来自华章计算机《LoadRunner性能测试巧匠训练营》一书中的第3章,第3.2节,作者:赵 强 邹伟伟 任健勇 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.2 场景设计实战

Controller可以完成多种场景设计,如快增长、慢增长、组模式等,基本可以满足日常的性能测试场景需求。启动Controller后的新建场景界面如图3-1所示。


17337cb737b437f9c543733e0a3813094e7b7cf1

下面解释图3-1中的主要选项。
1)Select Scenario Type:选择场景类型。根据需要,可以选择手工场景和基于目标的场景。各子选项含义如下。

  • Manual Scenario:手工场景。就是手工指定场景如何运行,比较灵活,可以完成绝大多数的场景需求。此处还有一个选项,是否使用百分比模式,一般情况下不勾选。
  • Goal-Oriented Scenario:基于目标的场景模式。就是要设定一个目标,然后达到这个目标。例如,设定Hits per Second 100,接着设定虚拟用户数的范围(这个是和Manual Scenario不同的地方),最后根据设置的时间运行,如果没有达到既定目标,则可以选择停止运行或继续运行,如图3-2所示。


<a href=https://yqfile.alicdn.com/f346dc0cc3dc87a1d1517f1c0cb06fb8920eb683.png
" >

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所示。


63f7a06a6932db6141225c81be027a2ff49ad0a6

集合点不要添加到事务中,要放到事务外,否则事务的统计会把集合点的等待时间也统计进去。
  1. 集合点策略
    经过上面的操作就可以进入集合点策略设置界面,如图3-4所示。

图3-4中主要选项含义如下。
1)Rendezvous:集合点的列表,可通过下方的Disable Rendezvous按钮来启用或关闭。
2)Scripts:当前脚本的名称。
3)Vuser:当前设置的并发用户数,可通过下方的Disable VUser按钮来启用或关闭虚拟用户。
4)Policy(集合点策略):单击后进入策略设置对话框,如图3-5所示。


<a href=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欺骗的实践。

  1. 理解IP欺骗
    看到这个搞笑的命名小白心里一乐,这功能看着貌似很好玩。IP欺骗就是使不同用户有不同IP地址,这样最真实地模拟了现实场景。但有一点必须明白,对于一般系统而言,是否使用IP欺骗并不会影响性能测试。只有在特殊的要求下才会使用,如下面两种情况。

1)某系统限制了同一个IP用户在短时间内对系统进行恶意或大量的请求访问。
2)负载均衡策略是根据IP规则分配的。

  1. 启用IP欺骗
    想要启用IP欺骗需要做一项前置工作,就是本地的IP地址不能设置为“自动获取”,必须指定一个静态IP地址,否则会弹出如图3-6所示的提示。

静态IP地址指定好之后就可以设置IP欺骗了,步骤如下。
1)依次单击HP LoadRunner→Tools→IP Wizard进入设置对话框,如图3-7所示。


dc700025514b7d946e89e2133796a4bdd0301637

2)选择Create new setting,单击“下一步”按钮,出现如图3-8所示界面。
3)输入服务器的IP地址,或者留空也可以,单击“下一步”按钮,出现如图3-9所示界面。


bb15103d41c1f796eec5af93e9c2d32fcf4dc7a2

4)单击Add按钮,弹出添加IP的对话框,如图3-10所示。
5)修改From IP为192.168.3.9,Number to add为5,单击OK按钮,出现如图3-11所示界面。

20ea76873c1a9f1514b6ad3b0dbcf5a478d71ede

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


1064e180f1780455f630bfe3c53510c3d0f2a28d

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;
}
  1. 释放IP欺骗
    IP欺骗使用完成后千万别忘了释放,做事情一定要有头有尾,这样才完整。释放的操作十分简单,重复图3-9~图3-12所示的操作,并在图3-9中,单击Remove按钮,移除后再单击“完成”按钮即可。最后别忘了重启计算机,这样就完成了IP的释放。

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所示界面。


58278b7d2127dc70c8ff550c1cd662b92ffd89d7

图3-14中各选项的含义如下。
  • Name:这里很多人都会输入机器的名称,其实应该输入压力机的IP地址。
  • Platform:默认为Windows即可。

7)单击OK按钮,完成压力机的添加,然后单击图3-13右侧的Connect按钮,可以测试能否连通,如果连通,则会显示Ready状态。
8)最后可以把压力机分到对应的脚本上,如图3-15所示。


2683a3ae537a14426b76ba8aad110855832813bf
  1. 添加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复选框。


536aaf31d7e96227c5193cbc9e3d89c6ab0ff765

3.2.4 场景设计实战
场景设计其实就是设置场景的加压方式、运行时间、减压方式等。场景设计并没有好坏之分,因为目的不同,场景就有可能不同,小白学习了如下几种常见的场景设计模型。

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


c8ef1b965d9d44a03ec8b83b30d74dd10bea4d2d

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

  1. 慢增长
    慢增长的意思就是压力按照设定的规则慢慢增加,当到达设置点后持续运行一段时间,然后慢慢减压。设置方法同快增长,如图3-18所示。


<a href=https://yqfile.alicdn.com/74a3d678597759ecbb71e5f65ca866e205b5132e.png
" >

这样的设置在场景中运行,会以每分钟增加5个虚拟用户的策略增长,当达到20个虚拟用户后,持续运行5min,然后再以每分钟停止5个虚拟用户的策略结束。

  1. 指定运行次数
    这里的运行次数是以虚拟用户数来判断的。例如,如果虚拟用户数是10,选择此种场景策略,则场景运行完10个虚拟用户数后自动结束。双击Duration并选中Run until completion即可,如图3-19所示。


1a09054d9a5e4af897e6e48004e710c59af54233
如果对测试数据没有特别的要求,完全可以利用“指定运行次数”这样的场景策略来制造测试数据。
  1. 组模式
    组模式也比较容易理解,仍然以BestTest论坛为例。一些水军经常会注册登录论坛,然后发一些垃圾帖子,管理员要删除这些帖子。对于这样有先后顺序的场景选用组模式。

组模式中的策略有3种,分别如下。
1)在场景开始时启动执行。
2)在场景执行一段时间后开始运行。
3)当某个脚本完成后再运行选定的脚本。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
1月前
|
测试技术
性能场景之压测策略设计
【2月更文挑战第19天】性能场景之压测策略设计
289 4
性能场景之压测策略设计
|
2月前
|
Java 测试技术 Maven
JAVA单元测试概念与实战
单元测试是软件开发中的一个测试方法,用于验证软件代码中最小的、独立的单元是否按照预期工作。在Java中,这通常指的是单个的方法或者一个类的个别功能。单元测试的目的是隔离代码的每个部分,并确保各个部分是正确的。
51 4
|
3月前
|
前端开发 测试技术
可访问性测试清单/测试用例/场景
可访问性测试清单/测试用例/场景
可访问性测试清单/测试用例/场景
|
3月前
|
域名解析 JSON 测试技术
常见移动端APP测试场景
常见移动端APP测试场景
|
5月前
|
消息中间件 弹性计算 Java
使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
使用阿里云性能测试工具 JMeter 场景压测 RocketMQ 最佳实践
|
3月前
|
监控 数据可视化 Java
jvm性能调优实战 - 31从测试到上线_如何分析JVM运行状况及合理优化
jvm性能调优实战 - 31从测试到上线_如何分析JVM运行状况及合理优化
51 1
|
4月前
|
机器学习/深度学习 人工智能 算法
软件测试/人工智能|人工智能与自动化测试结合实战-探索人工智能在测试领域中的应用
软件测试/人工智能|人工智能与自动化测试结合实战-探索人工智能在测试领域中的应用
143 0
|
1月前
|
存储 测试技术 C++
P2P网络下分布式文件共享场景的测试
P2P网络下分布式文件共享场景的测试
32 6
|
1月前
|
运维 数据库
Powershell实战:测试网络请求两个命令介绍
【2月更文挑战第11篇】 Test-Connection 命令将 Internet 控制消息协议 (ICMP) 回显请求数据包或 ping 发送给一台或多台远程计算机并返回回显响应回复。 我们可以使用该命令确定是否可通过 IP 网络ping通特定的计算机。
|
2月前
|
测试技术 API Python
Python自动化测试:unittest与pytest的实战技巧
Python自动化测试:unittest与pytest的实战技巧

热门文章

最新文章