LoadRunner学习知多少

LoadRunner学习知多少--关联
一.关联操作的条件
客户端需要从服务端返回的数据中获取部分数据,并将这部分数据处理后作为自己下一次请求的一部分发出。
那么什么地方需要关联呢?
凡是脚本每次执行时都必须获得唯一标识的地方都需要关联。假如脚本需要关联,如果不做关联是不会执行通过的,也就是说会有错误消息发生。不过很遗憾,并没有任何特定的错误消息和关联是有关系的。会出现什么错误消息,与系统实际的错误处理机制有关。错误消息有可能会提醒用户要重新登录,但是也可能直接就显示HTTP
404的错误消息。&
二.如何找出要关联的数据呢
简单地说,每一次执行时都会变动的值,就有可能需要做关联。
如:序列号和随机数一般需要关联。
&常见的需要关联的情景:
1.登录操作
2.先查后修改,先查后删除
3.并发控制:防止两个用户同时修改或同时删除一条记录
三.一般关联操作的步骤
从服务端返回的数据中选取需要进行关联的操作。
将该数据存入脚本的一个参数中。
将脚本中需要使用该数据的地方用参数来替代。
注:对于WEB应用来说,一般会用一个hidden的Field存放。
四.关联分为自动关联和手动关联
自动关联操作只对Web协议、DB协议和其他少数几种协议有效,对socket等协议录制的脚本不起作用。
五.关联函数web_reg_save_param_ex详解
在LR11中除了对web_reg_save_param加强为web_reg_save_param_ex,还提供了另外两个非常好用的函数web_reg_save_param_regexp和web_reg_save_param_xpath。
此处设置存放参数的名称,关联出来的内容将会存放在该参数中。这里受到Ordinal选项的影响。 
设置Parameter
Name为temp,当对应的Ordinal选项是任意一个数字的时候,只会关联一个匹配的记录,关联值将会存放在temp这个参数中。当Ordinal是All的时候,关联成功后的值将会依次存放在“temp_数字”这样的参数数组中,并且还会添加一个temp_count的参数存放关联出来的记录条数。
此处设置左边界,这里是用来填写关联对于数据处理的左匹配内容规则。
注意:如果输入的内容里面有双引号,那么需要通过转义符\来进行处理,例如:
web_reg_save_param_ex(
"ParamName=test",
"LB=\"左边界",
SEARCH_FILTERS,
默认情况下边界是Match
case的,也就是检查大小写的,可以取消下面的选项来忽略大小写检查,会看到函数变为以下形式:
web_reg_save_param_ex(
"ParamName=test",
"LB/IC=左边界",
SEARCH_FILTERS,
如果需要关联的内容是非ASCII字符的,那么需要使用该选项。选中该选项后可以看到函数变为以下形式:
web_reg_save_param_ex(
"ParamName=test",
"LB/BIN=\\x3F\\xDD",
SEARCH_FILTERS,
expression
该功能由函数web_reg_save_param_regexp实现。
此处设置右边界,这里是用来填写关联时对于数据处理的右匹配内容规则,选项同左边界。
在录制选项和回放选项中我们提到过了DFE的功能,在关联这里也支持DFE的数据处理,我们先回到录制选项中的那个例子中,为其写一个普通关联看看返回(为了让返回结果看得更清楚,这里提前使用了Scope=BODY规则,该规则作用参考后面的Scope属性介绍)。
接着我们使用关联的DFE功能,在这里设置关联的DFEs格式为JsonXml(这里的格式是指系统自带的DFE模块的Tag名,参考图3.35),然后还要确保Run-time
settings中的DFE功能启用,代码变为:
web_reg_save_param_ex(
"ParamName=jsonresponse",
"DFEs=JsonXml",
"Ordinal=1",
SEARCH_FILTERS,
web_url("json.php",
"URL=http://localhost:8000/phpwind85/json.php",
这个关键字在很多函数里面都有应用,在这里可以填写任意一个整数,也可以填All。如果填写数字,那么说明从返回的记录中取出对应顺序的值,而填写All的话将会返回所有的内容。
&当使用Ordinal
=All时,关联函数会把所有匹配过滤策略的记录都抓出来,由于参数只能存放一条记录,所以关联函数会生成一个参数数组。被关联的记录会以{关联参数名_关联id}的形式生成参数列表,并且在最后会有一个{关联参数名_count}的参数来存放被关联到的记录条数。
  例如,上面写过的一个关联热搜关键字的例子,代码如下所示:
web_reg_save_param_ex(
"ParamName=hotsearch",
"RB=&type=thread\"&",
SEARCH_FILTERS,
  当Instance设置为All时,代码变为:
web_reg_save_param_ex(
"ParamName=hotsearch",
"RB=&type=thread\"&",
"Ordinal=ALL",
SEARCH_FILTERS,
运行代码后,关联将会返回所有匹配左右边界的内容,结果如下:
Action.c(20): Notify:
Saving Parameter "hotsearch_1 = 结婚".
Action.c(20): Notify:
Saving Parameter "hotsearch_2 = 母婴".
Action.c(20): Notify:
Saving Parameter "hotsearch_3 = phpwind".
Action.c(20): Notify:
Saving Parameter "hotsearch_4 = testing001".
Action.c(20): Notify:
Saving Parameter "hotsearch_5 = 结婚".
Action.c(20): Notify:
Saving Parameter "hotsearch_count = 5".
设置关联的内容偏移量,从第几位开始进行关联操作。回到最开始的例子,我们抓取的是You
have successfully installed XAMPP on this
system!,如果需要获得successfully installed XAMPP on this
system!这个字符串,则不用改变左边界,只需要设置Save Offset为9即可,代码为:
web_reg_save_param_ex(
"ParamName=temp",
"LB=Congratulations:
"Ordinal=1",
"SaveOffset=9",
SEARCH_FILTERS,
"ContentType=text/html",
&&&&&&&&&&&&&&&&&&
关联出来的内容所需要保存的长度。在Save
Offset的例子中我们写到如何获得successfully installed XAMPP on this
system!这个字符串,如果我们还希望获得这个字符串中的successfully installed
XAMPP,那么可以再添加Save Length为22,代码变为:
web_reg_save_param_ex(
"ParamName=temp",
"LB=Congratulations:
"Ordinal=1",
"SaveOffset=9",
"SaveLen=22",
SEARCH_FILTERS,
"ContentType=text/html",
通过Save Length和Save
Offset的设置,我们就可以方便地抓取服务器返回的定长数据的任意一个部分了。
关联可以调整偏移量和长度,那么参数能做到吗?当然可以,如果需要对一个参数值进行偏移和长度设置,则需要使用lr_save_var函数,例如,下面的代码:
lr_save_string("I
come from shanghai","city");
lr_save_var(lr_eval_string("{city}"),6,0,"result");
//从city这个参数中取6位长度的内容保存到result参数中
lr_save_var(lr_eval_string("{city}")+7,4,0,"result");
//从city这个参数的第7位开始取4个长度的内容保存到result参数中
可以看到运行的结果是:
Action.c(3): Notify:
Saving Parameter "city = I come from shanghai"
Action.c(4): Notify:
Saving Parameter "result = I come"
Action.c(5): Notify:
Saving Parameter "result = from"
text was not found (Default is Error)
如果关联的对象不存在,又该如何进行处理呢?默认值为Error,默认情况下如果没有关联到任何内容则提示错误。
下面的选项都是帮助关联返回限定的,通过这些设置可以进一步减少返回的范围。
该项设置关联查询的范围,在LR11中和以前的范围做了一些调整,应该算是更加强大了,这里Scope提供了4个选项:Body、Headers、Cookies、All。
比较容易理解,就是让服务器的返回所有内容作为需要关联的目标来处理。
2)Headers/Body/Cookies
  这3个选项都是从请求返回的所有内容进行关联处理,包括图片、JavaScript脚本等。区别在于对返回信息的分隔方式。在前面介绍HTTP的时候介绍过HTTP返回的内容其实是由Header(HTTP信息头)和Body(HTTP内容)组成的,而Cookie又是Header中的一部分,在Tree模式下的HTTP
View视图中可以清晰地看到LR如何定义各块内容。当我们对Phpwind登录返回做关联时,不同的Scope带来的效果如下。
  指所关联的内容是所有服务器返回请求的HTTP头部分内容。可以通过查看服务器返回内容来了解,Body之前的内容都属于Header:
  就是服务器返回在Body以后的内容:
  指Header部分关于Cookie定义的部分内容。
  Request
这里提供了针对URL地址的过滤方式来减少关联范围,例如,我们可以填写*.php来说明只对PHP页面进行过滤。
  Content
回顾我们在讲录制下载操作的时候,提到了Content
Type这个概念,这样在录制的时候可以通过这个特性来过滤录制对象。而在关联这里,这个属性的效果是相同的,在网站应用中,我们要关联的内容一般都存放在HTML页面中,所以这里我们通常都是用text/html来作为Content
Type过滤规则的。
  Frame ID
这个选项是专门针对框架结构的网站设计的,有些时候需要关联的内容是在某个框架中的,这个时候就需要说明所关联的页面是框架中的哪一个了。
Redirection
在某些情况下系统会使用HTTP
3xx的重定向操作来完成页面跳转,该选项是用来忽略跳转页面信息的。如果选中该选项,通过这种重定向技术的页面将不会被关联。
有时需要配合使用web_set_max_html_param_len函数可以自定义关联返回值存放的参数的最大长度。
六.关联函数web_reg_save_param_regexp详解
在介绍这个函数前先来处理一种情况。前面关联的左右边界都是静态的,如果左右边界是动态的,并且系统返回的id是不定长度的,那么如何使用关联函数将该id取出呢?这个问题在现实情况中会经常遇到,仅仅通过一个关联函数是无法处理的,这个时候还需要使用一个函数strtok()来进行字符内容切割。
strtok()函数的作用是通过某个分隔符来切分内容的。
temp[100];
extern char *
strtok(char * string, const char * delimiters );
lr_save_string("sessionid=&action=work","param");
strcpy(temp,lr_eval_string("{param}"));//取出参数值,并且赋值给变量temp
token = (char *)strtok(temp,"&");//使用&符号作为分隔符
这个时候token="sessionid=",并且是根据&符号分隔的,所以id的长度可以任意变化,而token中的sessionid可以通过关联的时候Save
Offset进行处理,或者使用strtok()函数对等号再次进行处理。
而在LR11中提供了web_reg_save_param_regexp正则表达式关联,上面的写法也可以退休了。打开Add
Step添加步骤,选择web_reg_save_param_regexp函数,打开设置窗口,如图所示
在这个函数中关键就是在Regular
Expression的写法上,在前面XML参数的lr_xml_find函数中我们提到过正则表达式的写法,在这里的写法唯一区别在于需要关联返回的内容需要用()圆括号标记。例如,这里的read(.*)\.php就是指所有符合read开头.php结尾中间的任何内容都关联保存到参数temp中,这里的\是转义符,确保.号能够正确地当做普通字符来匹配。
举例说明:
在Phpwind中如果我们要关联一个没有被回复过的帖子的发帖人是谁,这个在以前是比较难于实现的,我们先来看看一个帖子的HTML代码:
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
在这个代码中我们需要关联的正文是admin,验证的部分在于0,这里的0代表没有回复,后面的2代表两次阅读。关联的难度在于如果用回帖数作为左边界那么右边界中的阅读数是动态数据。如果用回帖数作为右边界那么左边界中的发帖时间和用户uid是动态数据,导致这个关联在以前的写法中很难实现,必须要扩展关联后使用strtok来分离。现在使用正则表达式关联这个问题就非常简单了,代码如下:
web_reg_save_param_regexp(
"ParamName=temp",
"RegExp=0.*\r\n.*username=(.*)\"&.*
"Ordinal=1",
SEARCH_FILTERS,
  这里的过滤方式是使用0作为左边界然后拼接任意内容接回车换行符,再接任意字符至username=处,关联这串内容的右侧到"&位置后面接任意字符,再接
。通过这个关联就可以得到未回帖的发帖人名了,另外一种使用回帖数为0作为右边界的写法为:
web_reg_save_param_regexp(
"ParamName=temp",
"RegExp=uid=.*\"&(.*)
.*\r\n.*0",
"Ordinal=1",
SEARCH_FILTERS,
  刚开始写的时候大家会困惑在正则表达式的编写上,多多尝试(注意\r\n\b回车符、换行符及空格这是开始最难处理的东西),并且合理应用常见的正则表达式验证工具,就可以逐渐上手,成为你关联应用时的神器。
  如果想要获得一个没有回复帖子的帖子编号,正则表达式为:
web_reg_save_param_regexp(
"ParamName=topicid",
"RegExp=ajax_(.*)\"
class.*\r\n.*\r\n.*\r\n.*0",
"Ordinal=1",
SEARCH_FILTERS,
  换成strtok的写法那么就要这样写了:
tokstr[2000];
extern char *
strtok(char * string, const char * delimiters );
web_reg_save_param("string",
"LB=a_ajax_",
"Search=NoResource",
//请求部分略
strcpy(tokstr,lr_eval_string("{string}"));
token = (char
*)strtok(tokstr,"\"");
lr_output_message(token);//输出处理后得到的帖子编号
七.关联函数web_reg_save_param_xpath详解
如果大家用过一些自动化工具可能会对Xpath比较熟悉。Xpath可以通过路径的方式访问到XML、HTML的任意节点位置,在关联里也可以使用这个技术来帮我们查找需要的元素。
Step添加步骤,选择web_reg_save_param_xpath函数,打开设置窗口,如图所示。
  在这里需要为Query
String编写对应的Xpath查询语法,这里填写的/t/book/title是指一个XML格式中的结构。通过这个关联我们可以从:
cloudcloudB
  这样的服务器返回中得到以下结果:
Action.c(14): Notify:
Saving Parameter "temp_1 = A".
Action.c(14): Notify:
Saving Parameter "temp_2 = B".
Action.c(14): Notify:
Saving Parameter "temp_count = 2".
  对于一些比较复杂的数据格式,那么怎么编写Xpath呢?这里使用FireBug来帮助我们,首先安装Firefox浏览器并且安装FireBug插件,接着在打开的页面中点击右下角的FireBug图标,切出该插件,所示。
  接着在浏览页面中找到自己想要的内容,通过右键菜单中的Inspect
Element将这个元素定位,如图所示。
  接着将鼠标放到上面的工具条中,会看到对应的Xpath层次已经显示出来了,如图所示。
  这里可以通过右键菜单复制当前的Xpath字符串,也可以在下面更加准确选择,如图所示。
  通过这种方式不但可以得到XML的任意位置Xpath写法,还能获得HTML的任意位置Xpath。在得到Xpath后就可以直接复制到关联函数web_reg_save_param_xpath中了。但是在LR11中该关联函数只对XML数据格式有用,对于HTML格式无法使用Xpath进行定位关联,所以,在处理HTML内容时还是推荐使用前面的两个关联函数来处理。
八、转义字符总结
在做手动关联时,取边界值的时候,会经常用到转义字符,现将转义字符整理如下:
\t 水平制表
\v 垂直制表
\? 问号字符
\' 单引号字符
\" 双引号字符
('postbatch','a_ajax_1884')"
&&&&&&&&&&&
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。LoadRunner学习知多少_百度知道学习loadrunner应该掌握的知识_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
学习loadrunner应该掌握的知识
上传于||文档简介
&&性​能​测​试
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢技术改变世界!
--狂诗绝剑
20:14 by MikeZhou, ... 阅读,
使用IP欺骗功能时,需要将系统防火墙,杀毒软件关闭(如果有影响的话)
一、为什么要设置IP欺骗
1、 当某个IP的访问过于频繁,或者访问量过大时,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量,以达到压力测试的效果。
2、 某些服务器配置了负载均衡,使用同一个IP不能测出系统的实际性能。LR中的IP欺骗通过调用不同的IP,可很大程度上的模拟实际使用中多IP访问和测试服务器均衡处理的能力。
3、有一些网站会限制同一个用户同一个IP&的登陆。为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不&同的IP&访问同一网站。
二、IP欺骗设置方法
在配置前首先要确定本地IP是固定的,不能是自动获取的
所添加的IP只能是局域网内的网段,即只能添加192段,127段,10段的IP地址
IP Spoofer 在连接 Load Generators 之前启用
打开开始菜单中的LoadRunner文件夹下的Tools文件夹,点击IP Wizard:
第一次运行IP Wizard需要选择第一项&Create new settings&,如果以前运行过,可以选择第二项,选择保存好的文件;第三项用于使用IP欺骗进行测试完成后,释放IP的。(因为该操作会占用大量的IP资源,可能会导致其他机器没有IP可用的尴尬局面,使用该项,可以恢复到原来的状况)。
这里选择第一项,&下一步&,出现IP Wizard的第二个窗口:
这里输入Web Server的IP地址(这里输入应用程序所在的服务器的IP地址,IP Wizard将会检查服务器路由表是否需要更新,如果需要更新的话,将会产生相应的脚本帮助你来更新服务器路由表,如果服务器和客户端在同一网段,这个IP可以不填)。然后&下一步&,出现向导的第三个窗口:
&从&From IP&文本框中输入要使用IP范围的第一个IP值,然后在&Numbers& to Add&输入一个数字,表示IP范围的值;&Submask&使用默认情况,取决于使用的那种类型的网络IP,一般局域网内采用Class C即可。
建议此处选择Save as 保存IP。保存IP列表后,下次使用时,可以直接导入IP列表;也可以直接修改保存的IP列表文件,再导入。
设置完成后,重新启动计算机。
重启后,在命令行输入ipconfig查看IP:
三.在场景中使用IP欺骗
1.勾选&Scenario&--&Enable IP spoofer&;
2.勾选&Tools&&&Export Mode&;
3.&Tools&&&Options&&&General&
&Multiple IP address mode选择&IP address allocation per process&
这个选项一定要与当前场景的模式相匹配,也就是说使用本地虚拟IP测试时需要选中线程方式,使用负载生成器使用虚拟IP测试时需要选中进程方式。
4.&Diagnositics&&&Configuration&
&Web Page Diagnostics&设置为Disable.
四、验证是否生效
在脚本中添加如下代码:
char *ip = lr_get_vuser_ip();if (ip)&&&& lr_output_message("The IP address is %s", ip);else&&&& lr_output_message("IP spoofing disabled");
注:这个在generator中是不生效的,所以在回放代码时看到的都是&IP spoofing disabled&.在Controller中设置了启用IP欺骗后,日志中就可以看到。如下图:
Controller的运行页,运行场景,在Vusers中,状态列中右键可以查看Vuser日志,弹出的提示框头几行就有显示当前使用的IP.
前提是:在Run-time Settings中的Log中设置Extended log下面的三个都勾选中,否则只能看到第一个虚拟用户的log
菜单栏:Results&---&&Results&Settings...
C:\Users\Administrator\AppData\Local\Temp &就是你运行脚本的目录,找到log\目录下面,也可以查看日志。
五. 释放IP
打开开始菜单中的LoadRunner文件夹下的Tools文件夹,点击IP Wizard:
选中第三项:
&重启计算机即可。
六、使用中遇到的问题
1. 启用IP欺骗后,运行1个虚拟用户的场景都失败;不启用IP欺骗后,运行场景通过;
原因:查看失败的虚拟用户使用的IP地址,在服务器端通过ping等命令查看网络是否互通;如果服务器ping不通虚拟ip,说明网络设置有问题,检查网络设置。
2.&& 运行开始菜单下的IP-Wizard,提示以下错误:
原因:如果IP设置为&自动获取&,在运行IP Wizard程序时会弹出错误提示;运行IP Wizard的机器必须使用固定的IP,不能使用动态的IP.
3.添加IP欺骗后使用的IP,会有提示框提示保存IP列表,确定,取消等按钮,建议保存IP列表再确定完成。
原因:保存IP列表后,下次使用时,可以直接导入IP列表;也可以直接修改保存的IP列表文件,再导入。
4.添加IP欺骗和释放IP,都要重启机器后才会生效
原因:重启后,网络配置才会生效。
5.运行场景时,报错&Error... Failed to connect to load generator.Check the output&windows&for more details&
解决:手工启动agent服务。
6.运行场景报错&Action.c(30):Error: Socket descriptor not found. Hint:the problem might be solved applying the following:(1) Update Run-Time Settings to Run Vusers as a process.(2)Add& the following line into mdrv.exe,[lr_socks] section:& ExtCmdLineConc=-UsingWinInet Yes&&
解决方法:
a.根据错误提示,在Run-time Settings中的&Miscellaneous&项中设置&run vuser as a process&;在安装目录中的dat文件夹中查找mdrv.dat,找到[lr_socks]段,在最后添加&ExtCmdLineConc=-UsingWinInet Yes&一句。
近些天做了系统的性能测试,其中对于gis地图这块,仅是打开地图一个操作,若给系统加压后,系统就报错,意思上地图服务关闭连接不上。后来得知,公司用的gis这块的服务不允许一个IP多次访问,于是想到了loadrunner虚拟IP功能。我也是第一次做,网上查了一些资料,翻了本书,现将操作步骤记录一下,为了以后翻看方便吧。
虚拟IP,顾名思义就是给自己网卡添加多个IP地址。
1、首先在场景运行之前,开启IP Spoofer功能)(Scenario-&Enable IP Spoofer)
2、然后确认DHCP服务是关闭状态(由于,DHCP服务是自动获得IP),其实就是给电脑手动分配地址。我用的是无线,以无线为例,在网络连接中查看属性,DHCP服务是否开启(操作步骤:打开网络连接-&打开无线网络的属性-&选择Internet协议(TCP/IP)点击查看其属性-&高级)
我的本一开始是开启状态,如图:添加IP地址的按钮是灰色不可用的
3、查看电脑目前具体的IP地址详细信息(运行-&cmd-&ipconfig /all;另外也可以右击网络连接图标-&状态-&支持-&详细信息),然后根据详细信息,手动配置IP地址及DNS信息。
4、然后再点击高级按钮,可以看到添加IP地址的按钮可用了,然后就可以添加IP地址了,添加IP地址有两种方法
一种是可以手动添加IP地址(我试过,只能添加5个)
点击添加后&&&
另一种是可以利用loadrunner自带的IP
Wizard功能,给网卡批量添加IP地址,其具体的方法如下:
1)、打开IP
Wizard功能(开始-&所有程序-&Mercury Lodrunner-&Tools-&IP
题外话,若DHCP服务启动,IP
Wizard功能是不可用的,会有如下提示
其解决办法,就是禁掉自动获得IP,手动添加静态IP,参照步骤2
& &2)、接着说打开IP
Wizard后,选择第一项,添加ip,点击&下一步&
&&& 说明:loadrunner在做IP欺骗时,真实的虚拟了IP地址,该IP地址均真实存在,可以ping通,可以建立网络链接,在不使用时必须进行释放,否则这些IP地址将一直存在
&&& 3)、此步让输入server的IP地址,我是输入的要访问的服务器地址(不知道是否正确,后面步骤也提示此地址无效不可用,暂时不清楚究竟该输入什么,但是结果不影响),然后点&下一步&
4)点击添加按钮
可以添加IP段,输入IP地址的第一个地址,和所要添加的数量即可
输入相应的第一个IP地址和数量之后,点击OK按钮,验证IP是否已使用
然后提示哪些IP没有被添加上(我是输入开始IP是192.168.2.2,总共数量是250个,然后提示信息如下:)
点击&确定&后,显示添加了哪些IP信息
然后重启网卡,使新增的IP都生效(禁用网卡,启动网卡及可靠),然后查看IP是否生效(运行-&cmd-&ipconfig /all)
&&& 6、运行场景之前,设置IP虚拟是线程或者进程模式,在启动了IP欺骗之后,
在工具菜单下选择
tools--expert mode,
进入tools--options--general,选择是按进程还是线程来加载IP(必须在专家模式下且已经启用ip欺骗后
才能设置)
选择哪种方式运行(参考)
到此为止,虚拟IP设置完毕了,然后设置具体的场景之后,就可以运行脚本了。
在此需要说明一下,我的是一个脚本,不用添加多个generator,我看网上有的网友在运行之前还得手动添加多个IP,其中查了下,其实大家有一个普遍的误区::和Generator搞混。以为添加多个IP后,需要添加多个IP对应的Generator才可以使用。(同一个Generator只需要以其某一个IP添加到Generator列表中即可以使用其它的IP),一开始我也烦恼,加压如何在generator手动添加多个IP,看了这句话,放心了,添加一个足矣。
运行后,如何查看是否真正地使用了不同的IP,其方法有两种:
1)&场景的日志打开,并且是扩展日志(Extended
log),选择了&Date returned by server&项,运行后,选择某一个用户,右击,查看其日志内容
可以看到其IP地址,如下图所示:
&&& 2)在脚本的int函数中添加如下代码:
注题外话:若在脚本中直接运行,没有日志,若将此代码放在代码中间,直接运行脚本,系统会报错
然后在场景中新加载脚本,场景日志也是打开状态,选择标准日志即可,同样在日志中,可以查看当前虚拟用户的虚拟IP地址
并且看了几个不同的用户,他们的IP地址不同,由此可见实现了IP地址的虚拟!
注,我测试的系统server不允许同一个IP多次访问,所以在运行设置的时候,Duration中不设置运行时间,为了起到给系统加压的效果,可以开始的用户多些,且加载的间隔时间短些即可(比如,50个用户加压,可以一开始20个,间隔时间为10,这样我可以实现至少40个用户同时在使用系统)。需要说明的是,再次给系统加压,还是会出现server关闭的现象,但是失败的用户就1,2个左右,不是之前的大批量失败了。
b.在选择了expert mode后,选择option-general,选中&ip address allocation per process&
c.如果仍然报错,在菜单栏中点击Diagnostics&configuration项,将web page diagnositics项的disable去掉(该路径是在lr11中的位置,若是lr8.0,则在Diagnositics&Distribution,disable Web page Disagnositics选 项).}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信